20210415のiOSに関する記事は3件です。

【Flutter】Pods-Runner-frameworks.sh: Permission denied エラーでiOSビルドできない

Pods-Runner-frameworks.sh: Permission denied とは 他の開発者から受け取ったFlutterプロジェクトをiOSビルドすると出るエラーです。 Gitなどで共有している場合は問題ないのですが、ファイルを直接やりとりすると環境依存ファイルが残ってしまい、エラーになります。 対処方法 ターミナルを開き、次のコマンドを実行します。 chmod a+x "/Users/[user]/Documents/projects/flutter/[project]/ios/Pods/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh" chmod a+x "対象ファイル"で、すべてのユーザーに実行権限を与えることができます。 対象ファイルには、エラーのラインで囲った部分を指定します。 これで、ビルドができるようになりました。 参考
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

FlutterでFirebaseを使わずにプッシュ通知を実装したい

例えばiOSアプリをFlutterに移植する場合など、プッシュ通知の仕組みにFirebaseを採用していないことがあります。 基本的にFlutterではプッシュ通知を実装する場合にはFirebaseを利用するのが一般的で 情報を調べてもFirebaseMessagingを利用した方法以外見つからなかったのでそれ以外の方法を使った実装方法をメモしておきます。 Androidの場合はFirebaseを使ってください。 Platform.isIOSなどを使って処理を切り分けると良いです。 記事の対象 iOSアプリなどでプッシュ通知を実装したことがあり、基本的なセットアップは理解している方 flutter_apns FireaseMessagingをベースに作成されたflutter_apnsを使います。 基本的に上記URLのREADMEを参照すれば実装できます。 connector.configureなどはmain.dartのrunAppより前に呼べば大丈夫です。 トークンの取得 flutter_apnsではtokenのパラメータがValueNotifier<String>で定義されています。 なので、connector.configureなどの初期設定と同時に以下のように処理すれば取得できます。 connector.token.addListener(() async { final deviceToken = connector.token.value; print("receive token: $deviceToken"); }); また、任意のタイミングで使いたい場合は以下のように記述してnullでなければ利用可能です。 final token = connector.token.value.toString(); プッシュ通知受信時の処理 メモ程度に書いておくと、以下のような状態に対応しています。 onResume アプリがバックグラウンドで起動中に受信した通知をタップしてForegroundに移動 onMessage アプリが起動中にプッシュ通知を受信 onLaunch アプリがタスクからも終了されているときに受信したプッシュ通知からアプリを起動 onLaunchを実装するときの注意 onLaunchはネイティブアプリと違ってmain.dartのrunAppより前に処理が実行されます。 そのため、プッシュ通知のパラメータを受信してそのまま画面遷移を行ってしまうと ルーティングが前後してしまうことがあります。 受信したパラメータを一時保管し、任意のタイミングで利用するなどをおすすめします。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

BulletinBoardを使ってiOSの半モーダルビューを再現

はじめに BulletinBoardを使ってAirPods同期のときとかに出てくる半モーダルビュー?(正式名称不明)を再現します ↓これ 目次 BulletinBoardのインストール BLTNPageItemの作成 BLTNPageItemのボタンにHandlerを設定 BLTNItemManagerの作成 BLTNItemAppearanceを設定 コード全体 完成 BulletinBoardのインストール CocoaPods Podfile. pod 'BulletinBoard' Carthage Chartfile. github "alexaubry/BulletinBoard" BLTNPageItemの作成 let item = BLTNPageItem(title: "AirPods Pro") item.image = UIImage(systemName: "airpodspro") item.actionButtonTitle = "一時的にオーディオを共有" item.alternativeButtonTitle = "iPhoneに接続" BLTNPageItemのボタンにHandlerを設定 item.actionHandler = { _ in print("actionButton押された") } item.alternativeHandler = { _ in print("alternativeButton押された") } BLTNItemManagerの作成 let manager = BLTNItemManager(rootItem: item) manager.showBulletin(above: self) BLTNItemAppearanceを設定 BLTNItemAppearanceを変更すると見た目を変えれます item.appearance.actionButtonColor = .lightGray item.appearance.actionButtonTitleColor = .black item.appearance.titleTextColor = .black コード全体 class ViewController: UIViewController { var manager: BLTNItemManager = { let item = BLTNPageItem(title: "AirPods Pro") item.actionButtonTitle = "一時的にオーディオを共有" item.alternativeButtonTitle = "iPhoneに接続" item.image = UIImage(systemName: "airpodspro")?.resize(size: CGSize(width: 350, height: 350)) item.appearance.actionButtonColor = .lightGray item.appearance.actionButtonTitleColor = .black item.appearance.titleTextColor = .black item.actionHandler = { _ in print("actionButton押された") } item.alternativeHandler = { _ in print("alternativeButton押された") } return BLTNItemManager(rootItem: item) }() override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. } @IBAction func show(_ sender: Any) { manager.showBulletin(above: self) } } 完成          ←理想 現実→ ありがとうございました。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む