開発-iOS
多言語対応アプリの開発は非常に大変だ。特に、アプリ内で使用される各種テキストを管理する「文字列リソース」の取り扱いについては、更新や検証に多大な労力を要する。この課題を解決するために、csv2strings というスクリプトを公開した。 csv2strings は…
アプリ開発界隈で、課金管理をスムーズに行うために多くの開発者が利用する「RevenueCat」だが、導入する際に「The receipt is not valid.(レシートが無効です)」というエラーが発生する。 これは大抵の場合、「アプリ固有の共有シークレット」が間違って…
2023年10月7日の activesupport のアップデートによって CocoaPods が使えなくなった。すぐに修正されると思うが、直近で困ってる方のために備忘録を残す。 bundler: failed to load command: pod エラーが発生する bundle update のあと、 bundle exec pod …
さくさんは Assets.xcassets や Colors.xcassets にアクセスするために R.swift を愛用している。Xcode 15.0 アップデート後、R.swift の ColorResource や ImageResource の extension でエラーが発生するようになった。 R.swift の ColorResource や Image…
Xcode 15.0へのアップデート後、CocoaPods経由でインストールしたFirebase Apple SDKでコンパイルエラーが発生する。 解決方法 CocoaPods 1.13.0 のリリースされると、この問題は解消される見込みである。ただし v1.13.0がリリースされるまでの間は、ワーク…
長いあいだ、Swift でのデータ操作が煩雑な Cloud Firestore を使う気になれなかったのだが、いつのまにか Swift Concurrency に対応していた。async / await が使えると話が変わってくる。格段に使いやすくなっていたので、お試しで簡単なアプリを作ってみ…
たとえば画像識別アプリを開発中には、テスト画像を Bundle からロードして、画像を識別してその結果を評価するユニットテストを作成する。または、HTMLをスクレイピングするアプリを開発中には、ダミーのHTMLを Bundle からロードして、スクレイピング処理…
本文はあとで書く。 developer.apple.com dismissSearch() を実行すれば、検索モードがオフになり、検索バーに入力していたテキストもキーボードも消える。 Sets isSearching to false. Clears any text from the search field. Removes focus from the sear…
iOSアプリで「H₂O」や「x²」のような上付き文字や下付き文字を表示する方法について調査する機会があった。 さくさんは、2010年頃(iPhone OS 3.xの時代)からiOSアプリの開発を行っているが、上付き文字や下付き文字を扱うのは今回が初めてだった。他の多く…
CoreMLでは画像識別/オブジェクト検出をおこなう機械学習モデルは .mlmodel または .mlpackage ファイルである。モデルファイルをダブルクリックするとXcodeが開き、下図のようにメタデータが表示される。 ここに表示されている Class Labels が検出または識…
iOS 15 / iOS 16 の場合、SwiftUI の List で セクションヘッダーに top padding (top margin?) が入ってしまう問題がある。 ヘッダー上部にマージンが入る現象自体は iOS 15 の時にも発生していたが UITableView.appearance().sectionHeaderTopPadding = 0 …
アプリの起動時に紫色の警告が表示されるようになった。 調査したところ、Xcode 14.0 と iOS 16 シミュレータの使用時に AdMob SDKの初期化をおこなうと、このセキュリティワーニングが表示されるようだ。 AdMob SDKの初期化をおこなうとセキュリティワーニ…
ユーザーがタグ色を選択できるプロダクトの場合、ユーザーが決めた色の上にテキストを配置しなければいけない。たとえば、下図の GitHub のタグのような場合である。 背景色に応じて、視認しやすいテキストカラーが利用されていることがわかる。 enhancement…
iOSアプリにtanersener/ffmpeg-kitを組み込んで、iPhoneで録画した動画をffmpegを使ってh264エンコードするとどの動画にもノイズが入る問題が発生した。macOS上で同じ動画をエンコードした場合にはノイズが乗らない。なぜノイズの有無が発生してしまうのか?…
iOS 13から画像から顔認識やバーコード、テキスト認識する Vision.framework が実装された。本記事では VNRecognizeTextRequest を使って画像からテキスト(String)を抽出する方法を紹介する。このクラスでは Convert Image to String をおこなう。 よく似た…
昨日、App StoreにてXcode 13.3がリリースされた。早速アップデートしたところ、Bitriseにて特定のアプリで下記のようなエラーが発生した。コンパイル自体は問題なくその後のアーカイブの段階で失敗している。 error: exportArchive: ipatool failed with an…
動画のアップロード機能を実装していると、iOS標準の写真.appでクリッピングやトリミングしている編集済みの動画を選択した場合に、編集しているにもかかわらず編集前のオリジナル動画がアップロードされてしまう現象に気が付いた。 動画を選択するのに UIIm…
プロフィール画像などの静止画の撮影にUIImagePickerControllerを使うことはよくあり、UIImagePickerControllerを使って動画の録画ができることも知っていた。iOSアプリ開発に携わって11年ちょっと経つが、いままでUIImagePickerControllerを使って動画録画…
注意:このプロジェクトではCoreDataの定義ファイルを TweetAlbum.xcdatamodeld としている。もし存在するかわからないが、本記事を読んで同じ現象でハマった方がいれば、TweetAlbumの部分は各々で読み替えていただきたい。 Appの外にあるCoreDataの.xcdatam…
CarthageのキャッシュをS3で共有できる「Rome」がxcframeworksに対応して帰ってきた!!この記事はiOS Advent Calendar 2021の12日目の記事です。 Romeとは? はじめに Carthage/Build ディレクトリを zip でまとめて Bitrise でダウンロードしていたが…… Ro…
備忘録として書き残しておく。気が向いたら書き直すかもしれない。 SwiftUIのListで下図のような画面を実装している。 縦スクロールと横スクロールの混ざったリストは珍しくないが、この画面の厄介なところは横スクロールでも別途APIを叩いてデータを取得す…
R.swiftはプロジェクトに追加しているリソースをハードコーディングせず管理できるライブラリだ。2021/11/19、R.swiftがv6.0にアップデートされた。 プロジェクトをビルドすると以下のワーニングが出るようになったので対応した。 warning: [R.swift] For up…
Carthageで「OneSignal-iOS-SDK v3.9.0」をインストールすると、arm64シミュレータ向けのビルド時にリンクエラーが発生してしまう。iOSシミュレータでデバッグ実行できなくなってしまった。 この問題は2021/11/17にv3.9.1がリリースされたことで解決した。リ…
iOS 14になってからTextFieldにフォーカスを当てると適切なポジションに自動でスクロールするようになった。iOS 13ではKeyboardObservingなどのライブラリを利用する必要があったので、標準機能として実装されたのはとても嬉しい。 その一方で、SwiftUIのLis…
M1チップ(Apple Silicon)搭載のMacBook Pro (16-inch, 2021)に移行した。社内の開発環境の足並みを合わせるため、すべてのアプリで Rosettaを使わずに実機およびiOSシミュレータでデバッグ実行できるようにしたかった。 使用しているライブラリやソースコー…
Swiftで配列を操作するのに ankurp/Dollar を使っている。 利用しているライブラリをxcframeworkに変更する一連の対応のなかで、DollarをCarthage経由でインストールするように変更したところ、出力したipaファイルをApp Store Connectへアップロードする段…
つい先日App Storeに掲載しているスクリーンショットを更新したばかりですが「ASOをきちんとした方が良い」と言われた。ストアのスクショを更新しただけではASOをしたことにならないらしい。 ASOとは「Application Store Optimization」の頭文字をとった略称…
アプリ広告といえば AdMob ですね。Four Cropperでは画面のフッターに AdMob のバナー広告を表示させるシンプルな実装となっています。 Four CropperKENJI WADAユーティリティ無料 「Four Cropper」は大きな写真をTwitterに掲載するのに適切なアスペクト比に…
iOSアプリで画像をクリッピングすると言えば、利用するライブラリはほぼ TOCropViewController 一択です。 github.com TOCropViewControllerには Objective-C向けのTOCropViewController と Swift向けの CropViewController との両方のライブラリが混在して…
12月15日に Xcode 12.3 Release版がリリースされました。当日中にXcodeをアップデートして「iOSシミュレータの画面が黄色くなる不具合」など踏んでStack Overflowに初めての書き込みをしたことなど今となっては良い思い出です。 Bitriseとは 今年に入ってか…