酢ろぐ!

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

開発-iOS

CoreML 向けの mlmodel モデルで物体検出/物体識別が可能なラベルの一覧を取得する

CoreMLでは画像識別/オブジェクト検出をおこなう機械学習モデルは .mlmodel または .mlpackage ファイルである。モデルファイルをダブルクリックするとXcodeが開き、下図のようにメタデータが表示される。 ここに表示されている Class Labels が検出または識…

iOS 16 の場合、SwiftUI の List で セクションヘッダー上部にマージンが入ってしまう

iOS 15 / iOS 16 の場合、SwiftUI の List で セクションヘッダーに top padding (top margin?) が入ってしまう問題がある。 ヘッダー上部にマージンが入る現象自体は iOS 15 の時にも発生していたが UITableView.appearance().sectionHeaderTopPadding = 0 …

Xcode 14.0 と iOS 16 シミュレータの使用時、AdMob SDKの初期化をおこなうとセキュリティワーニングが表示される

アプリの起動時に紫色の警告が表示されるようになった。 調査したところ、Xcode 14.0 と iOS 16 シミュレータの使用時に AdMob SDKの初期化をおこなうと、このセキュリティワーニングが表示されるようだ。 AdMob SDKの初期化をおこなうとセキュリティワーニ…

Swiftで 背景色に応じた見やすい文字色を求める

ユーザーがタグ色を選択できるプロダクトの場合、ユーザーが決めた色の上にテキストを配置しなければいけない。たとえば、下図の GitHub のタグのような場合である。 背景色に応じて、視認しやすいテキストカラーが利用されていることがわかる。 enhancement…

iOS/macOSでFFmpegを使ってh264エンコードすると画質が悪くなる問題 (h264_videotoolbox vs libx264)

iOSアプリにtanersener/ffmpeg-kitを組み込んで、iPhoneで録画した動画をffmpegを使ってh264エンコードするとどの動画にもノイズが入る問題が発生した。macOS上で同じ動画をエンコードした場合にはノイズが乗らない。なぜノイズの有無が発生してしまうのか?…

VNRecognizeTextRequestを使って画像からテキストを取得する

iOS 13から画像から顔認識やバーコード、テキスト認識する Vision.framework が実装された。本記事では VNRecognizeTextRequest を使って画像からテキスト(String)を抽出する方法を紹介する。このクラスでは Convert Image to String をおこなう。 よく似た…

Xcode 13.3でアプリバイナリのexportに失敗する問題

昨日、App StoreにてXcode 13.3がリリースされた。早速アップデートしたところ、Bitriseにて特定のアプリで下記のようなエラーが発生した。コンパイル自体は問題なくその後のアーカイブの段階で失敗している。 error: exportArchive: ipatool failed with an…

UIImagePickerControllerを使って写真.appで編集済みの動画を選択しても編集前のオリジナル動画が使われてしまう

動画のアップロード機能を実装していると、iOS標準の写真.appでクリッピングやトリミングしている編集済みの動画を選択した場合に、編集しているにもかかわらず編集前のオリジナル動画がアップロードされてしまう現象に気が付いた。 動画を選択するのに UIIm…

UIImagePickerControllerを使って動画を録画しようとすると __TCCAccessRequest_block_invoke でクラッシュしてしまう

プロフィール画像などの静止画の撮影にUIImagePickerControllerを使うことはよくあり、UIImagePickerControllerを使って動画の録画ができることも知っていた。iOSアプリ開発に携わって11年ちょっと経つが、いままでUIImagePickerControllerを使って動画録画…

Swift Package Managerでマルチモジュール化しているアプリでCoreDataの.xcdatamodeldファイルが参照できない

注意:このプロジェクトではCoreDataの定義ファイルを TweetAlbum.xcdatamodeld としている。もし存在するかわからないが、本記事を読んで同じ現象でハマった方がいれば、TweetAlbumの部分は各々で読み替えていただきたい。 Appの外にあるCoreDataの.xcdatam…

xcframeworks に対応した Rome を使って Carthage のキャッシュをS3にアップロードして Bitrise で超高速にビルドしよう! #bitrise #bitrisearticle

CarthageのキャッシュをS3で共有できる「Rome」がxcframeworksに対応して帰ってきた!!この記事はiOS Advent Calendar 2021の12日目の記事です。 Romeとは? はじめに Carthage/Build ディレクトリを zip でまとめて Bitrise でダウンロードしていたが…… Ro…

備忘録:SwiftUIのListでrefreshした時に前回のデータが表示されている。画面が再描画されると新しいデータが反映される

備忘録として書き残しておく。気が向いたら書き直すかもしれない。 SwiftUIのListで下図のような画面を実装している。 縦スクロールと横スクロールの混ざったリストは珍しくないが、この画面の厄介なところは横スクロールでも別途APIを叩いてデータを取得す…

R.swiftがv6.0にアップデートされたのでプロジェクト設定の変更が必要になった

R.swiftはプロジェクトに追加しているリソースをハードコーディングせず管理できるライブラリだ。2021/11/19、R.swiftがv6.0にアップデートされた。 プロジェクトをビルドすると以下のワーニングが出るようになったので対応した。 warning: [R.swift] For up…

OneSignal-iOS-SDK v3.9.0 をインストールするとarm64シミュレータ向けビルドでリンクエラーが発生する

Carthageで「OneSignal-iOS-SDK v3.9.0」をインストールすると、arm64シミュレータ向けのビルド時にリンクエラーが発生してしまう。iOSシミュレータでデバッグ実行できなくなってしまった。 この問題は2021/11/17にv3.9.1がリリースされたことで解決した。リ…

【未解決】SwiftUIのListに配置したTextEditorにフォーカスを当てても自動でスクロールされない

iOS 14になってからTextFieldにフォーカスを当てると適切なポジションに自動でスクロールするようになった。iOS 13ではKeyboardObservingなどのライブラリを利用する必要があったので、標準機能として実装されたのはとても嬉しい。 その一方で、SwiftUIのLis…

Xcode 13.1でAdHocバイナリのエクスポート中にXcodeがクラッシュする問題 〜無限ビルド編〜

M1チップ(Apple Silicon)搭載のMacBook Pro (16-inch, 2021)に移行した。社内の開発環境の足並みを合わせるため、すべてのアプリで Rosettaを使わずに実機およびiOSシミュレータでデバッグ実行できるようにしたかった。 使用しているライブラリやソースコー…

ankurp/DollarはCarthage経由でインストールするとApp Store Connectへのアップロード時にERROR ITMS-90056が発生する

Swiftで配列を操作するのに ankurp/Dollar を使っている。 利用しているライブラリをxcframeworkに変更する一連の対応のなかで、DollarをCarthage経由でインストールするように変更したところ、出力したipaファイルをApp Store Connectへアップロードする段…

ASO、何をやれば良いかわからん (2021年1月版)

つい先日App Storeに掲載しているスクリーンショットを更新したばかりですが「ASOをきちんとした方が良い」と言われた。ストアのスクショを更新しただけではASOをしたことにならないらしい。 ASOとは「Application Store Optimization」の頭文字をとった略称…

AdMobの広告メディエーションを使って複数のアドネットワークを利用する

アプリ広告といえば AdMob ですね。Four Cropperでは画面のフッターに AdMob のバナー広告を表示させるシンプルな実装となっています。 Four CropperKENJI WADAユーティリティ無料 「Four Cropper」は大きな写真をTwitterに掲載するのに適切なアスペクト比に…

CropViewController が v2.6.0 になって Deployment Target が iOS 12.0に設定されているようになった

iOSアプリで画像をクリッピングすると言えば、利用するライブラリはほぼ TOCropViewController 一択です。 github.com TOCropViewControllerには Objective-C向けのTOCropViewController と Swift向けの CropViewController との両方のライブラリが混在して…

Bitrise のXcode 12.3.xスタックでビルドしたバイナリが App Store へアップロードできない

12月15日に Xcode 12.3 Release版がリリースされました。当日中にXcodeをアップデートして「iOSシミュレータの画面が黄色くなる不具合」など踏んでStack Overflowに初めての書き込みをしたことなど今となっては良い思い出です。 Bitriseとは 今年に入ってか…

Xcode 12.3のiOS 14.3シミュレータを起動すると画面が黄色くなってしまう問題を解決した

今朝起きたらXcode 12.3が公開されていたので、Xcode 12.3をダウンロードして開発中のアプリが動くかどうか検証しようとしたところ、UIAlertControllerが真っ黄色になっていたので腰をぬかしました。すんげえエンバグしてもうたと慌てて原因を調査しました。…

iOSアプリのdSYMファイルをBitriseからFirebase Crashlyticsへアップロードする #bitrise #bitrisearticle

この記事は、Bitrise Advent Calendar 2020の1日目の記事です。夕食を食べて帰ってきてアドベントカレンダーを覗いたところ、20時時点で誰もエントリーしていなかったので書くことにしました。 Bitriseとは 今年に入ってからこのブログでも、Bitriseを使って…

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…