아래 소스의 파일은 Assets/Editor 밑에 넣어야 함
using UnityEngine;
using UnityEditor;
using UnityEditor.Callbacks;
using System.Collections;
#if UNITY_IOS
using UnityEditor.iOS.Xcode;
#endif
using System.IO;
// PListiOS - Edit the PList file.
public class PListiOS
{
#if UNITY_CLOUD_BUILD
// This method is added in the Advanced Features Settings on UCB
// PostBuildProcessor.OnPostprocessBuildiOS
public static void OnPostprocessBuildiOS (string exportPath)
{
Debug.Log("[UCB] OnPostprocessBuildiOS");
ProcessPostBuild(BuildTarget.iPhone,exportPath);
}
#endif
[PostProcessBuild(999)]
public static void OnPostprocessBuild (BuildTarget buildTarget, string path)
{
#if !UNITY_CLOUD_BUILD
Debug.Log ("[iOS] OnPostprocessBuild");
ProcessPostBuild (buildTarget, path);
#endif
}
public static void ProcessPostBuild(BuildTarget buildTarget, string path)
{
#if UNITY_IOS
if (buildTarget == BuildTarget.iOS) {
// Bitcode Disable
string projectPath = PBXProject.GetPBXProjectPath(path);
PBXProject pbxProject = new PBXProject();
pbxProject.ReadFromFile(projectPath);
#if UNITY_2019_3_OR_NEWER
var targetGuid = pbxProject.GetUnityMainTargetGuid();
#else
var targetName = PBXProject.GetUnityTargetName();
var targetGuid = pbxProject.TargetGuidByName(targetName);
#endif
pbxProject.SetBuildProperty(targetGuid, "ENABLE_BITCODE", "NO");
pbxProject.WriteToFile(projectPath);
var projectInString = File.ReadAllText(projectPath);
projectInString = projectInString.Replace("ENABLE_BITCODE = YES;",
$"ENABLE_BITCODE = NO;"); // 비트 코드를 노로 해야 빌드가 됨
File.WriteAllText(projectPath, projectInString);
// Plist
Debug.Log ("[iOS] OnPostprocessBuild - PList");
// Get plist
string plistPath = path + "/Info.plist";
PlistDocument plist = new PlistDocument();
plist.ReadFromString(File.ReadAllText(plistPath));
// Get root
PlistElementDict rootDict = plist.root;
// Change value of CFBundleVersion in Xcode plist
//var buildKey = "UIBackgroundModes";
//rootDict.CreateArray (buildKey).AddString ("remote-notification"); // 노티 관련이라 주석처리 함
// 수출입 문서
rootDict.SetBoolean("ITSAppUsesNonExemptEncryption", false); // 테스트 플라이트에 앱 올린 후 자동으로 배포 되지 않고 한번씩 눌러줘야 했지만 이값을 넣으면 파일이 업로드가 끝나고 시간이 지나면 자동으로 배포 됨
rootDict.SetString("CFBundleDisplayName", "XXXX"); // 테스트 플라이트에 앱 올렸더니 번들명이 없다고 나와서 넣어 줌 ( 다국어 한 뒤 생김 )
rootDict.SetString("CFBundleName", "com.XXXX.XXXX"); // 위와 마찬가지
// ATS // AdColony라는 광고에서 오류가 있어서 넣어 줌
PlistElementDict NSAppTransportSecurity = rootDict.CreateDict("NSAppTransportSecurity");
NSAppTransportSecurity.SetBoolean("NSAllowsArbitraryLoads", true);
// Write to file
File.WriteAllText(plistPath, plist.WriteToString());
}
#endif
}
}