読者です 読者をやめる 読者になる 読者になる

最小限の初期投資で始めるiOSアプリ開発

新しい開発言語Swiftも使えるようになり (ちょうど日経ソフトウェア2015年1月号で特集もしているようです)、この機会にiOSアプリ開発を始めてみようかという方も多いのではないかと思いますが、開発にはOS Xが動作するMacが必須で、さらに実機で動作を確認しようと思うとiOSアプリ開発用ライセンス (年間8,000円程度) が必要と分かり、大抵の人は断念してしまうのではないでしょうか?そこで、Windows PCとiPhoneしか持っていない (私のような) 人でも最小限の初期費用 (2,000円) だけでiOSアプリ開発ができる方法についてまとめてみました。

とは言っても、ここに書いてあることはほとんど以下のページのものまねです。意味があるとすれば、2014/11/22時点の最新環境でも、この方法がそのまま使えるということだけでしょう。

なお、最初に書いておきますが、この方法は

  1. 仮想マシンOS Xをインストールする
  2. iOSデバイスを脱獄 (jailbreak) する

というAppleのライセンス規約的にグレーなことをやることになりますので、その点は留意して下さい。

それと、これを見てそのうちやってみようと思った方は、iOSデバイスの脱獄だけは今すぐにやっておくことをお勧めします。 脱獄が可能な最新バージョンiOS 8.1へのアップデートは11/24現在では可能ですが、既にiOS 8.1.1がリリースされており、いつAppleのサーバ側でアップデートが許可されなくなってもおかしくない状況です。脱獄の方法は、Pangu for iOS8 - Tools 4 Hack等を参照すれば簡単にできます。 12/6現在、iOS 8.1へのアップデートはできなくなりましたが、iOS 8.1.1で脱獄が可能になりました。脱獄方法は、[iOS] iOS 8.1.1対応!iOS 8.0~8.1.1を完全脱獄する方法!『TaiG』を参照。 また、一度脱獄してもiOSの復元を行えば基本的に元に戻せますので、その点はご安心下さい。

動作確認した環境


WMwareにMac OS Xをインストール

細かく書こうかと思いましたが、前述したMac本体が無くてもWindowsだけでOS Xをインストールする方法 (いちたそさんのページ) そのままなので、そちらを参照して下さい。Mac OS X 10.6 (Snow Leopard) の購入 (2,000円程度) が必要になります。インストール後、無償で 10.9 (Yosemite) にアップグレードできます。

少しだけ補足すると、最初の新しい仮想マシンウィザードのゲストOSの選択に注意して下さい。通常、Linux 等をインストールする際は適当に選んでも問題ありませんが、Mac OS Xの場合は違うようです。私の場合、"Mac OS Server 10.6 64ビット" を選ばないと仮想マシンが正常に起動しませんでした。それと、サウンドドライバはSnow Leopardの間は動作していましたが、Yosemiteに上げたら音が出なくなりました。まぁ開発には支障はないので、気にしていません。

Yosemiteにアップグレードしたら、AppStoreからXcode (6.1) をインストールして適当なアプリを作成し、iOSシミュレーターで動作させてみるところまでやっておいて下さい。その状態から、作成したアプリを実機に転送して動作させるまでが以下の説明になります。

証明書の作成

アプリに署名を行うための証明書を作成します。いわゆるオレオレ証明書です。

  1. Dockの「アプリケーション」=>「ユーティリティ」フォルダにある「キーチェインアクセス」を起動します。
  2. メニューの "キーチェーンアクセス" => "証明書アシスタント" => "証明書を作成..."
  3. ダイアログの最初で、
    • 名前: 適当に入力 (ここでは "alpha22jp")
    • 証明書のタイプ: コード署名
    • "デフォルトを無効化" にチェック (これはどちらでもいいかも?) f:id:alpha22jp:20141124233839p:plain
  4. 後の画面は全部デフォルトで [続ける] を連打します。
  5. 以下のように「自分の証明書」に証明書が作成されたことを確認します。 f:id:alpha22jp:20141125000618p:plain

Xcodeのコード署名設定の変更

Xocdeが起動中の場合は一旦終了させて下さい。OS Xに不慣れな方 (私もですが...) のために書いておきますが、単にウィンドウを閉じるだけでは終了しておらず、Dockのアイコンから終了させる必要があります。

  1. Finderで以下のフォルダをを開きます。(メニューの "移動" => "フォルダへ移動...")
    /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk
  2. SDKSettings.plist をデスクトップなどの適当な場所にコピーして開きます。
  3. 以下のように、CODE_SIGNING_REQUIRED を NO に変更して保存します。 f:id:alpha22jp:20141125001909p:plain
  4. 変更したファイルをFinderで元の場所に上書きします。
    (このとき、警告が出るので管理者のパスワードを入力します)

アプリの作成と署名

Xcodeで作成したアプリのプロジェクトを開き、以下の操作を行います (ここでは、"TestApp" という名前でアプリを作成したとします)。

  1. プロジェクトのBuild Settingsを開き、Code Signingの設定を以下のように全部 "Don't Code Sign" にします。 f:id:alpha22jp:20141125003053p:plain
  2. 動作させたいデバイスをUSB接続し、ターゲットをそれに変更します。(ツールバーデバッグ停止ボタンの右)
  3. ビルドを行います (メニューの "Product" => "Build")。ビルドが成功すると、左側ペインのProductsの下にTestApp.appができます。 f:id:alpha22jp:20141125003937p:plain
  4. 右クリックして "Show in Finder" 等で、アプリのフォルダの所在を確認して下さい。この例では以下の場所となります。
    ~/Library/Developer/Xcode/DerivedData/TestApp-gzmnwhrlrgsdkmexucyaurqfoynl/Build/Products/Debug-iphoneos/TestApp.app
  5. ターミナルから以下を実行します。
$ export CODESIGN_ALLOCATE="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/codesign_allocate"
$ cd ~/Library/Developer/Xcode/DerivedData/TestApp-gzmnwhrlrgsdkmexucyaurqfoynl/Build/Products/Debug-iphoneos/
$ codesign -fs "alpha22jp" TestApp.app

1つめの引数は作成した証明書の名前、2つめはアプリのフォルダです。実行すると警告が出るので [許可] を選択します。なお、最初の1行は、毎回実行しなくもよいように、~/.bash_profile等に追加しておくとよいでしょう。

以上で、実機で実行可能なアプリができました。

実機へのアプリの転送と動作確認

転送方法は何でもよいですが、ここではsshを使用しますのでCydiaでopensshをインストールして下さい。(ここも詳細は省略...)

実機をMacと同じネットワークに接続した状態で、Macのターミナルから以下を実行します。ここでは、実機のIPアドレスが192.168.1.11として説明します。上の操作でアプリを署名したところからの続きです。

$ scp -r TestApp.app root@192.168.1.11:/Applications/
$ ssh root@192.168.1.11 chmod -R 775 /Applications/TestApp.app
$ ssh root@192.168.1.11 killall -HUP SpringBoard

最後の1行は、実機のUI (FlipSwitch等) からリスプリングを実行しても同じです。

これで、以下のようにアイコンが現れ、実際に動作させてみることができます。

f:id:alpha22jp:20141125224531p:plain

(2014/11/27 追記)
どうも、iOS 8 (7も?) では単にリスプリングしてもアプリのアイコンが出てこないことがあるようです。その場合は、Cydiaで何でもよいのでリスプリングが必要となるアプリを再インストールしてみて下さい。

また、アプリの更新時は再ビルドしてファイルをコピーし直すだけでOKです。(署名とリスプリングは不要)


どうでしょうか?若干ターミナルからのコマンドが必要な箇所があり、その辺りの操作に不慣れな方にはちょっと難しく感じるかもしれませんが、やっていること自体は難しいことではありません。

ただ、仮想マシンでは動作が重くXcodeが快適には動きませんし、実際にアプリを配布しようと思うとやはり開発者ライセンスが必要なので、この方法でちょっと試してみて、続けられそうなら本格的に開発環境を整えるのがよいと思います。