LoginSignup
4
4

More than 5 years have passed since last update.

OnPostProcessBuild関係 メモ書き

Last updated at Posted at 2017-01-20

2017/02/15 追記

プッシュ通知を実装するためには

■Info.plistを更新する

#if NOTIFICATION_SYSTEM_ENABLE
    // Change value of CFBundleVersion in Xcode plist
    var buildKey = "UIBackgroundModes";
    plist.root.CreateArray (buildKey).AddString ("remote-notification");
#endif

■定数など

/// <summary>
/// プッシュ通知追加位置に使用する状態
/// </summary>
private enum FindEnum
{
    INITIAL = 0,
    FIND_CAPABILITIES,
    PROVISIONING_STYLE,
    NON_CAPABILITIES,
    ADD_END
} 

/// <summary>
/// entitlementsファイル拡張子
/// </summary>
private const string ENTITLEMENTS_SUFFIX = ".entitlements";

/// <summary>
/// PBXプロジェクトファイルパス
/// </summary>
private const string PBX_PROJECT_FILE_PATH = "/Unity-iPhone.xcodeproj/project.pbxproj";

/// <summary>
/// アプリ名.
/// </summary>
private const string APP_NAME = "アプリ名";

/// <summary>
/// Capabilitiesの発見開始の文字列
/// </summary>
private const string CAPABILITIES_FIND_STRING = "/* Begin PBXProject section */";

/// <summary>
/// Capabilities文字列の1つ上の行を検索するための文字列
/// </summary>
private const string PROVISIONINGSTYLE_STRING = "ProvisioningStyle";

/// <summary>
/// SystemCapabilitiesキー検索用の文字列
/// </summary>
private const string SYSTEMCAPABILITIES_STRING = "SystemCapabilities";

/// XCodeプロジェクト名.
/// Unityでビルドした際のデフォルトターゲット名は"Unity-iPhone".
private const string XCODE_PROJECT_NAME = "Unity-iPhone";

/// iOSのプラグインディレクトリパス.
private const string IOS_PLUGINS_DIR_PATH = "Assets/Plugins/iOS";

/// XCodeのInfo.plistファイル名.
private const string XCODE_INFO_PLIST_FILE_NAME = "Info.plist";

■プッシュ通知設定をXcodeの設定に追加する。

/// <summary>
/// プッシュ通知設定をXcodeの設定に追加する。
/// </summary>
/// <param name="path">Path.=ファイルをreadするパス</param>
private static void AddPushNotificationCapabilities(string path)
{
    string projPath = path + PBX_PROJECT_FILE_PATH;
    PBXProject proj = new PBXProject ();
    proj.ReadFromString (File.ReadAllText (projPath));

    List<string> pbxLineList = new List<string> ();
    List<string> pbxSaveLineList = new List<string> ();

    string[] lines = proj.WriteToString().Split ('\n');
    pbxLineList.AddRange (lines);

    int loopMax = pbxLineList.Count;

    FindEnum FindState = FindEnum.INITIAL;

    for(int i = 0; i < loopMax; i++)
    {
        // XcodeProject保存用リストに追加
        pbxSaveLineList.Add (pbxLineList [i]);

        if (pbxLineList [i].IndexOf (CAPABILITIES_FIND_STRING) >= 0) 
        {
            FindState = FindEnum.FIND_CAPABILITIES;
        }

        if ((FindState == FindEnum.FIND_CAPABILITIES) &&
            (pbxLineList [i].IndexOf (PROVISIONINGSTYLE_STRING) >= 0))
        {
            FindState = FindEnum.PROVISIONING_STYLE;
        }

        if (FindState == FindEnum.PROVISIONING_STYLE) 
        {
            // capabilities文字列が存在しない
            if (pbxLineList [i + 1].IndexOf (SYSTEMCAPABILITIES_STRING) < 0) {
                // capabilities
                pbxSaveLineList.Add ("SystemCapabilities = {");
                FindState = FindEnum.NON_CAPABILITIES;
            }
            else 
            {
                i++;
                pbxSaveLineList.Add (pbxLineList [i]);
            }


            // push add
            pbxSaveLineList.Add("com.apple.Push = {");
            pbxSaveLineList.Add("enabled = 1;");
            pbxSaveLineList.Add("};");

            // capabilities文字列が存在しない
            if (FindState == FindEnum.NON_CAPABILITIES) 
            {
                // capabilitiesの閉じカッコ
                pbxSaveLineList.Add("}");
            }
            FindState = FindEnum.ADD_END;
        }
    }

    File.WriteAllText(projPath, string.Join ("\n", pbxSaveLineList.ToArray ()));
}


iOSのTeamIDを取得するには、
Apple Developer ProgramのMemberShipより取得


プッシュ通知設定を変えるには、
Unity-iPhone.xcodeproj内のproject.pbxprojを編集

具体的には、下記ファイルを舐めて、無理やり変える。

/Unity-iPhone.xcodeproj/project.pbxprojファイルをリードして、下記のように
project.pbxproj読み込んでループで回す。

string projPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj";
PBXProject proj = new PBXProject ();
proj.ReadFromString (File.ReadAllText (projPath));
/* Begin PBXProject section */

以降の

ProvisioningStyle

の文言を探し、次の行に

SystemCapabilities

があるかチェック
なければ

SystemCapabilities = { 

の文言を追加、閉じカッコも忘れず。

そして、SystemCapabilitiesのカッコの間に下記を追加

com.apple.Push = {
enabled = 1;
};

これでいけるはず・・・・

下記URLを参考
https://teratail.com/questions/52234

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4