酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

開発-iOS

Carthage経由での FirebaseAdMobBinary v7.1.0 のインストールに失敗する

昨日、Firebase iOS SDKが v7.1.0 にアップデートされた。Bitriseでのビルド時間を最短にするためにFirebase iOS SDKもCarthage経由でインストールしている。 いくつかのプロジェクトでライブラリのアップデートを実行していったところ、とあるプロジェクト…

CarthageでNYTPhotoViewerをアップデートすると10月23日以降ビルドエラーが発生する

「BitriseでXcode12+Carthageを使ってiOSアプリをビルドしよう! - 酢ろぐ!」のエントリを書いてから、僕は開発中のプロジェクトをXcode 12+Carthage環境に戻しています。 Firebase関係をCarthage経由でインストールできるのでCIでのビルド時間が2〜3分短縮…

CocoaPodsをv1.10にアップデートすると cocoapods-binaryを使っているプロジェクトでビルドエラーが発生する

Xcode 12でCarthageが使えなくなって、CocoaPods + cocoapods-binary の構成に移行した方は多いのではないかと思います。僕もそのうちのひとりです。 CocoaPodsはCIサービスでリリースビルド(ipaファイルをエクスポート)する際には毎回フルビルドされます。…

BitriseでXcode12+Carthageを使ってiOSアプリをビルドしよう!

Xcode 12になって悲しいことにCarthageが使えなくなりました。説明するまでもありませんが、CarthageはiOSアプリ開発の主要なパッケージマネージャーのひとつです。 開発を止められないお仕事アプリは即日ですべてCocoaPodsへ移行しました。CocoaPodsは導入…

Xcode12でCocoaPods以外の方法でFirebaseをインストールするとAppStoreへのアップロード時に失敗する

Firebase for iOS SDKの正式な導入方法としては、CocoaPods経由でインストールすることになっています。 しかし、CarthageまたはSwiftPMでの導入方法はまだベータ版扱いですが導入手段が提供されています。Xcode 12 betaあたりまでは正常に動いていたような…

iOS 14でナビバーの戻るボタンを長押しすると画面スタックのリストが表示されるようになったので無効にしたい

iOS 14でナビゲーションバーの戻るボタンを長押しすると、画面スタックのリストが表示されるようになりました。この挙動を無効化したいと考えています。 実行環境 Xcode 12.0.1 iOS 14.0.1 問題 iOS 14でナビゲーションバーの戻るボタンを長押しすると、画面…

最新のFirebase SDKをインストールすると「Use of unresolved identifier 'FirebaseApp'」エラーが発生する

最新のFirebase SDKをインストールすると「Use of unresolved identifier 'FirebaseApp'」エラーが発生するようになった。 Use of unresolved identifier 'FirebaseApp' 解決編 import Firebase から import FirebaseCore に変更する // import Firebase imp…

iOSで UIAlertControllerを表示すると「width == - 16」の制約エラーが発生する

iOS 13.5 になっても一向に修正される気配がないので仕方なく対応することにした。この現象はiOS 12.2〜13.5で発生することが確認されているらしい。 UIAlertControllerを表示すると制約エラーが発生する ごく普通に UIAlertController を使ってアクションシ…

iOS 13.0以降で「モーダルで開いた画面」上でUIActivityViewControllerを使うと「モーダルで開いた画面」まで閉じられる現象

iOS 12.4のiPhone Xでは発生しておらず、iOS 13デバイスでのみ発生している事象です。 iOS 13.0以降、「モーダルで開いた画面」上で UIActivityViewController を使うと「モーダルで開いた画面」まで閉じられます。 発生する現象 画面A -> fullScreenのモー…

Bitriseで Xcode 11.5を使ってビルドしたIPAファイルが App Store Connect に拒否される

先週末あまりにも暇だったので「Four Cropper」というアプリを開発しました。 Four CropperKENJI WADAユーティリティ無料 最近は動画編集に凝っているので、大きな動画を四分割してTwitterに投稿したら面白いんじゃないか?という発想で進めたものの、ひとつ…

R.swiftを v5.2にアップデートすると rswift が消滅して R.generate.swift が生成できなくなってしまう

先日、急に R.generate.swift が生成できなくなる問題に遭遇しました。 げ。急にR.swiftが使えなくなって、調べてみたら Pods/R.swift/rswift がいなくなってる— さくさん (@ch3cooh) 2020年5月23日 R.generate.swift が生成できない R.swiftを v5.2.2 へア…

iOS 13.4シミュレータで AVVideoCompositionCoreAnimationTool を使うとアプリがクラッシュする

現在、iOSアプリ内での動画編集機能を実装しています。 過去に 動画にウォーターマークをつける方法については調査済みでしたので、簡単に対応できると考えていましたが、謎のアプリクラッシュ現象が発生してしまいお手上げになってしまいました。 左:ウォ…

SwiftでAVFoundationを使って元ある動画から異なる動画を生成する (動画編集の基本編)

SwiftでAVFoundationを使って動画を編集をできるようになりたいと考えている。まずは基本を抑えるために、元ある動画の情報をそのまま使って異なる動画を生成する処理を本記事では紹介したい。 本記事は「AVFoundationを使ったiOSの動画編集 - Qiita」を参考…

Swiftで Photos.frameworkを使って動画からサムネイル画像を生成する

UIImagePickerControllerを使うと静止画を選択することができます。それだけではなく動画も選択することが可能です。選択した静止画(または動画)はPHAssetオブジェクトの形でデータを扱うこととなります。 本記事では、取得したPHAssetオブジェクトからサ…

Bitriseで iOSアプリのビルドが遅い原因は Firebase SDKなのか検証する

Bitriseで iOSアプリのビルドが遅いのは Firebase SDKが原因なのか検証しました。 検証した理由としては、CocoaPods経由でしかインストールできない Firebase SDK を頑張ってCarthage経由にした場合にどれくらいビルド時間を短縮できるのかのおおまかな指標…

Bitriseで iOSアプリのビルド速度を cocoapods-binary を使って高速化する

普段デバッグ時などは気にならないのですが、ipaファイルを生成する(アーカイブする)と、とても時間がかかって困ります。「bitrise.ioでiOSアプリのビルド速度を高速化したい!」という気持ちで、昨晩から cocoapods-binary の評価をしています。 github.com…

UISearchBarをUINavigationBarに設定して、画面遷移すると画面がめり込む/画面に隙間が開いてしまう

iOS 13以降で、UISearchBarを navigationItem.titleView に設定している場合や、UISearchControllerを navigationItem.searchController に設定している場合、ドリルダウンで画面遷移して戻ってくると、画面がめり込んでしまう問題があります。これは UISear…

UISearchBarをタップしたらテキストを入力していなくても searchResultsControllerの背景を表示したい (UISearchController使用時)

UISearchControllerを使うと、入力したテキストをベースにして検索結果を表示させられます。OSとして標準的な検索手段をユーザーに提供することができます。 ただ、検索結果の絞り込みに UISearchController を使っている例は多いのですが、実際には navigat…

Facebook SDKをCarthage経由でインストールする (2020年3月版)

開発中のアプリでFacebook認証したいという要件が追加され、およそ2年ぶりにFacebook SDKを導入することになった。CIがJenkinsではなくbitriseに移行しているため、ビルド時間短縮のためにCarthage経由でインストールしたらしっちゃかめっちゃかになった記録…

SwiftでAVFoundationを使って複数枚の静止画から動画(mp4)を生成する

動画生成について知識を深める必要がでてきました。まずは簡単なところから始めるべく複数枚の静止画から動画(mp4)を生成しました。Xcode 11.3.1 / Swift 5.1を使って実装しています。 事前準備 事前に用意したものは3枚の静止画です。1024 x 1024 ピクセル…

Bitriseでトラブル発生!Cartfile.resolved がルートディレクトリにないリポジトリのビルドが通らない

2020年になってから本格的にBitriseを使うようになりました。いままでJenkinsを使っていましたが、Jenkins係に負荷が押しつけられることになっていました。 BitriseはCIサービスのなかでもかなり簡単な方だとは思いますが、いままでジョブスクリプトを手書き…

Xcode 11.xで新規プロジェクトを作成したときに window?.rootViewController を変更しても画面が変わらない

久しぶりにXcodeで新しいプロジェクトを作成しました。 ログイン画面とホーム画面の切り分けを window?.rootViewController で実施していました。他のプロダクトでは使えているのに新規作成したプロジェクトでだけ window?.rootViewController を変更しても…

UIActivityViewControllerを使ってFacebookとFacebook Messengerへ画像を共有できない

撮影した写真を加工して、UIActivityViewControllerを使って共有する機能を実装したところ、「FacebookとFacebook Messengerに画像を共有できない」とフィードバックをいただきました。 処理としては非常にシンプルに生成したUIImageをUIActivityViewControl…

UITableViewControllerにおける「UITableViewCell上に配置したボタンの座標」を取得する

たとえばUITableViewControllerでユーザーリストを表示している。UITableViewCell上のフォローボタンをタップしたらpopoverを表示させたい。 ポップオーバーを表示させる基準となる sourceViewとsourceRect は下記のようなコードを書いていた。 vc.popoverPr…

macOS catalina(10.15)にアップデートしたら pod updateが使えなくなった

macOS catalina(10.15)にアップデート後にpod update をすると、下記のようにエラーが発生します。 -bash: /usr/local/bin/pod: /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/bin/ruby: bad interpreter: No such file or directory rbenvを…

UITextViewでNSAttributedStringを表示すると設定値が反映されない

UITextViewでNSAttributedStringを表示すると、あらかじめ設定していた値が利用されず謎の表示になる。ポケカのデッキ構築アプリを作っているんだけど、v1.1.3で雑に入れた対応がことごとくバグ出してて、余裕ないときに書いたコードはいかんなぁと思った次…

App Store向けのバイナリをエクスポートするとき「No Apple Distribution certificate found for ...」とエラーが表示される

ビルドにXcode 11を使うようになってから、いままで発生していなかったビルド時の不具合が発生するようになってしまいました。xcodebuildでSYMROOTオプションをつけているとビルドができなくなってしまう事象等です。 blog.ch3cooh.jp App Store向けのバイナ…

Xcode 11.xでxcodebuildを使ってビルドすると、不正なxcarchiveができるようになってしまった

いまでもJenkinsでxcodebuildを使ってビルド作業をしています。 久しぶりに新規プロジェクトのビルドスクリプトを組んだところ、不正なxcarchiveができるようになってしまいました。ipaファイルを出力するためにxcodebuild -exportArchiveを実行すると下記の…

iPadアプリでなぜか画面が回転してしまう不具合

iPadアプリを縦画面固定にしたいけれど、なぜかクルクル回転してしまう。Device Orientationを確認してもPortrait(縦)しかチェックされていない。 Info.plistを開くと下記のようになっていた。XcodeでみるInterface Orientation設定はiPhoneでしか有効になら…

いまどきのiOSアプリのログイン画面の実装について考える

いまどきのiOSアプリでのログイン画面ってどんなかんじなんだろう?と考えてみた。本記事ではデザイン的な話ではなくて、内部の実装的な部分について言及しています。 結論としては、あまり小難しいことをしなくても、 ユーザーIDを入力するUITextField の t…