世界を動かす技術を、日本語で。

私の初めてのiOSアプリ開発の試み

概要

  • iOSアプリ開発 を未経験から数日で体験した記録
  • AI(CursorやGemini)を活用 した学習・開発プロセス
  • Appleのエコシステムや価格設定 に対する考察
  • 実際の開発課題や工夫 についての具体例
  • 今後の展望や学び に触れたまとめ

iOSアプリ開発未経験から数日での挑戦

  • 契約開発ではなく、個人的な興味と家族用途でのアプリ作成
  • Apple Developer Program未加入、現状の支出はCursorの利用料のみ
  • Swift未経験 から1週間で動作するiOSアプリを作成
  • Xcodeは検証用 でインストール済み、普段は他の言語やエコシステム中心
  • 写真管理アプリ の現状に不満・好奇心から自作を決意

開発プロセスとAI活用

  • CursorでAIと対話しながら コードの雛形や構造案を取得
  • XcodeでAIコードを拡張・検証・デバッグ
  • AIとの協働で学習速度向上、従来の独学より効率的
  • エラーごとに新しい知見 を得るミニレッスン体験
  • iOSの標準ライブラリやAPIの充実 に驚き

iOS特有の課題と解決策

  • コード署名やターゲット管理、デプロイ設定 などエコシステム固有の壁
  • AI(Gemini)によるセットアップ支援 で学習コスト削減
  • CLGeocoderの中国向け挙動 (Autonaviへの切替)を発見
    • 中国国外の逆ジオコーディングに フォールバック処理 を実装
    • エラーコード検知→別サービス利用の工夫

価格設定・マーケティングへの考察

  • 既存の写真管理アプリの多くが月額課金制、機能に対して高額に感じる
  • 自作アプリは一度きりの$2.99課金を想定、サブスクリプションやダークパターンは不採用
  • 中国系企業のマーケ手法 (多量の新規アプリ・派手な広告・高額サブスク)を観察
  • 自身は広告費ゼロで品質勝負 を志向

AIによる開発支援の実感と限界

  • AIは完璧なコードを生成しないが、反復学習を高速化
  • エラーや設計の相談先としてAIが有用
  • セキュリティ関連(認証や機密データ)ではAI生成コードを信用しすぎない 慎重姿勢
  • パフォーマンス監視もXcodeで容易、通常時のRAM消費は少なく、重い処理時も許容範囲

今後の展望と学び

  • 機能はほぼ完成、あとはUI/UXの磨き込み
  • Apple Developer Programへの登録は未定、今後の公開・プロモーション方法を検討中
  • AI時代の個人開発は、従来よりも短期間で成果を出せる 実感
  • 純粋な好奇心から始まり、実用的なプロダクトへと成長 した経験
  • iOS開発へのハードルはAI活用で大きく下がった と実感

Hackerたちの意見

著者は、自分が提案した公正な価格モデルでは、個人開発者すらも賄えないことを痛感するだろうね。iOSでまともにお金を稼ぐのは本当に難しいし、良い製品があるだけじゃ全然足りない。こんなに悲観的に聞こえるのは申し訳ないけど、マネタイズやマーケティングは、iOSでは製品開発と同じくらい重要だってことを強調したいんだ。

でも、たぶんそのアプリで、日常の仕事の合間にちょっとしたバカンスができるくらいの収入にはなるかもね。メンテナンスもほとんどいらないアプリなら、3日間の仕事としては悪くないよね。

数年前にアプリのアイデアを思いついたけど、市場調査やリスク評価をした結果、同じ結論に至ってやめちゃった。あの決断を後悔したことは一度もないよ。アイデアにフルタイムで取り組むか、手を抜いた仕事をするかのどちらかだし、大きなリスクを負わずに勝つことはできないから、今はパートタイムで2つの仕事を続けて、その収入を賢く投資するつもりだよ。

著者はコード署名を厄介なエコシステムの問題として挙げてるけど、アプリが新しい資産を取得してバグ修正のために再提出しなきゃいけなくなる時が来るからね。それに、更新を続けなければ、アプリは動かなくなるし、「一生買ってもらえる」って考えは、開発者に無償でのメンテナンスを強いることになる。多くの人が作って配布してるけど、すぐに教訓を学んで、アプリを持続可能にするために適切な金額の定期的な支払いを求める方法を見つけるんだ。AIがこのコストを大幅に下げるかもしれないから、今はこういうことが意味を持つかもしれないね。考慮に入れるべきことだと思う。

3日で開発できるなら、著者は年間100個のアプリを作れるかもね。もちろん、アプリがある程度の人気を得たら、バグ修正や追加の開発にもっと時間をかけることになるだろうけど。もしそれがもっと大きなものになったら、価格を上げたり、新機能を追加するためのプレミアムなアプリ内購入をリリースすることもできるね。

ピュアなiOSアプリは2009年頃から利益が出なくなったね。

それだけじゃないよ。倫理的に問題がある企業や完全な詐欺まがいの企業が、無料トライアルにサインアップさせるのがどれだけ簡単かを発見しちゃったんだ。Appleがサブスクリプションの更新時期を教えてくれるけど、それが十分に役立ってるとは思えない。だから、科学計算機のアプリを買っちゃうんだけど、実は電話に内蔵されてる機能だって気づかず、結局毎週5ドルも払う羽目になる。最初の更新後に気づいても、アプリ開発者は5ドル(手数料引いて)を手に入れるだけだしね。価格が完全におかしいサブスクリプションがたくさんあるけど、Appleはそれにあまり関心がないみたい。

これって、ほとんどのアプリがデータを集めるためのフロントエンドになってる理由じゃないの?それをマネタイズするために広告も使ってるし。

その通りだね。App Storeはゴミで溢れてる。正当な無料の良いアプリでもユーザーに届くのが難しいし、マーケティングも信じられないくらい高い。App Storeのランダムなアプリに対するユーザーの信頼もすごく低い。iOSアプリを動かすのは本当に難しい。

開発コストや運営コスト(デザイン、法務など)はゼロと考えるべきだよ。つまり、無給で自分でやるってこと。お金は全部マーケティングに使うべきだね。そうしないと、トントンになる可能性は薄いよ。

iOSで合理的にお金を稼ぐのは難しい AndroidやLinux、macOS、Windows、ウェブなどのソロ開発も難しいよね…。一番安全なのは、会社で開発者として働いてお金をもらうことだよ。

同じ欲望があったから、私たち二人ともほぼ同じアプリを作ることになったのが面白いね。あなたのは見た目がスッキリしてるけど。友達に使ってもらった後にすぐ学んだことは、他の人は自分とは違うものを求めているってこと。自分だけのために作るのとは違って、他の人に合わせるのはすごく時間がかかるんだ。だから、自分が欲しいものを作って、それを無料でリリースすることにしてる。

組み込み開発から来たから、ほとんどがクソみたいなSOCベンダーが、古いgccのバージョンからかき集めたような動作不良のSDKやツールチェーンを提供してる中で、iOS開発/Xcodeに移るのはほとんど全ての面で新鮮な空気を感じたよ。ただ、いくつかのイライラする点もあるけどね。コード署名、プロビジョニングプロファイル、権限、AppStoreの魔法…開発者プログラムの費用も厄介だよね。これがあると、年間100ドルを永遠に燃やすことを無視しない限り、持続可能に無料アプリをリリースするのは難しい。その他の不満点としては、Appleが古いデバイスのサポートを維持するのを難しくしてること。ツールを更新し続けるように言われるけど、更新されたツールは古いSDKやデバイスのサポートを切っちゃうことが多い。アプリがそれらをターゲットにし続けるためには、ちょっと手間をかける必要があるんだ。今日、中古のiPhone 7を手に入れてAppStoreでアプリを探してみれば、動くアプリを見つけるのがすごく難しいことがわかるよ。この電話はそんなに古くないのに、エコシステムはすぐに見捨てるからね。Appleは物事をすぐに廃止するから、ツールを更新するたびに、Appleが使うのをやめてほしいAPIについての警告が増えるんだ。2016年にアプリを一度書いて、それをずっと続けるのは本当に大変だよ。彼らは明らかに、1. 生計を立てている開発者、2. 最新のデバイスをターゲットにしている開発者、3. アプリやツールを頻繁に更新している開発者、4. 毎年、廃止されたものから離れるために手術をすることを気にしない開発者を好んでいるね。

コード署名の解決策が来るよ:脱獄やappdb.toを通じて、公式のアプリストアプロセスなしでアプリをサイドロードすることが可能になる。EUは他のアプリストアも必要だと義務付けているし、古いモデル向けの開発も、仮想マシンのコレクションや古いノートパソコンのマルチブートを使って可能だよ。

そうそう、最新のSDKを推進することでコードが腐るのが嫌なんだよね。古いXcodeのバージョンを残しておいて、OSのアップデートにはすぐに飛びつかないようにしてる。去年までiOS 9で動いてるアプリを使ってたし、古いデバイスを専用にするのに便利だったよ。コンテナを使えばもっと長く持たせられたかも。

更新されたツールは古いSDKやデバイスのサポートを切る傾向があるよね。アプリをそれに合わせて維持するのはちょっと手間がかかる。今日、中古のiPhone 7を手に入れてAppStoreでアプリを探してみると、動くアプリを見つけるのがすごく難しいと思う。この電話はそんなに古くないのに、エコシステムはすぐに見捨てるからね。まあ、ここで2つのことを混ぜてるけど、Appleの古いiOSバージョンに対するツールサポートと、開発者の選択は別物だよ。今ならXcodeで新しいアプリを作って、プロジェクトの最小デプロイメントバージョンを「iOS 15」に設定すれば、iPhone 6Sや初代iPhone SEまで動くアプリが作れるよ。それ以前のiOSバージョンをサポートするのも結構簡単だし(新しいプロジェクトを作るときはUIピッカーじゃなくてplistを手動で編集する必要があるけど)、私の古いiOS 9のプロジェクトも問題なくコンパイルできる(このコメントのためにテストしたばかり)。でも、iPhone 7でほとんどのアプリが動かないのは、多くの開発者がiOS 16/17以降のサポートだけを選ぶからだよ(iPhone 7は9年前のデバイスで、iOS 15で止まってるからね)。それは彼らの選択であって、Appleのツールのせいじゃないよ。

XcodeがiPhoneシミュレーターの最小バージョンよりも低いiOSバージョンをターゲットにできないのもイライラするよね。しばらくiOS 12をターゲットにしてたけど、デバッグやテストのためにUTMと古いXcodeを使うのが面倒だった。

反応せざるを得なかったのは、あなたが間違ってるとは思わないけど、私があなたとはほぼ正反対の経験と結論を持っているからだよ。 > iPhone 7、今も息子と一緒にパウパトロールを見るためのTVデバイスとして使ってる。使ってるアプリのセットについてしか話せないけど、数時間前の時点で全部まだ動いてるよ(ストリーミング、メール、ブラウザ。銀行系やその類のアプリは使ってないけど)。3月から更新がなくなるから、そろそろ替えようと思ってる。 > この電話はそんなに古くない これにはちょっと混乱してる。9年前のもので、3ヶ月前にセキュリティ更新が止まったばかりだよ。iPhoneの世界以外でこれに近いものってあるの?私はAndroidデバイスも持ってるけど、9年前のAndroidデバイスでアプリを起動できるものなんて持ってないよ。

私にとって、モバイルアプリ開発で一番イライラするのは、開発環境がスペースやRAMを食うことだね。- gradleフォルダはプロジェクトごとに簡単に7〜8GBに達する(外部依存関係が多いほど大きくなる) - Android/iOSエミュレーターもデバイスごとに7GBくらい必要だし。3つのエミュレーターを持ってたらどうなるか想像してみて。Pixel 3がAndroid 13、Pixel 4がAndroid 14、みたいな感じ。コードの非推奨もよくあることに同意するよ。私の経験のほとんどはAndroidだけど、Googleから「この機能が必要ないならAPI Xを呼ばず、Yを使ってください。この要件を1ヶ月以内に守らないと、あなたのアプリは削除されます」みたいなメールを見たこともあるし。ああ、もう…。

今、組み込み開発やってるんだけど(EEから転職したのは、給料が高いし、クライアントも見つけやすいし、柔軟性もあるから)。組み込みからアプリ開発に切り替えるのってどう思う?求めてるのは、もっと場所に縛られない仕事(現場作業なし)と、もっとクライアントや仕事が欲しいってことなんだ。

いや、やめとけ。俺は両方やってるけど(アプリに切り替えようか悩んでる人、絶対やめた方がいい!)アプリ作るのは本当に嫌い。開発ツールは確かに良くなってるし、モダンだけど、常に変わるからね。プロジェクトが終わったって言えないんだ。新しいOSのアップデートで微妙に互換性が壊れたり、要求や動作の変更で、前に使ってた重要な機能が使えなくなったりする。新しい大きなアップデートでBLEやWifi、バックグラウンド動作が壊れちゃって、また元に戻すのに3週間も無駄にする羽目になる。これ、毎年少なくとも一回は起こるからね。それに、ストアのポリシー(例えばPlayストア)が変わって、ターゲットSDKを変更するから、新しいSDKでアプリを再コンパイルしないといけないし、iOSの証明書も毎年切れるから、そのためにお金払わなきゃいけない。再コンパイルや再署名も必要になるし、つまりプロジェクトは常にコンパイル可能でないとダメなんだ。毎年SDKのバージョンが変わって、ツールチェーンも変わる。組み込みの世界では、古いGCCバージョンで開発環境を凍結できるから、永遠に動くんだけど、ZephirやIDFみたいなフレームワークを使うと、もうそれも難しくなってきてる :(

コードサイン、プロビジョニングプロファイル、権限、AppStoreの魔法 もしかしたら、最初のSDKからiOS開発をやってるからかもしれないけど、これらは今やすごく自動化されてる。権限を有効にする以外でこのことを考えたのはいつだったか思い出せないよ(今はXcodeでチェックボックスをクリックするだけだし)。 >> Appleは古いデバイスのサポートを維持するのを難しくしてる。これには同意できないな。大手のiOS開発者と一緒に仕事をしてるけど、みんなiOS 12や13を特に問題なくサポートしてるよ。確かに最新のAPIは使えないけど、古いOSバージョンがサポートしているAPIを使うのに何も妨げはないよ。iPhone 7についてだけど、すごく古いよね。ほぼ10年前のものだし、それでもiOS 15をサポートしてるから、まだ数年しか経ってない。一般的に、インディーのショップは最新のOSバージョンを使わせようとするけど、新しいAPIを使いたいから古いもののサポートを維持するのが面倒なんだよね。多くのユーザーを抱えるアプリは、できるだけ古いバージョンまでサポートしてるよ(特にiPadは、ユーザーがデバイスを長く使うから)。

作者は、アプリに変更を加えなくても毎週アプリを再ダウンロードしなきゃいけないってことにまだ気づいてないね。これが、俺がiOS開発をやらない理由の一つなんだ。自分の持ってるハードウェアでアプリを簡単にメンテナンスできないし、数日ごとにAppleに確認しなきゃいけないのは狂ってる。回避策も馬鹿げてて扱いにくいし、原則的にそれが気に障るんだよね。

App Storeの手数料は気にしないけど、自分の電話用に自分でアプリを書けないってのは狂ってる。そうじゃなきゃ、自分用にちょっとしたアプリを作るのに。Appleはそんなこと気にしないんだろうね。今の時代にHyperCardみたいなのはないし。

俺もiOS開発を副業としてやってるよ(https://jacobdoescode.com/)。みんなが言う通り、給料にはほど遠いけど、楽しいし、仕事のチャンスも広がった。マーケティングについては、/r/Appleが自己宣伝の投稿に対してすごく反応が良いことが分かったよ。基準を満たすことを忘れずにね。割引期間を設けて、/r/AppHookupで宣伝するのもいいよ。去年のブラックフライデーには、$2のアプリを29セント(許可されている最低価格)に値下げして、$500近く稼いだし、ストア検索での順位も上がった。頑張って!

OPは驚くほど進展してるね。他のコメントでも指摘されてるけど、AppleのAPIやツールにハマりやすいけど、互換性の難しい問題に対してはできるだけ良い結果を出そうとしてるみたい。もっと厄介なのは、かなりの投資をした後にブロックされること。Appleの規模とフォーカスのせいだね。開発者は何百万もいるけど、本当に重要なAPIを推進してるのは千人くらいしかいない。遅延やノイズを避けるために、Appleはハッピーパスを出荷してデモするけど、周りの落とし穴については警告しない。いつかはその落とし穴にハマるよ。どんな落とし穴も完全にブロックになる可能性がある。ウェブやエンタープライズ、バックエンドの仕事とは違って、JavaやPython、JavaScript/TypeScriptのライブラリやアプリはオープンソースで簡単に手に入るけど、バグはほとんど無視される不可解なバイナリの塊として現れる。フィードバックアシスタントのブラックホールの中でね。ソロで始めるのは簡単だけど、無限の地雷原を管理するには、大きな組織にいる必要がある。そこで人々がどこを踏まないべきか学んでいるから。

Apple Developer Programにはまだお金を払ってないのか それじゃあ、まだ半分も終わってないよ。コードサインやアプリストアの審査という、忘れられない経験が待ってるからね。2010年に初めてiOSアプリを書いたけど、その時も今も嫌いだ。自分のソフトウェアを許可なしに書けないデバイスは避けてるよ。

コードサインはもう何年も問題になってないよ。15年前に始めた頃は本当に大変だったけど、今のXcodeではすぐに使えるようになってる。

プログラムに入るのも時間がかかるよ。木曜日にサインアップして、たくさんの書類を送らなきゃいけなかったし、組織の場合はDUNS番号も必要だよ。今のところ、全体のプロセスはちょっと面倒だね。

B2Bのシナリオでは、SafariでPWAを使うことでiOSエコシステムを学ぶのを回避できたよ。モバイルデバイス管理システムにアクセスできるなら、この技術を使って各デバイスのホーム画面に「アプリ」を簡単に追加できる。B2Cについては、いい代替案がないね。App Storeに入る必要があるよ。

昔、2017年かな? ちょっとしたアプリを作ったんだけど、プレミアムを払いたくなくて、Bigbossのjailbreakリポジトリ(cydia)でリリースしようとしたんだ。そこのチェックはApp Storeよりも厳しかったよ。それが俺の初めてで最後の試みだった。

これがどうやってまとめられたのかをチェックして探るためのリポジトリリンクはある? Cursorを使い始めてから、昔から興味があったコーディングの分野に戻ろうとちょっと手を出してるんだ。Swiftが一番上にあるリストだよ。