PythonistaでもPyCon JP 2016 iOSアプリをビルドしたい!

この記事はPyCon JP Advent Calendar 2016 11日目の投稿です。
昨日の10日目の記事はまだ上がっていませんが、11日目です。 f:id:yutailang0119:20161211143742p:plain PyCon JP Advent Calendar 2016のテーマはPythonと私の想い出とのことですが、最近めっきりPython書くタイミングがないので、完全にiOSネタです。

pyconjp-iosリポジトリをcloneしてきても、ビルドまで辿り着けねーよ

というデッドボールを何件かもらったので、ここ見てねと言えるように書いておこうと思います。
READMEに書けよって意見もあるとは思いますが、使うツール等最低限は書いているつもりなので...

各操作をPythonで例えようかと思ってましたが、特殊概念の操作が多くて挫折しました。

ゴール

事前準備

  • Xcode 8.1をインストール済みMacがある -> インストールはこちら
  • Apple IDがある -> 作成はこちら
  • iOS 9以上のiOS端末がある (シミュレーターでよければ、無くてよい) -> 購入はこちら

ターミナルでの操作

リポジトリのclone

リポジトリをcloneしてきます。

$git clone https://github.com/pyconjp/pyconjp-ios.git
$cd pyconjp-ios

使用ライブラリのインストール

使用しているライブラリはすべて Carthage で管理しています。
まずはCarthageをインストールしましょう。おすすめはHomebrewです。

$brew install carthage

それ以外の方法はインストールdocumentを参照↓ github.com

Carthageのインストールできたら、ライブラリを入れます。

$carthage update --platform iOS

すると

*** Cloning realm-cocoa
*** Cloning AlamofireImage
*** Cloning Alamofire
*** Checking out Alamofire at "4.2.0"
*** Checking out AlamofireImage at "3.2.0"
*** Downloading realm-cocoa.framework binary at "v2.1.1"
*** xcodebuild output can be found in /var/folders/tr/5kb724wd7259fq9z_177hq600000gn/T/carthage-xcodebuild.g50ocd.log
*** Building scheme "Alamofire iOS" in Alamofire.xcworkspace
*** Building scheme "AlamofireImage iOS" in AlamofireImage.xcworkspace

Alamofire, AlamofireImage, Realm Swift がインストールされました。

なんで update なのかは、最初にCarthage導入した時点で、XcodeにEmbed済みだから。
--platform iOS のオプションはなくてもいいですが、今回は使用しないmacOS等のframeworkもビルドする時間がかかってしまうので、付けておきましょう。

Xcodeでの操作

XcodeApple IDを入れる

  1. Xcode > Preferences... (⌘,) で設定を開き、 Accounts のタブを選択します。
  2. 左下の + から Add Apple ID を選択し、事前に作成したApple IDとパスワードを入力します。

PyConJP2016.xcodeprojの設定

設定する項目
  • Identity/Bundle Identifier
  • Signing/Team
設定画面への移動
  1. pyconjp-ios/PyConJP2016.xcodeprojXcodeで開く (Xcode 8.1のみがインストールされていれば、タブルクリックで開くはず)
  2. View > Navigators > Show Project Navigator (⌘1) で1番上のプロジェクト名をクリック
  3. 上部の General タブを選択し、 TARGETS内のPyConJP2016
1段目 Identity/Bundle Identifier

すでに入力されている "jp.pycon.pyconjp" を書き換えます。
f:id:yutailang0119:20161211141619p:plain このBundle Identifierはアプリ毎にユニークである必要があります。 この証明書 (Provisioning Profile) 周りの説明をしていたら、1エントリ丸々かかるので、今回は割愛します。 気になった方はググるか、ボクに聞いてください。
Bundle Identifierには リバースドメイン.appName が推奨されています。

例) com.yutailang0119.pyconjp

他と衝突しなければ問題ないですが、無難に従っておきましょう。

2段目 Signing/Team

f:id:yutailang0119:20161211141759p:plain TeamはNoneが選択されていますが、XcodeApple IDが入っていれば、プルダウンで選択できると思います。Apple IDを選択するとプルダウンの下がクルクルして、

Provisioning Profile    Xcode Managed Profile
Signing Certificate     iPhone Developer: apple.id@domain.com

になると思います。

いざビルド!!!

MaciOS端末を繋ぎ、

f:id:yutailang0119:20161211143147p:plain f:id:yutailang0119:20161211142447p:plain:w250

で端末を選びます。

Product > Run (⌘r) でビルド!!!!!
(初回のビルドは時間がかかります。)

f:id:yutailang0119:20161208192801p:plain

となっても、初回はアプリが起動できません。
なぜかというと、今回Xcodeが作成した Free Provisioning Profile が端末側で許可されていないから。

iOS端末での操作

Settings (アプリ) > General > Profiles で自分のApple IDを選択し、 "apple.id@domain.com"を信頼 を押して、信頼してください。

再度Xcodeでの操作

(実際はiOS端末でアプリをタップでも開けるけど、) 再度ビルド Product > Run (⌘r) すると、アプリが起動🎉

ね、とっても簡単でしょ?

正直全くiOSアプリ開発したことがない人からしたら、わかる訳ねーよですね。 自分でも文章化してみてビックリでした。 生半可な気持ちじゃ挫折すると思う。

ちなみに Free Provisioning Profile は1週間経つと、端末にインストールしたままの状態でも起動ができなくなります。

これでも "ビルドできんぞ!!!" や "他にも質問があるんだが!!!" という人は、気軽に @yutailang0119 まで

この記事を読んだ (Pythonistaな) 皆さんは実行環境を手に入れたので、ガンガンアップデートして、ガンガンPRを送ってくださいね!!!!!

以上、Pythonについて微塵も触れない、PyCon JP Advent Calendar 2016 11日目でした!!!*2

*1:Apple Developer Programに有料登録していなくても、実機でデバッグビルド (iPhoneMacに繋いでのビルド) できる証明書。アプリを使用できるのは1週間のみ。1週間で10 Provisioning Profileの制限がある。

*2:すいませんでした。