こんにちは。
引き続きアプリ開発勉強中です。
前回、WindowsPCでクロスプラットフォームのXamarinを使ってみるということで、環境構築からサンプルアプリをビルドするところまで書きました。
→【VisualStudio 2017】Windowsでjava経験者のプラットフォームツールはXamarinがいいらしい
が、クロスプラットフォームということはやはりiOSアプリも開発出来なければ!
ということで、今回はWindowsでiOSアプリを作って”実機で”(ここ大事)デバッグするための環境構築の流れをまとめていきます。
プラス、Xamarin関係でハマったことを最下部にまとめてるので、ハマった時には参考なればと思います。
【導入】
iOSアプリ開発に必須なもの
・Xcode … Xcode通さないとビルド出来ない、あとStoryboardも使えない
・macOS … Windows対応のXcodeが存在しないので必然
実機用ビルドするのに必要なもの、こと
・App ID
・Apple Developerの証明書
・端末UDIDのdeveloper登録
画面の開発およびエミュレータの利用にはXcodeが必須なので、基本的にはmacOSが要ります。
また、iOSアプリを実機で動作させるための条件は以下3点です。
・アプリのBundleIDが、App IDと一致
・コードサイニング(署名)が正しい
・端末に実行が許可されている
ということで、これらをクリアするのが目標となります。
(エミュレータを使用する場合は必要ありません)
ちなみに、リリースまでする場合は、Apple Distributionという別の証明書が必要です。
詳しくはApple Developerのガイドラインをどうぞ。
アプリケーション配布作業の流れについて
→https://developer.apple.com/jp/documentation/IDEs/Conceptual/AppDistributionGuide/Introduction/Introduction.html
今回、上記の準備物は全て揃っている前提で、Xamarinの設定から進めます。
各準備物の用意方法は以下をどうぞ。
- Xcodeダウンロード
→https://developer.apple.com/jp/xcode/
- Apple ID作成方法等
→https://support.apple.com/ja-jp/HT203993
- 証明書の発行周りについて
→https://developer.apple.com/support/certificates/jp/
- App IDや実機UDIDの登録について
また、Xcodeは、最新版を入れておいてください。
※インストール済みの場合もバージョンアップしておいてください。
本記事作成時点ではXcode 9.1です。
【MacにXamarinを入れる】
必要なものが揃ったら、まずMac側にWindowsに入れたものと同じバージョンのVisualStudioをインストールします。
VisualStudio for Mac
→https://www.visualstudio.com/vs/visual-studio-mac/
ダウンロード出来たら、インストーラーを起動します。
必要なものだけチェックを付けて、インストールを実行します。
※今回Macを直接操作する予定はないので、iOSとmacOS開発用のコンポーネントのみ入れてます。
Windowsの時と同じく、待ちます。
インストールが完了したらアプリが立ち上がると思います。
Windowsと同じMicrosoftアカウントでログインしておいてください。
ログイン出来たら、VisualStudioは閉じてしまってOKです。
【リモートログインの設定】
WindowsからMacサーバへリモート接続するために、ssh接続を許可する必要があります。
Macの[システム環境設定]を開き、[共有]を選択。
[リモートログイン]にチェックを入れて、ログインを許可。
接続可能なユーザに制限をかける場合は、必要なユーザを追加してください。
【Apple IDの設定】
いよいよ実機ビルドのための設定にうつります。
Xcodeを起動して、メニューバー[Xcode] → [Preferences]を選択して、設定ウィンドウを開きます。(画像①,②)
設定ウィンドウの[Accounts]を選択し、証明書を持っているApple IDにログインします。(画像③,④)
【プロジェクトの作成】
続いて、Mac側でプロジェクトを作成していきます。
Windows側のプロジェクトと同じアプリだと認識させることで、Windows側からビルドが可能になります。
では実際に作っていきましょう。
Xcodeを立ち上げて、新規プロジェクトを作成します。
[Single View App]→[Next]を選択。
次に、基本設定を決めます。
既にWindowsでiOS用アプリのプロジェクトを作成している場合、そちらの設定に合わせてください。
※プロジェクトのInfo.plistファイルで確認できます。
では各項目について説明します。
- Product Name
プロジェクト(アプリ)の名前。Windows側のiOS用プロジェクト(アプリ)名と同じにする。
- Team
Apple IDのチーム名。登録済みのApple IDから選択できるので、利用するApple IDのチームを選ぶ。
-
- Organization Name
組織名。無くても問題はないが、コードのCopyrightになるので、付けておく方が好ましい。
-
-
- Organization Identifier
-
組織の識別ID(ドメイン名)。
-
-
- Bundle Identifier
-
アプリの識別子。ドメイン + プロジェクト(アプリ)名。Windows側のiOS用プロジェクトのバンドル識別子と一致させる。
-
-
- Language
-
開発言語。SwiftかObjective-Cが選択可能。今回は関係ないので何でもOK。
-
-
- Use Core Data
-
Core Dataを使う場合はチェック。
-
-
- Include Unit Tests
-
Unit Testファイルを使う場合はチェック。
-
-
- UI Tests
-
UI Testファイルを使う場合はチェック。
チェックボックスは今回全て未チェックです。
記入が終わったら[Next]で、保存先を決めたら[Create]です。
実機はMacに接続しておいてください。
Mac側の準備はこれで整いました。
【WindowsからMacにリモート接続する】
ではWindowsに戻ってMacに接続してみましょう。
ビルドまであと少しです。
VisualStudioを立ち上げて、[ツール]→[iOS]→[Xamarin Mac Agent]を選択します。
同じネットワーク上にMacサーバがある場合、自動で認識されるので、選択し[Connect]を押します。
別のネットワークにある場合、AddServerから接続先を追加して、[Connect]です。
接続先のユーザIDとパスワードを入力して[Login]でリモート接続できます。
接続出来たらプロジェクトを立ち上げていきます。
【iOSアプリを作成する】
最後です。
WindowsでiOSアプリを作ります。
プロジェクト作成の詳細は、前回記事を参照してください。
VisualStudioで[ファイル]→[新規作成]→[プロジェクト]→[iOS]→[iPhone]→[単一ビューアプリ]を順に選択。
アプリ名はXcodeで作成したプロジェクト名と同じものを付けて下さい。
プロジェクトが立ち上がったら、ソリューションエクスプローラーから、Info.plistファイルを開き、バンドル識別子の欄を、Macで作成したプロジェクトのBundle Identifierと同じにします。
後は、配置ターゲットを実機のOSのバージョンにして保存すれば準備完了です。
実行対象が、Macに接続している実機になっていることを確認してビルドボタンを押せば、実機にビルドされ、アプリが立ち上がります。
以上です!
ここまで出来れば、後はガンガン開発するのみです。
どこかで詰まった時は、もう一度全ての準備物が揃っているか、設定は間違っていないか、MacとWindowsで同じプロジェクトが作成されているかなど、確認してみてください。
おまけ
今回の記事に直接関係ないこともあるんですが、その後の開発で色々ハマったので、メモ的に残しておきます。
Macにリモート接続できない
・接続先が間違っていないか
・Mac側のリモート接続設定やユーザパスワードなどが間違っていないか
・Mac側でログイン状態は保持できているか
を確認。
ただPermissionエラーが出てる場合、Xcodeのリモート接続設定で弾かれてる場合があるので設定する。
Xamarin Fix
→https://www.clearlyagileinc.com/blog/xamarin-fix-xcode-license-must-be-accepted-in-order-to-be-connected-issue
Storyboardが表示されない
Xcode is too new
‘This file has been edited in a version of Xcode which is unsupported by the designer. Documents saved in Xcode 9.1 format, or older, are supported.’
とか言って突然Storyboardが表示されなくなる。
どうもXcodeが新しすぎる模様。(この時Xcode 9.1が公開されたばかりだった)
調べましてこちら。
Storyboard does not load anymore after upgrading Xcode to version 9.1 (9B55)
→https://forums.xamarin.com/discussion/106112/storyboard-does-not-load-anymore-after-upgrading-xcode-to-version-9-1-9b55
対象のstoryboardをソースコードで開き、2行目の「toolsVersion」を”13527″にしたらいけた。
ということなので、やってみたら動く。
なんというBADノウハウ…。
XamarinがXcodeのバージョンに追いついて無い時に起こるんですかね…?
ビルドでターゲット指定してなくて怒られた
.plistの「配置ターゲット」設定でOK。
ただ私の環境だとビルドする度に初期化(指定なし)に自動で戻る(何故)。
ビルドで何かエラー
クリックイベント「Objective-C exception thrown. Name: NSInvalidArgumentException」が発生
C#記述の前に、Storyboard側でイベントハンドラ設定しているとダメらしい。 Storyboard側の設定を消すと直った。
Objective-C exception thrown. Name: NSInvalidArgumentException
→https://forums.xamarin.com/discussion/13757/objective-c-exception-thrown-name-nsinvalidargumentexception
チェックボックスがチェックされてるかわからない
.plistファイルなどのチェックボックスで、チェック入れてるのに見えない問題。
VisualStudioの[ツール]→[オプション]→[環境]→[全般]で、配色テーマを「濃色」にしていると起こる。
淡色の時…
濃色の時…
※「バックグラウンドモードを有効にする」にチェックが入っています。
おそらくフォント色が白になっているのが原因なのかな~と思います。
以上、対応策色々でした。
やはりiOS開発周りが多いですが、もうしばらくは仕方がない気もしますね…。
それでは良いXamarinライフを~~。