유니티 iOS 빌드 된 폴더를 Post Build Process 해서, Capability Entitlement 설정 하기
오늘도 젠킨스로 iOS 빌드를 뽑아보는 데 , 클라우드 로드가 제대로 작동하지 않았다.
지금 프로젝트는 Prime31 의 클라우드 에셋을 쓰기 때문에,
( 그러고 보니 , 이 에셋을 쓰지 않고 구현하는 방법에 대해서 나중에 알아보자.)
Capbability 에서 Cloud 항목을 Enable 하고 , 세부 Entitlement 를 True 해주어야 하는데, 체크가 되어있었다.
(Cloud kit , Document , Key-value 등 )
사실 이 문제를 고친 해결책은 아니었지만, 그 과정에서 의심 가는 것들을 고치던 중에 위 내용을 알아냈다.
void SetEntitlementiOS()
{
var file_name = "unity.entitlements";
var proj_path = projectPath;
var proj = new PBXProject();
proj.ReadFromFile(proj_path);
var target_name = PBXProject.GetUnityTargetName();
var target_guid = proj.TargetGuidByName(target_name);
var dst = pathToBuiltProject + "/" + target_name + "/" + file_name;
try
{
File.WriteAllText(dst, entitlements);
proj.AddFile(target_name + "/" + file_name, file_name);
proj.AddBuildProperty(target_guid, "CODE_SIGN_ENTITLEMENTS", target_name + "/" + file_name);
proj.WriteToFile(proj_path);
}
catch (IOException e)
{
Debug.Log("Could not copy entitlements. Probably already exists. " + e);
}
}
private const string entitlements = @"
<?xml version=""1.0"" encoding=""UTF-8""?>
<!DOCTYPE plist PUBLIC ""-//Apple//DTD PLIST 1.0//EN"" ""http://www.apple.com/DTDs/PropertyList-1.0.dtd"">
<plist version=""1.0"">
<dict>
<key>aps-environment</key>
<string>production</string>
<key>com.apple.developer.icloud-container-identifiers</key>
<array>
<string>iCloud.$(CFBundleIdentifier)</string>
</array>
<key>com.apple.developer.icloud-services</key>
<array>
<string>CloudKit</string>
<string>CloudDocuments</string>
</array>
<key>com.apple.developer.ubiquity-container-identifiers</key>
<array>
<string>iCloud.$(CFBundleIdentifier)</string>
</array>
<key>com.apple.developer.ubiquity-kvstore-identifier</key>
<string>$(TeamIdentifierPrefix)$(CFBundleIdentifier)</string>
</dict>
</plist>
";