- 1. SwiftでAPIを叩いてサーバーから情報を取得する方法
- 2. バックグラウンド時やアプリ未起動時でもプッシュ通知をハンドリングする方法
- 3. iOSアプリの機密情報(API Key/Secrets etc.)をセキュアに管理する [Arkana]
- 4. (Swift)(PencilKit)PencilKitを使いページング機能付きお絵描きアプリの実装方法
- 5. Firebaseプロジェクトの作成(Flutter)
- 6. TestFlightで毎回表示される「輸出コンプライアンスがありません」の設定を省略する方法
- 7. TB(D)RにおけるGPU時間の計測に関する注意; スマホ?でdraw callのGPU時間は計測できない
- 8. 【Flutter】インテグレーションテストでスクリーンショットを自動で取得する。
- 9. 【Xcode】”XXXXXX”をインストールできませんでした
- 10. iOSでアプリ内課金を実装する(サーバーサイド)
- 11. (Swift) (MultipeerConnectivity) Bluetooth等でiOSの端末間の通信(P2P通信)を実装する方法
- 12. 【Xcode】シュミレーターAppleWatchの言語変更方法
- 13. Windows11へios-webkit-debug-proxyをインストールして、chrome://inspect/で iOS Safariデバッグする。
- 14. Segmented Controlのセパレーターを消す方法
- 15. 【Xcode】アプリのアイコンをユーザーが選択可能にする
- 16. IQKeyboardManagerを使用する際、特定の画面のみ機能を無効にする
- 17. [SwiftUI]TextFieldのテキスト入力監視処理のサンプル
- 18. setup appium in Mac for iOS APP (Monterey)
- 19. 【Swift】ローカルのHTMLとCSSをWebViewに表示する
- 20. Bitriseを用いたreact-nativeアプリ (iOS) のCI/CD構築
SwiftでAPIを叩いてサーバーから情報を取得する方法
# はじめに
SwiftでAPIを叩いてサーバーから情報を取得する方法を解説していきます。
後半にはサンプルコードを記載しています。
# この記事の対象者
・iOSアプリからAPIを叩いてサーバーから情報を取得する方法を知りたい方
・APIを叩いて情報を取得するサンプルコードが欲しい方
・汎用性の高く使いやすいAPI通信の実装方法の
# 開発環境
・Swift5
・Xcode 13.4.1
・iOS 15
#解説手順
1、今回取得する施設データ(JSON形式)
2、サーバーから取得した情報を格納するクラスを作成
3、サーバーにリクエストを送信しレスポンスを受信
4、サンプルコード
## 1、今回取得する施設データ(JSON形式)
こちらが今回APIから取得するJSON形式のデータです。
“`swift
//サーバーにある施設情報(仮)
let homeData_json = {“status”:true,”homes”:[{“homeId”:”4”,”homeName”:”A施設_1ち”,”homeType”:”2″,”homeImage”:”/img/s-study.png”},
バックグラウンド時やアプリ未起動時でもプッシュ通知をハンドリングする方法
プッシュ通知の受信イベントをバックグラウンド時にハンドリングする方法を調べても、サイレントプッシュ通知の記事ばかりが上がってきて、やり方を見つけるのに苦労したので記事にしました。
# 結論
Notification Service Extension を使う!
UNNotificationServiceExtensionのdidReceiveにOSLogを仕込んで確認したら、アプリ未起動時など状態に関わらずプッシュ通知をハンドリングできていました。(ここに通知を受信したときにやりたいことを書けばOK)### 補足
Notification Service Extension は、通知をAPNsから受信してからユーザーに見せる前にペイロードを編集したりできるapp extensionです。実装方法については[こちら](https://dev.classmethod.jp/articles/user-notifications-framework-13/)を参考にさせていただきました?
iOSアプリの機密情報(API Key/Secrets etc.)をセキュアに管理する [Arkana]
# はじめに
iOSアプリにおいて、サードパーティSDKなどから提供されるAPI KeyやSecretsなど、機密情報をどのようにセキュアに管理するといいでしょうか。
単純に実装するとハードコーディングや、設定ファイルなどに記述し、リポジトリにpushするようになってしまうと思いますが、セキュリティの観点からはアプリと同じリポジトリにpushするのはよろしくありません。例えばリポジトリに閲覧権限を持っている場合、API Keyを使ってAPIサービスの実行ができてしまったり、CIツールなどでソースコードを外部からアクセスさせている場合、CIツールへ不正アクセスされ漏洩する可能性もあります。
そのため、例えプライベートリポジトリだったとしても、機密情報の扱い方を考える必要性があります。# cocoapods-keys
これまでiOSアプリでは、[cocoapods-keys](https://github.com/orta/cocoapods-keys)が使われることが多かったと思います。
https://github.com/orta/cocoapods-keys
coc
(Swift)(PencilKit)PencilKitを使いページング機能付きお絵描きアプリの実装方法
# はじめに
PencilKitを使ったお絵描きアプリの実装方法の記事はよく見かけるがページング付きのお絵描きアプリの記事は見かけません。あと実際に実務で開発した時に苦労したので、忘備録として投稿してます。
# この記事の対象者
・PencilKitを使ったお絵描きアプリを実装したい方
# このアプリでできること
・一つの画面で描画しながらページングできる
・次へボタンで新しいページを作成
・キャンバスに背景色/背景画像を指定
・キャンバスの描画情報と背景色/背景画像を合成して、1枚の画像に変換
・ToolPickerの出し入れ
またのちほど書いていきます
Firebaseプロジェクトの作成(Flutter)
## 概要
FlutterアプリとFirebaseを接続するための準備をします。
Firebaseの設定~Flutterプロジェクトのビルドが通るようになるまで### 前提
デフォルトのカウントアプリを改変して作っているので、
諸々名前が違かったらごめんなさい!
メモ程度でしかないので、ご参考までに〜## Android
![スクリーンショット 2022-06-30 18.13.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462497/ea1c6e5c-6ae0-13ae-c8a5-e70778cf7166.png)/{PROJECT_NAME}/android/app/src/main/AndroidManifest.xml
にある
“`
“`PACKAGE_NAMEをコピーし、
TestFlightで毎回表示される「輸出コンプライアンスがありません」の設定を省略する方法
# 目次
[1.やりたいこと](#1-やりたいこと)
[2.解決策](#2-解決策)
[3.まとめ](#3-まとめ)# 1. やりたいこと
AppStoreでTestFlightをアップロード後、毎回「輸出コンプライアンスがありません」が表示され、
下記のような質問事項に毎回答える必要があるため、これを省略したい。
TB(D)RにおけるGPU時間の計測に関する注意; スマホ?でdraw callのGPU時間は計測できない
クリックベイトサムネイル:
![RenderDoc Event Browser](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100016/b975b455-1140-3bd8-4341-b9ece3e5c56c.png “RenderDoc Event Browser; スマホで Duration の値に意味はない”)
これだけでは何の説得力も無いので, ここではこれらGPUアーキテクチャの動作をはじめ, ドライバの開発者の発言やソースコードの引用を含めた様々な根拠や状況証拠などを挙げて論証する.# TL;DR
##### 結論
モバイル端末のGPUにおいて, render pass 内のGPUタイムスタンプは, 何らかの意味をなす値を持たない:
– draw call(s) ごとのGPU時間の計測を考えることはできない; そのように呼べる実行の単位そのものが, 存在しない.
– 意味をもって計測できるグラフィクスパイプラインのGPU時間の最小の単位は render pass (≈レンダーターゲット
【Flutter】インテグレーションテストでスクリーンショットを自動で取得する。
Flutterを使って個人で以下のスマホ向けのおみくじアプリ(大御心アプリ)を開発・運用しています。
【Xcode】”XXXXXX”をインストールできませんでした# はじめに
![スクリーンショット 2022-07-24 18.58.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/359e04e6-07d6-a0c8-dfe4-fe0808aeb6aa.png)
“`
あとでやり直してください。
“`
“`
Watch-only apps cannot be contained in companion apps installed on the companion.
“`SwiftUIレイアウト一本勝負をやっていたところ上のような状態になってしまってシュミレーターでビルドできなくなってしまいました。
発生条件と解決方法を記事にしておきます。# 発生条件
① シュミレーターでApple Watchをビルド
② 起動しているApple Watchを停止する
③ iPhoneでビルド ← ここで発生# 解決方法
「Product」を選択し、「Clean Build Folder」を押します。
![スクリーンショット 2022-
iOSでアプリ内課金を実装する(サーバーサイド)
# はじめに
個人的な備忘として、iOSアプリでアプリ内課金を実装する際のHowToやノウハウを残しておく。
**動いていることは確認しているが、あまり洗練されている気がしない。。。**
**[App Store Server Notifications](https://developer.apple.com/documentation/appstoreservernotifications) を利用すれば、多分、もう少し良い具合に実装できそう。**
**ベストプラクティスだとは思わないで頂けると。。。**# 処理
以下、時系列に従って実装の概要・勘所を説明する。
## 1. アプリ内課金を実施する
割愛(サーバーから商品情報取得したり、App Storeで決済したり)
## 2. アプリでレシートを取得する
アプリ側の実装として、以下のコードを参考にApp Storeからレシートを取得する。
取得したレシートは、サーバーへ送信し、検証・商品提供を行う。“`swift
// エラーハンドリングは割愛
let url = Bundle.main.appSt
(Swift) (MultipeerConnectivity) Bluetooth等でiOSの端末間の通信(P2P通信)を実装する方法
#目次
# [1.はじめに](#1-はじめに)
端末間通信(P2P)をするアプリを開発する際にめちゃくちゃ苦労したので、今後はこの機能をスムーズに開発するために概要から実際のサンプルコードをここに残します。
この記事を見ればMultipeerConnectivityライブラリを使っての端末間通信のアプリを開発できるようになると思います。
この記事では近距離通信の機能を実装していきます# [2.この記事の対象者](#2-この記事の対象者)
・BluetoothやWi-Fiを使って端末間の通信アプリを開発したい方
・MultipeerConnectivityを使って何らかの通信アプリを開発したい方
・MultipeerConnectivityのサンプルコードを使いたい方
# [3.接続手順](#3-接続手順)
1、端末間通信をサポートするMultipeerConnectivityライブラリを導入
2、[MCPeerID](https://developer.apple.com/documentation/multipeerconnectivity/mcpeerid)を発行(端末を識別す
【Xcode】シュミレーターAppleWatchの言語変更方法
# はじめに
https://qiita.com/SNQ-2001/items/c72bca5e8c1eefe9cd29↑これの続きです。
今回はシュミレーターAppleWatchの言語の変更方法です。
# 現状
iPhone – 日本語
AppleWatch – 英語
![スクリーンショット 2022-07-22 23.35.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/faf2608e-0a7d-9b3b-101d-7f2830826562.png)# 問題点
「5分前」と表示するところが「5 minutes ago」と表示されてしまってレイアウトが崩れています。
|✅日本語|❌英語|
|-|-|
|![twitter_FYFEpZfacAETTAa.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/e8db841f-1d8f-7227-8855-b9f7e9e02e50
Windows11へios-webkit-debug-proxyをインストールして、chrome://inspect/で iOS Safariデバッグする。
# はじめに
iOSデバイスで動作しない、Javascriptがある。Windows,MacOS,Androidの各デバイス、ブラウザでは動作するのに、iOSデバイスでのみChromeでもSafariでもだめだ。さて、デバッグしたいのだが・・・iPhoneのブラウザでデバッグ情報ってどこに出てくるの?これが、ことの始まり。対応策としては、掲題の方法があるとのことで試してみた。
# セットアップ
セットアップ方法については、先達に従う。説明丸投げ。
https://zatta.link/web/debug-ios-safari-with-windows.html執筆時点で64bitWindowsのPoweshellでの操作においては、64bit 1.8.8 がインストールされた。
“`
PS C:\Users\microsoftaro> scoop install ios-webkit-debug-proxy
Installing ‘ios-webkit-debug-proxy’ (1.8.8) [64bit]
…
..
“`注意点としては、Windowsに npm
Segmented Controlのセパレーターを消す方法
通常Segmented Controlには赤枠で囲んだ仕切り線が付いているので、これを消したい。
だが、Segmented Controlにはそれを隠すようなプロパティはないようだった。
ただ調べると[setDividerImage(_:forLeftSegmentState:rightSegmentState:barMetrics:)](URL “https://developer.apple.com/documentation/uikit/uisegmentedcontrol/1618558-setdividerimage”)というメソッドがあり、これを使ってセパレーター画像を設定できるらしい。
なので下記のコードでSegmentd C
【Xcode】アプリのアイコンをユーザーが選択可能にする
# はじめに
私はこちらの記事を拝見させて頂き、無事実装することができました。
しかし、現在はやり方が少し変わっていたので最新の方法を載せておきます。やり方はあまり変わりませんがSwiftUIでの記事がなかったので、今回はSwiftUIで実装します
# やり方
① プロジェクトを選択します。
② ターゲットを選択します。
③ 「General」を選択します。
④ 「include all app icon assets」にチェックを入れます。
![スクリーンショット 2022-07-21 22.01.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/64fbf288-a041-cf8c-ce97-0b6805daea6b.png)アイコンを設定します。
ちなみにアイコン作成は[これ](https://github.com
IQKeyboardManagerを使用する際、特定の画面のみ機能を無効にする
IQKeyboardManagerはとても便利なライブラリですが、他UIライブラリとの相性が悪く思い通りに動作しないことがあります。
MessageKitというライブラリを使用した際に、IQKeyboardManagerの機能が有効だったためUI周りの挙動がうまく制御できませんでした。そこでIQKeyboardManagerのdisabledDistanceHandlingClassesを使用し特定の画面のみライブラリの機能が無効になるよう設定しました。
## AppDelegate didFinishLaunchingWithOptions()内に無効化する処理を追加する
**IQKeyboardManager.shared.disabledDistanceHandlingClasses.append(xxx.self)**
“`Swift
func application(_ application: UIApplication,didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOpt
[SwiftUI]TextFieldのテキスト入力監視処理のサンプル
`TextField`の入力に`Combine`の`CurrentValueSubject`を使用してその値の変更を購読するという方針で行きます。
### ViewModelの実装
“`TextInputViewModel.swift
import Foundation
import Combine@MainActor
class TextInputViewModel: ObservableObject {
@Published var resultText: String = “”
@Published var inputText = CurrentValueSubject(“”) private var cancellables = [AnyCancellable]()
func subscribeInputText() {
inputText
.debounce(for: 1, scheduler: RunLoop.main)
.remove
setup appium in Mac for iOS APP (Monterey)
# Outline
Monterery Mac環境にて、appiumを用いてiOS NativeAPPのテストを行うための
環境構築に関するものである
なお、iOSのテストを行うには、Apple Developerに登録しているApple IDが必要になる。
使用した端末は iPhone11 iOS15.5 である。# Mac
macOS Monterey version 12.4
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/9d27dd94-271a-e1cf-5aea-e2bcee22face.png)
# Java
java 11.0.15
https://www.oracle.com/jp/java/technologies/javase/jdk11-archive-downloads.html
install後、javaのpathを設定する(appiumでは、設定してないと警告が出てしまう)
.bash_profile の場合
“
【Swift】ローカルのHTMLとCSSをWebViewに表示する
# はじめに
今回はローカルにある`index.html`と`style.css`をWKWebViewで読み込む方法を紹介します。
![スクリーンショット 2022-07-19 23.26.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/956022c2-4583-5f1c-d0ac-11ba2e815651.png)# 実装
“`index.html
Document
Bitriseを用いたreact-nativeアプリ (iOS) のCI/CD構築
# はじめに
これは今さらな2021年振り返りカレンダーの3日目の記事です.
[Twitter](https://twitter.com/mahiiiki)も良かったらフォローしていただけると嬉しいです?前回はGCP+ネイティブアプリの構成でGitLab flowを構築するという内容でした.
https://qiita.com/sheep96/items/8937141a9fef047659b3
ネイティブアプリと言ってるくせにそこのCD周りは完全に省略するという半詐欺行為を行って
しまいましたが,今回はそれについて書きます.代表的なネイティブアプリ用のCI/CDツールとしては以下のようなものがあります.
– Bitrise
– Fastlane
– CodeMagic他にも,汎用CI/CDプラットフォームのMacインスタンスを提供しているものを
利用することも考えられます.今回は,採用例や情報が多くreact-native (expo) のビルドも簡単にできそうなBitriseを使用することにしました
(調べていた時はFastlaneを知らなかったのです