OnPostProcessBuild関係 メモ書き

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文字列の１つ上の行を検索するための文字列
/// </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