ハトネコエ Web がくしゅうちょう

プログラミングやサーバー・Web制作、チームマネジメントなど得た技術のまとめ

Unity プロジェクトを無料で手元の iPhone (iOS) へビルド

この記事は、年間 11,800 円の Developer 会員(Apple Developer Program membership)じゃないけれど、
自分の Unity プロジェクトが iOS でちゃんと動作するのか確認したい人のための記事です。

1. 前提知識

Apple Developer Program membership じゃないと出来ないこと

  • ipa ファイルの出力が出来ない
  • よって、Deploygate などを使った配布もおこなえない
  • もちろん TestFlight も使えない(そもそも今は Apple Developer Program membership 向けのサービスなので)

会員じゃなくても出来ること

というわけで、この記事では後者の2点に関しておこないます。

2. Xcode 側の設定

アカウント設定をまだの場合はします。

Xcode の設定画面を開き、「Accounts」タブを選び、まだ Apple ID を Xcode に登録していないのなら、
左下の + ボタンを押して、Apple ID を追加してください。

f:id:nekonenene:20190525111111p:plain

Apple ID の追加が終わったら、今度は「Manage Certificates...」ボタンをクリックします。

f:id:nekonenene:20190525111851p:plain

左下の + ボタンを押して、「iOS Development」を選択します。

f:id:nekonenene:20190525112018p:plain

これで開発ビルド用の証明書が作成されました。

3. Team ID の確認

Apple Developer Program に登録している人は https://developer.apple.com/account/#/membership/ に書かれている Team ID を用いるのですが、
今回使うのはそこの Team ID ではありません。

先ほど作った証明書に Team ID は書かれています。

Keychain アプリを開きます。

open -a /Applications/Utilities/Keychain\ Access.app

右上の検索ボックスにiPhoneと入力します。

f:id:nekonenene:20190525113003p:plain

iPhone Developer」と書かれた証明書ファイルが見つかると思いますので、
それをダブルクリックして詳細を開きます。

f:id:nekonenene:20190525113433p:plain

詳細の中に、「Organizational Unit」という項目があります。
ここに記載された値を、 Team ID として後ほど使用します。

4. Unity 側の設定

より詳細に触れている記事もネットにあるので、
私の設定を軽く書く程度で流していきます。

今回はデバッグビルドなので、以下のような設定にしました。

f:id:nekonenene:20190525114126p:plain

この画面の左下、「Player Settings...」ボタンを押してさらに詳細な設定をおこないます。

「Resolution and Presentation」の項は、
横長のゲームなので「Default Orientation」を「Landscape Left」に変更しました。

f:id:nekonenene:20190525114819p:plain

で、大事なのが「Other Settings」の項
ここで 3. でメモした Team ID を用います。

f:id:nekonenene:20190525115604p:plain

「Signing Team ID」の項目に、先ほどメモした Team ID の値を入力します。
ここを入力し、また、「Automatically Sign」にチェックが入っていることで、
Xcode は先ほどの証明書を使って、Unity から渡されるプロジェクトのビルドをおこなうことができるのです。

また、もう1つ気を付けたいのは「Bundler Identifier」の項目です。
ここの値はアンダーバーを許容しません

ですので、Androidのパッケージ名のような感覚で
例えば「com.google.something_game」と名付けるとビルドエラーになってしまいます。
「com.Google.SomethingGame」などと名付けましょう。

これらの設定がおこなえたら、先ほどの Build Settings ウィンドウに戻り、
「Build And Run」ボタンでビルドをスタートします。 Unity 側で Xcode 用のブロジェクトをビルドしたのち、そのまま Xcode 側で iOS のためのビルドが走ってくれます。

5. iPhone 側の許可

Xcode により iOS 向けのビルドが走り、 iPhone へのインストールがスタートするのですが、
おそらく初回はインストールに失敗すると思います。

開発ビルド用の証明書は、iOS 側で疑わしい証明書の扱いを受けてしまうのです。

たぶんその際にエラーメッセージが表示されると思うのですが、
iPhone の設定アプリから、「一般」→「プロファイルとデバイス管理」に進んで、
デベロッパAPP」の中にある自分の Apple ID を選んで、「〇〇を信頼」を押してください。

これで、再びビルドを回すと、iPhone へ正常にインストールがおこなわれるようになっているかと思います。
Xcode でビルドエラーが出ている場合は、エラーメッセージをよく読み解決しましょう……)

6. iOS Simulator での動作

上では実機での動作について書きましたが、
iOS Simulator(エミュレーター)で動かす方法も書いておきます。

4. でいじった「Other Settings」の項を再びいじる必要があり、
「Target SDK」の設定を「Simulator SDK に変更し、
「Auto Graphics API」のチェックボックスのチェックを外し、すぐ下の一覧に
「OpenGLES2」もしくは「OpenGLES3」が含まれているかを確認します。

f:id:nekonenene:20190525131049p:plain
「Simulator SDK」を選択

f:id:nekonenene:20190525131124p:plain
「Auto Graphics API」のチェックを外す

参考: UnityプロジェクトをiOS Simulatorで実行する時の注意点 - Qiita

この設定の状態で「Build And Run」をおこなえば、
iOS Simulator でアプリが起動するかと思います。

長い道のりでしたが、これで Unity アプリを自分の iPhone 向けにデバッグビルドすることが出来ました! あいかわらず iOS へのビルドはややこしいですね……。

はてなブログの Google Analytics で /realtime_preview などを集計対象外にする

Google Analytics のデータを久しぶりに見たときに思いました。

「あれ? この /realtime_preview ってなに・・・?」

f:id:nekonenene:20190525080702p:plain

他のページの数倍の PV 数を作り出しているんですよ(笑)
これはおかしいな、と思って調べました。

そしてたどり着いたのがこちら : Google AnalyticsのPV数に自分のプレビューとリアルタイムプレビューをカウントさせない方法 - Pocket of time

1. /realtime_preview と /preview の正体

どうやら、記事を書いているときに右側に表示されるのが /realtime_preview にあたるようです。
文字を書くごとに自動更新される箇所なので、それは PV 数もどんどん増えていくわけです。

f:id:nekonenene:20190525081148p:plain
この右側のカラムが realtime_preview

なお、私はあんまり使わないんですが、
編集画面の上部にある『プレビュー』を押したときに表示されるのは
/preview にアクセスしに行ってるそうなので、こちらも除外するのが良さそうです。

f:id:nekonenene:20190525081324p:plain
preview はこちら

2. フィルタ機能を使って集計対象から除外する

このままでは、ブログを書いている日だけ PV 数が上昇してしまい、
PV数の遷移グラフが信用ならないものになってしまいます。
フィルタ設定をおこなうことで、集計結果を正常化させましょう。

Google Analytics のホーム画面 にアクセスしたら、
左下にある歯車マークが添えられた「管理」をクリックしてください。

f:id:nekonenene:20190525082058p:plain

いろいろ出てきますが、一番右のカラムから「フィルタ」を選んでください。

f:id:nekonenene:20190525082315p:plain

「+ フィルタを追加」ボタンを押します。

f:id:nekonenene:20190525082407p:plain

例えば以下のように入力します。

f:id:nekonenene:20190525090300p:plain
/realtime_preview, /preview を除外するフィルタ設定例

  1. フィルタ名は自分のわかりやすいようお好みで
  2. 「フィルタの種類」は「カスタム」
  3. 「フィルタ フィールド」は「リクエスURI
  4. 「フィルタ パターン」には正規表現が使えるので「^/(realtime_)?preview$」と入力。
    これで /realtime_preview も /preview もフィルタの対象となります
  5. 最後に下にある「このフィルタを確認する」でどう変化するのか確認しておくと安心です
  6. 問題なければ「保存」ボタンで設定を保存します

以上です。

3. 下書きプレビュー共有URLも除外対象にする

もうひとつ、はてなブログでは、下書き保存したあとに共有URLの取得ができますが、
それについても除外対象にしておきましょう。

個人ブログではあんまり使わない機能ですが、
会社のブログなどでは使うことの多い機能かと思います。

以下のような設定になりました。

f:id:nekonenene:20190525090511p:plain
/draft ページを除外するフィルタ設定例

2. で記載した設定とほぼ同じですが、
「フィルタ パターン」を「^/draft/.+」としているのが重要な違いです。
下書きプレビュー共有URLは /draft/<文字列> のような作りになっているので、それらを除外しているわけですね。

4. おわりに

一度作ったフィルタ設定は、仮に他のブログを作ったときでも、
「+ フィルタを追加」ボタンを押したあとの画面で「既存のフィルタを適用」を選択することにより、かんたんに再利用できます。

f:id:nekonenene:20190525090755p:plain

フィルタ設定は、設定した後のアクセスのみに反映されますから、
ブログを作ったらすぐにフィルタ設定を入れて、正確な Google Analytics データを最初から取得できるようにしておくことがおすすめです!

Unity Hub でインストールした Unity の C# Script テンプレートを変更

f:id:nekonenene:20190523112647p:plain
ここから追加した際に C# Script Template が使用される

以前の Unity では以下の記事にあるように、 /Applications/Unity/Editor/Data/Resources/ScriptTemplates 以下のファイルを編集することで、
C# Script テンプレートをデフォルトから変更することが出来ていました。

support.unity3d.com

しかし、 Unity Hub で Unity をインストールした場合には、
そのディレクトリは存在しないし、仮にそのディレクトリにファイルを作成したところで Unity は影響を受けません。

では、 Unity Hub でインストールした Unity の C# Script テンプレートがどこにあるのか?
探してみました。

cd /Applications/Unity
find . -name *Script.cs.txt

./Hub/Editor/2019.1.3f1/Unity.app/Contents/Resources/ScriptTemplates/86-C# Script-NewSubStateMachineBehaviourScript.cs.txt
./Hub/Editor/2019.1.3f1/Unity.app/Contents/Resources/ScriptTemplates/81-C# Script-NewBehaviourScript.cs.txt
./Hub/Editor/2019.1.3f1/Unity.app/Contents/Resources/ScriptTemplates/83-C# Script-NewTestScript.cs.txt
./Hub/Editor/2019.1.3f1/Unity.app/Contents/Resources/ScriptTemplates/86-C# Script-NewStateMachineBehaviourScript.cs.txt

というわけで、目的のファイルは

/Applications/Unity/Hub/Editor/2019.1.3f1/Unity.app/Contents/Resources/ScriptTemplates/81-C# Script-NewBehaviourScript.cs.txt

にありました。
(※「2019.1.3f1」の部分は、インストールした Unity のバージョンによって変わります)

いちおう変更前に、念のためバックアップをとっておきます。

cd /Applications/Unity/Hub/Editor/2019.1.3f1/Unity.app/Contents/Resources/ScriptTemplates
cp "81-C# Script-NewBehaviourScript.cs.txt" "81-C# Script-NewBehaviourScript.cs.txt.bak"
ls

81-C# Script-NewBehaviourScript.cs.txt                 86-C# Script-NewSubStateMachineBehaviourScript.cs.txt
81-C# Script-NewBehaviourScript.cs.txt.bak             87-Playables__Playable Behaviour C# Script-NewPlayableBehaviour.cs.txt
83-C# Script-NewTestScript.cs.txt                  88-Playables__Playable Asset C# Script -NewPlayableAsset.cs.txt
83-Shader__Standard Surface Shader-NewSurfaceShader.shader.txt     90-Shader__Compute Shader-NewComputeShader.compute.txt
84-Shader__Unlit Shader-NewUnlitShader.shader.txt          91-Assembly Definition-NewAssembly.asmdef.txt
85-Shader__Image Effect Shader-NewImageEffectShader.shader.txt     92-Assembly Definition-NewEditModeTestAssembly.asmdef.txt
86-C# Script-NewStateMachineBehaviourScript.cs.txt         92-Assembly Definition-NewTestAssembly.asmdef.txt

81-C# Script-NewBehaviourScript.cs.txt をこのように変更してみました。

using UnityEngine;

namespace Hatone {
    public class #SCRIPTNAME# : MonoBehaviour {
        #region Unity Methods
        void Start() {
            
        }
    
        void Update() {
            
        }
        #endregion
    }
}

なお、個人的な好みで { が始まる前の改行を無くしていますが、
Microsoft の C# コーディング規約 としては
{ の前に改行を入れることを要求していますので、上のは一般的な書き方ではないことにご注意ください。

デフォルトのテンプレートに namespace を毎回付けるのが面倒だったり、
なにげに文字エンコーディングUTF-8 with BOM であることも気になっていましたので(BOM無しの UTF-8 にしたい)、
テンプレートを変えることで作業効率がアップできそうだと思います!

デフォルトのテンプレートが肌に合わない方はぜひお試しください。