TestFlight利用までの備忘録

はじめに

作りかけのゲームを身内にプレイしてもらうために、AndroidではDeployGateを使い、iOSではTestFlightを使うことにしました。

DeployGateでAndoroid端末配信はメモを残す必要がないくらい簡単でした。しかし、TestFlightの方は初めて使うまでに色々調べることになったため、備忘録を書きます。

いくつかのサイトを参考にしましたが、Xcodeのバージョンなどが変わっていたせいで結構違う操作になりました。

できるだけ再現可能な手順を調べるつもりでしたが、経験則的に自分がうまくいったケースとして記しておきます。

前提

  • iOS Developer登録済み

※新しく開発用のアカウントを取って英語入力するなど注意点はありましたが、登録までは少し調べるだけで分かりやすくできました。

  • Xcodeのバージョンは9.1

  • 今回は内部テストまでを想定しています

  • TestFlightの概要(アプリ公開前に限定メンバーに配信できる)を知ってる前提

  • XcodeApple申請周りの初心者向け

用語理解

証明書とかProvisioning Profileとか用語が多すぎて訳がわからなかったのでまずは以下サイトで少し下調べしました。

(参考サイト:怖くないiOSの証明書 - Qiita

最初に躓いたところ

TestFlight使用のための大まかな流れは以下サイトがわかりやすかったです。

(参考サイト:新TestFlightの使用方法 - Qiita

でも、実際に操作するとiTunesConnectの操作の一番はじめの「テスト用Appの追加」の部分から書いてる通りに動かず躓きました。

iTunesConnectのマイAppから「新規App」を追加しようとすると『iOS App の有効なバンドル ID がありません。』というエラーが表示されました。

これを解消するために、まずはApp IDの登録を行います。

App IDの登録

Apple Developerのページを開き左側のメニューからApp IDsを選択しApp IDを作成しました。

Sign in with your Apple ID - Apple Developer

NameとBundle IDを入力します。

f:id:twocolor2:20171108162312p:plain

マイAPPの登録

App IDを作成してiTunes Connectに戻ってきたら、参考にしたサイトの続きを進められました。

参考サイト:新TestFlightの使用方法 - Qiita

iTunes ConnectのマイAppのプラスボタンを押すと新規Appの登録フォームが出ます。

f:id:twocolor2:20171108163434p:plain:w300

バンドルIDは先ほど作成したものを入れます。

SKUが何か分からなかったので調べたところ、過去のアプリと重複無いように好きな英字数でつけて良いみたいです。

これで「作成」ボタンを押すと、マイAppの管理画面が出てきて上部にはTestFlightのタブが出ました。

f:id:twocolor2:20171108163745p:plain

アプリのアップロード

次はXcodeからアプリをアップロードします。

事前にXcode側でApp IDで登録したBundle IDと同じものを設定しておきます。

また、App Storeのiconが設定されていないと後の工程でエラーになるため1024*1024pxの画像を設定しました。

XcodeのImages.xcassetsを選択すると、一番下にApp Store用アイコンを設定する部分がありました。

f:id:twocolor2:20171108191521p:plain

これらを設定したうえで、XcodeのメニューからProduct > Archiveを選択します。

Archiveには数分かかりました。

Archiveに成功したあとでXcodeのメニューのWindow > Organizer選択し、「Upload to App Store」ボタンを押します。

その後でいくつか設定項目が出ますが、基本デフォルト設定で進みました。途中の「Automatically manage signing」だけは明示的にそこにチェックを入れました。

f:id:twocolor2:20171108200852p:plain:w400

「Automatically manage signing」にするとこの後の応答によってXcodeがCertificateなどを作成してApp IDと紐付けてくれたようです。

そのまま「Next」ボタンを押して進んでいったところ、アップロードにも数分かかりましたがマイAppにアップロードすることができました。

※もともとは参考サイトを見ながらCertificateやProvisioning Profileを作成していたのですが、それを使おうとするとこの部分でうまくいかず、結局自動設定にして進むことにしました。

メンバーの追加

次にTestFlightで配信するユーザをiTunes Connectの「ユーザと役割」から設定します。

「ユーザと役割」を選択後に出て来るプラスボタンを押すと、追加対象のApple IDと任意の役割を選択できてユーザ追加ができました。自分はDeveloperにして追加しました。

ユーザが閲覧可能なアプリ情報を絞れるようなので、「すべてのApp」から対象のアプリだけに変更した方が良いかもしれません。

追加されたApple ID宛にメールが届くので、ログインして認証を行います。

これではまだ先ほど登録した「マイApp」のテストユーザにはなっていないため、次はiTunes Connectの「マイApp」に戻り、先ほどアップロードしたアプリを選択してTestFlightタブを開きます。

自分の場合はArchiveをアップロードしたのに関わらず「ビルドファイルをアップロードして下さい」的なメッセージが出ていて困惑しましたが、30分以上待ったら反映されました。

アップロードしたArchiveファイルが認識されたあと、画面左の「iTunes Connect ユーザ」というメニューから、ユーザ追加を行います。

以下図のプラスボタンを押すと、「ユーザと役割」で追加したユーザが表示されるので、チェックを入れて「追加」ボタンを押します。

f:id:twocolor2:20171108192545p:plain

これだけではまだユーザにTestFlightの招待メールが届かないようです。

以下図のビルドタブを選び、ここでは1.0と書かれているビルドのリンクをクリックします。

f:id:twocolor2:20171108193928p:plain

そうすると、右上に「輸出コンプライアンス情報の提出」というボタンがある画面に遷移します。

f:id:twocolor2:20171108194123p:plain

「輸出コンプライアンス情報の提出」ボタンを押すと以下ポップアップが出るので、いいえを選択すると、「内部テストを開始」のボタンが出てきました。

f:id:twocolor2:20171108194243p:plain:w400

「内部テストを開始」ボタンを押すと、テストユーザとして登録したApple IDのメアドにTestFlightの招待メールが届きました!

f:id:twocolor2:20171108195505p:plain:w200

テストユーザ側

これであとはテストユーザ側の操作だけになります。

テストユーザの端末に、AppStoreからTestFlightをインストールします。

その後、TestFlightの招待メール中にある「View in TestFlight」をクリックします。

そうすると、TestFlightのアプリが起動し「INSTALL」ボタンが画面に表示されました。

f:id:twocolor2:20171108195423p:plain:w200

あとはインストールしてプレイ可能です。

終わりに

作ったアプリをTestFlightで配信するだけでしたが、XcodeやiTunesConnectのUIがすぐ変わるうえ、Apple DeveloperページやXcodeで操作した内容がiTunes Connectに反映されるまで時間がかかり分かりにくいなどが重なりかなり手間取ってしまいました。

また、関連情報を探したときもゼロからすべて書いているものは少なく、ある程度のXcodeやiTunesConnectの前提知識があるうえで書かれた記事が多いようでした。

今回書いた備忘録もすぐに使えなくなるかもしれませんが、これで一通りの流れはわかったので、今後に活かしていきたいです。

Unity2017で作ったプログラムをAndroid実機で動かす備忘録

はじめに

Unityで作ったプログラムをAndoroid端末でも動かそうと思ったので、自分が試したことの備忘録をまとめます。

全体の流れとして以下のサイトが非常にわかりやすかったので、ほとんどそのままの手順で実施していますが、自分の場合は途中追加でやることがあったので、それらを書きます。

(参考サイト:[Unity] アプリをビルドしてandroid実機上でテストする | Unity 3DCG

自分の環境

  • Unity 2017.1
  • Nexus7 / Android 6.0.1

Android Studioのインストール

まずは以下サイトを見ながらAndroid Studioをインストールしました。

Unityでのビルドの際にAndroid Studioがどう関係しているのか自信がないですが、あとでUnityにAndroid SDKのパスを設定する場所があるので、おそらくそれで必要なんだと思います。

(参考サイト:Android Studio をMacにインストール

Android Studioは参考サイトに書かれていたとおり以下からインストーラをダウンロードしました。インストール中はすべてデフォルトを選択で問題ありませんでした。

Download Android Studio and SDK Tools | Android Studio

その後、Android Studio起動後トップページからConfigure > SDK Managerを選択し、自分の実機のVersionのSDK等をインストールしました

特に問題も起きずAndroid Studioをインストールできました。

JDKの確認・インストール

Unityの設定でJDKのパスを設定する必要もあるのでJDKをインストールしました。

まずは以下コマンドで自分のMacJavaがあるか確認しました。ありませんでした。

java --version

以下サイトを見て、OracleのサイトからJDKインストーラをダウンロードしました。

自分はMacなのでjdk-8u151-macosx-x64.dmgを選択して、あとはデフォルトの設定でインストールできました。(2017.10.24)

(参考サイト:【初心者でもすぐわかる】JDKのインストール方法 Mac編

Java SE Development Kit 8 - Downloads

前はIDEやらJDKやらをインストールするときはもう少し手間がかかったような記憶があるのですが、杞憂でした。

数年前はWindowsJDKインストールするとJAVA_HOMEのパス設定とかあった気がするのですが、Macのせいか今はそういうのないんですね。

UnityにAndroid SDKJDKのパス指定

次は、Unity > Preference > External ToolsからSDK,JDKのパス指定をしました。

自分の場合は参考サイトの位置にそのままあったため楽でした。

(参考:[Unity] アプリをビルドしてandroid実機上でテストする | Unity 3DCG

Android SDK: /Users/ユーザ名/Library/Android/sdk

JDK: /Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home

BundleIdentifierの設定

UnityでFile > Build Settingsを選択し、PlatformでAndroidを選択しSwitch Platformボタンを押しました。すでにゲームを作りかけだったので切り替えに数分かかりました。

それからPlayer Settingsを選択するとInspectorが開くので、Company NameとProduct Nameを設定します。

その後Other SettingsでBundle identifierの設定をします。

自分の環境ではBundle IdentifierではなくPackage Nameと書かれていました。

すでに入力したCompanyNameとProductNameを利用して

トップレベルドメイン.CompanyName.ProductName」という形式でPackage Nameを入れると良いらしいです。

あとはBuild SettingsからBuildボタンを押すと.apkファイルが出力されました。これも数分かかりました。

Android端末の設定

Android端末をMacに接続した状態でBuild Settingsから「Build And Run」ボタンを押すとアプリが起動するようなのですが、自分の場合はどうもNexus7がMacに認識されていないようでした。

MacでNexus7と繋ぐ場合はUSBドライバのインストールは必要ないようですが、USBデバッグの設定が必要でした。

先ほども参考にしたこちらのサイトを見て設定しました。

(参考サイト:[Android] アプリを実機でデバッグするためのUSB ドライバーを設定する | Androidアプリ開発

Nexus端末で設定 > タブレット情報 > ビルド番号を7回タップすると開発者向けオプションが現れました。

あとは開発者オプションの中からUSBデバッグをONにしてMacに繋ぎました。

アプリが動いた!

上記の状態でBuild Settingsから「Build And Run」ボタンを押してしばらく待つと、自分のNexusでアプリが起動しました!

参考サイトがわかりやすく、しかも今回は環境依存の問題とかなくスムーズにうまく行きました。

初歩的なことですが、いくつかのサイトを見て設定したので、Unity初心者の自分だと忘れそうなので備忘のためメモを残すことにしました。

次はTest FlightかDeployGateを試してみようと思います。

Unity5で作ったプログラムをiPhone実機で動かす備忘録

はじめに

ただいま『Unity5の教科書』という本を読んでUnityの使い方を勉強しています。

実機でプログラムを動かす部分を試しているのですが、エラーが出てきて何点か設定が必要なところがありました。

また出くわすエラーだと思うので、Unity5で作ったプログラムを自分のiPhoneで動かすためにやったことの備忘録をまとめます。

(本記事は、2016年2月時点で試したときの内容を書いています。)

自分の環境

  • Unity 5.5
  • Xcode 8.2.1
  • iPhone 6S

iPhone実機で動かすまでのフロー

何も問題ない場合は以下手順で動かせるようです。Unity5とXcodeはインストール済みの前提です。

  • UnityからiOSプロジェクトの書き出しを行う
  • 生成された.xcodeprojファイルをダブルクリックしてXcodeを開く
  • XcodeからRunボタンを押す

手順詳細

私の場合そのままではうまくいかず、細かいエラーがいくつか出たので手順を詳しく書いてきます。

iOSプロジェクトの書き出し

まずはUnityから.xcodeprojファイルを書き出します。

UnityのツールバーからFile > Build Settingsを選択して、以下図の画面を出します。そしてBuildボタンを押して、ファイル名を入力してxcodeprojファイルを保存します。

生成された.xcodeprojファイルをダブルクリックするとXcodeが開きました。

f:id:twocolor2:20170205181436p:plain

XcodeでRunボタンを押す

自分のiPhone6SをMacにUSB接続した状態で、Runボタン右側のところを「Generic iOS Device」から「自分のiPhone名」に変更しました。

その後すぐ再生ボタンのような形のRunボタンを押してみました。

f:id:twocolor2:20170205182610p:plain

これで動くと思っていたのですが、早速以下のエラーが出てしまいまいた。

「自分のiPhone名」 is busy: Processing symbol files

f:id:twocolor2:20170205182952p:plain

このエラーは、上に書かれたProcessing symbol filesのところのバーが100%になったあとで再実行したら無くなりました。

Apple ID認証

Signing for "Unity-iPhone" requires a development team. Select a development team in the project editor.

Runボタンを押すと、次は上記エラーで動きません。エラーを調べたところ、今勉強している本の著者様サイトが出てきました。

(参考サイト:UnityでiOSビルドするとエラーが出る - おもちゃラボ

Teamというのを設定する必要があるらしく、Apple IDをXcodeで認証する必要があるようです。

この設定のためには、左側のファイル一覧のところでプロジェクト名を選択して、Generalというタブを開くようです。自分は途中で少しいじったせいかプロジェクト名を選択してもGeneralが出てなくて困りましたが、ターゲットを変更したらGeneralが表示されました。以下はターゲットを変更しているところの図です。

f:id:twocolor2:20170205183458p:plain

次にSigningからAdd Accountボタンを押してApple IDを認証します。

以下の画像ではすでに認証が終わった状態のものですが、最初に開いたときは矢印付近にAdd Accountボタンが出てました。

f:id:twocolor2:20170205184224p:plain

Add Accountボタンを押して自分の既に持っているApple IDでログインをするとエラーが解消しました。

ProductName変更

No profiles for 'com.Company.ProductName' were found: Xcode couldn't find a provisioning profile matching 'com.Company.ProductName'.

次はこのエラーが出ました。GeneralのBundle Identifier欄にあるcom.Company.ProductNameをユニークな名前に変更したら直りました。

デベロッパAPPの信頼

Cloud not launch "ProductName"

f:id:twocolor2:20170205185202p:plain

次はこのエラーです。iPhone側で認証する必要があるようでした。

iPhone側で、

設定 > 一般 > プロファイルとデバイス管理 から、デベロッパAPPを選んで信頼を選びました。

バイスの向き

これで動きましたが画面の向きを横向きにしたかったので、Signingの下にあるDevelopment InfoからDevice OrientationをLandscape Leftだけチェック入れた状態にしました。

f:id:twocolor2:20170206000330p:plain

2017.10.24追記

上記の設定だけだと端末スリープから復帰するとなぜか画面が縦向きになってしまいました。

File > Build Settings > Player SettingsのResolutions and PresentationでDefault OrientationをLandscape Leftにして、

ゲーム開始時に動かすソースコードに以下を記述したところ、スリープ復帰後も正しく横方向を維持できました。

Screen.orientation = ScreenOrientation.LandscapeLeft;

アプリが動いた!

これまでの設定をしたあとでRunボタンを押してしばらく待っていると、iPhoneでアプリが動きした!

Apple ID認証のところ以外は簡単なエラーばかりでしたが、細かいエラーがたくさん出ていたので、なんとか解消して動くようになって嬉しいです。

また起きそうなので落ち着いて対応できるように備忘録として対処法を残しておきます。

『成果を出し続けるための 王道SEO対策 実践講座』を読んだ感想

自分の読書背景

HTMLコードの中でSEO対策をやってみようと思い、勉強のために『王道SEO対策 実践講座』を購入しました。

SEOの知識はゼロの状態ですが、一通り最後まで通して読んでみたので初心者観点から本の感想を書いてみようと思います。

本の内容について

成果を出し続けるための 王道SEO対策 実践講座

特徴

  • 「成果を上げる」ことが第一目的で、知識無しでも読めば実行できることが書かれている
  • 閲覧者が利用しやすく検索エンジンが良いとするサイトを作るという「王道」を追求した内容
  • サイトのSEO設計について最初にすべきことから順に書いてる
  • 既にサイト運営している人向けに悩み別の逆引きもできる構成

が特徴と思います。書かれている内容について自分の言葉でまとめてみます。

主な内容

(1) SEOの背景

 SEO対策のメリットや基礎知識についての説明です。「内部対策」「外部対策」「環境対策」の位置づけなども分かります。

(2) キーワード選定

 世の中の検索ボリュームをGoogleアドワーズGoogleトレンドで調べたりして、どういったキーワードを狙うかの戦略を立てる話でした。

(3) クローラーに伝える

 サイトマップやSearch Consoleなどを使って検索エンジンクローラーを適切に呼び込む方法が書かれていました。

(4) HTMLの記述ポイント

 HTMLの記述の中で効果あるポイントが内部SEO対策として書かれています。

(5) ペナルティ

 検索エンジンを騙そうという意図がなくてもペナルティを受けて検索順位が下がることがあるので、その原因と注意点がまとめられています。

感想・考察

分かったこ

SEOというのが何なのかよくわかってなかったので『HTMLに何か書けば訪問数が増えるテクニック』と最初は思っていました。

でも実際は、世の中的に検索されている数が多いキーワードのニーズを調べたり、検索エンジンからサイトに流入したときにコンバージョンに繋がるキーワードかどうかということも考慮した設計がまずはじめにあって、それに合わせた形でHTMLにキーワードを盛り込んでいくものと分かりました。

疑問点

訪問数が多いサイトは検索上位に出ると思うのですが、そのことについては触れられていなかったため気になっています。別途調べてみようと思います。

自分の状況への応用

その1

私が改修したいサイトはメインコンテンツがツール系のサービスなので、ちまちまアップデートしていても記事とかが無いので放置してると見られそうです。

本の内容によると、そういった場合でもWebサイトを更新していることを伝えるために、トップページに更新情報が表示されるようにすると良いようです。基本的なことですが、たしかに利用者にとっても分かりやすいと思います。

また、例えば商品サイトならオススメ商品情報の記事を書くなども良いと書かれていました。これらを参考にして、更新内容を説明するページを作ろうと思います。

その2

改修したいサイトはドメイン名も適当だったので、リニューアルにあたりサイトのURL変更をしたいです。

URLが変わると検索エンジンからの評価が下がるのは避けられないようですが、301Redirect設定やSearch Console等で検索エンジンへの申請を適切に行うことで、なるべくURL変更の影響を減らすための方法についても書かれていたので、とても参考になりました。

Redirectやシステム的な面は想定していましたが、SEO的に何をすべきか全然分からなかったので体系的に理解できて安心しました。

最後に

他のSEO本を読んだことないので比較は出来ませんが、はじめて読むSEO本として非常に分かりやすかったです!

SEO初心者の感想なので間違ってるところもあるかもしれませんが、この本で学んだ内容を基礎として、あとはネットで枝葉の知識をつけていくイメージが出来ました。

iPhoneアプリ向けのゲームエンジンについて初心者が調べてみた

はじめに

最近iPhone向けゲームアプリを作りたい気持ちが高まってきたので『本でも買ってじっくり勉強しよう』と思い、軽い気持ちで本屋に行きました。

しかし、ゲーム開発の棚を見るとSpriteKitやらcocos2d-xやUnrealEngineにUnityと、よく分からないキーワードだらけで学ぶ前から早速躓きました。たぶん本にはゲームエンジンの特徴も書いてたのだと思いますが、右も左も分からない今の自分には頭に入ってきません…。まずは各ゲームエンジンがどんな立ち位置にあるのか比較した地図的なものを把握したいので、調べることにしました。

ちなみに私はObjective-Cを使ったiPhoneアプリ開発を数年前にちょっと齧ったことがあるのですが、今はもう殆ど覚えていません。

そんな初心者レベルの状態ではありますが、iPhoneアプリ向けのゲームエンジンについて全体像を自分なりにまとめてみます。

よく見かけるゲームエンジン

この記事では次のゲームエンジンについて記載します。

自分は2DのソシャゲRPG的なものを趣味で作りたいので、廉価で利用できる2Dゲームエンジンかどうかに重きをおいた説明になります。

ゲームエンジンの比較について整理された記事を見つけましたが、私がどのゲームエンジンを採用するか判断するには内容が難しかったです。なので、下記記事を参考にしつつ、各ゲームエンジンを調べて自分なりに理解したことを入門者視点でまとめます。

(全体的な比較の参考サイト:[CEDEC2015]「〇〇使いにはなっちゃだめ」ゲームエンジンメーカーが、ゲームエンジンを徹底比較

(全体的な比較の参考サイト:【CEDEC 2014】Cocos2d-xかUnityか・・・よりよい2Dゲーム開発のためのゲームエンジン選びと対策 | インサイド

Sprite Kit

Apple標準のiOS向け2Dゲームフレームワークです。Xcodeを使った普通のiOS環境でゲーム用の便利機能が使えるようになるみたいです。

Swiftだとどうなるか分かりませんが、少し古い記事だとObjective-CだとUIViewを継承したSKViewを使うと書かれていました。 既存のiOS開発した人にとっては延長上で使えそうです。また、後述するcocos2dよりもビギナーフレンドリーのようです。

(参考サイト:iOS SDKとSwiftで始めるゲーム作成入門(1):初心者でもiOS 9/tvOS向け2Dゲームが作れる標準フレームワークSpriteKitの基礎知識とチュートリアル (1/3) - @IT

(参考サイト:scratch - SpriteKit.jp

(参考サイト:なぜ Apple は Sprite Kit を作ったか、そして、Cocos2d にとって何を意味するか: cobalt blue and turquoise blue

cocos2d-x

2Dが得意なのと、オープンソースなので無料で利用できます。

クロスプラットフォーム対応で、iPhoneアプリAndroidアプリが1種類のソースコードで動くらしいです。

クロスプラットフォームフレームワークということなので、スマホアプリの場合はXcodeメインで作りながら、定期的にEclipseAndroidで確認が好ましいそうです。なんとなく開発のイメージができる感じがします。

モンストなど有名アプリでも使われていたり、実績が多いようです。

初心者的にはクロスプラットフォーム対応である点がSpriteKitとの分かりやすい差異ですね。

(参考サイト:Cocos2d-x超入門 そもそも何からはじめればいいの? - Qiita

(参考サイト:無料/国内実績多数のクロスプラットフォーム対応ゲームフレームワーク「Cocos2d-x」の概要と環境構築手順 (1/3):CodeZine(コードジン)

Unity

2Dも3Dもできて無料でも使えてクロスプラットフォーム対応、ゲーム素材も充実していてシェアも一番多いというなんかすごいゲームエンジンです。

開発環境はUnity独自のものとなるようです。

Unityですべてカバーできそうですが、

2Dでシューティングとかの速度が求められるならCocos2d-x

iPhoneアプリ開発の知識を生かしつつライトに作るならSpriteKitという棲み分けなのではと思います。

また、Unity内で扱える言語でJavascriptC#があるようですが、JavascriptはUnity独自仕様になっているようなのでC#でやるのが良いようです。

(参考サイト:【入門者必見】Unityとは?意味や特徴、特性、使い道を徹底解説 | 侍エンジニア塾ブログ | プログラミング入門者向け学習情報サイト

(開発環境の参考サイト:Unity入門(1)- 開発環境のインストール | Developers.IO

(cocos2d-xとの比較の参考サイト:Cocos2d-xかUnityか・・・ めいでる速報

(Unity内言語の参考サイト:【C#】Unity入門者に贈る超おすすめ本7選+α - はらぺこグリズリーの料理ブログ

Unreal Engine

こちらも無償で使えて(売上額によるけど)、3DでグラフィックにこだわるならUnreal Engineが良いようです。Unityよりも情報は少ないみたいです。今回は2Dを想定していたので詳しくは調べていません。

(参考サイト:Unityは神,Unrealは現実

自分の場合

詳細はまだまだ分かりませんが、大雑把な各ゲームエンジンの立ち位置が見えてきました。

自分の場合だと、

  • 基本は2Dゲームでたまに演出とかで3D入るかも
  • iPhoneだけでもいいけどクロスプラットフォーム化できるなら望ましい
  • シューティングのような重い処理は無さそう

という要件なので、UnityをC#で学習しようと思います。