static void SetupXCodeProject(string _buildPath) { string projectPath = PBXProject.GetPBXProjectPath(_buildPath); PBXProject project = new PBXProject(); project.ReadFromString(File.ReadAllText(projectPath)); string targetName = PBXProject.GetUnityTargetName(); string targetGuid = project.TargetGuidByName(targetName); // Move the entitlement file to from root directory to target directory. string entitleFileSource = _buildPath + "/" + entitlementsFileName; string entitleFileDestination = _buildPath + "/" + targetName + "/" + entitlementsFileName; FileUtil.MoveFileOrDirectory(entitleFileSource, entitleFileDestination); project.AddFile(targetName + "/" + entitlementsFileName, entitlementsFileName); project.AddBuildProperty(targetGuid, "HEADER_SEARCH_PATHS", "$(SRCROOT)/NativeFramework"); ProjectCapabilityManager capabilityManager = new ProjectCapabilityManager(projectPath, entitlementsFileName, targetName); capabilityManager.AddBackgroundModes(BackgroundModesOptions.RemoteNotifications); capabilityManager.WriteToFile(); project.AddBuildProperty(targetGuid, "CODE_SIGN_ENTITLEMENTS", targetName + "/" + entitlementsFileName); project.AddCapability(targetGuid, PBXCapabilityType.GameCenter); project.AddCapability(targetGuid, PBXCapabilityType.InAppPurchase); File.WriteAllText(projectPath, project.WriteToString()); }
protected override void Process(BuildTarget buildTarget, string buildPath) { ProjectCapabilityManager capabilities = new ProjectCapabilityManager(PBXProject.GetPBXProjectPath(buildPath), entitlementsPath, PBXProject.GetUnityTargetName()); System.Array.ForEach(modes, delegate(BackgroundModesOptions modesOptions) { capabilities.AddBackgroundModes(modesOptions); }); capabilities.WriteToFile(); }
public void AddBackgroundModesWorks() { SetupTestProject(); ResetGuidGenerator(); var capManager = new ProjectCapabilityManager(PBXProject.GetPBXProjectPath(GetTestOutputPath()), "test.entitlements", PBXProject.GetUnityTargetName()); capManager.AddBackgroundModes(BackgroundModesOptions.BackgroundFetch); capManager.WriteToFile(); TestOutputProject(capManager.project, "add_backgroundmodes.pbxproj"); TestOutput("Info.plist", "add_backgroundmodes.plist"); }
private static void AddCapability(string projPath) { string targetName = PBXProject.GetUnityTargetName(); var postfix = ReleaseConfig.iOS.GetValue(ReleaseConfig.iOS.KeyDefine.BundlePostfix); ProjectCapabilityManager capManager = new ProjectCapabilityManager(projPath, postfix + ".entitlements", targetName); capManager.AddBackgroundModes(BackgroundModesOptions.BackgroundFetch | BackgroundModesOptions.RemoteNotifications); capManager.AddPushNotifications(true); capManager.AddInAppPurchase(); capManager.WriteToFile(); }
private static void AddPushCapability(PBXProject project, string path, string targetGUID, string targetName) { var projectPath = PBXProject.GetPBXProjectPath(path); project.AddCapability(targetGUID, PBXCapabilityType.PushNotifications); project.AddCapability(targetGUID, PBXCapabilityType.BackgroundModes); var entitlementsPath = GetEntitlementsPath(path, project, targetGUID, targetName); // NOTE: ProjectCapabilityManager's 4th constructor param requires Unity 2019.3+ var projCapability = new ProjectCapabilityManager(projectPath, entitlementsPath, targetName); projCapability.AddBackgroundModes(BackgroundModesOptions.RemoteNotifications); projCapability.WriteToFile(); }
/// <summary> /// Add the required capabilities and entitlements for OneSignal /// </summary> private void AddProjectCapabilities() { var targetGuid = _project.GetMainTargetGuid(); var targetName = _project.GetMainTargetName(); var entitlementsPath = GetEntitlementsPath(targetGuid, targetName); var projCapability = new ProjectCapabilityManager(_projectPath, entitlementsPath, targetName); projCapability.AddBackgroundModes(BackgroundModesOptions.RemoteNotifications); projCapability.AddPushNotifications(false); projCapability.AddAppGroups(new[] { _appGroupName }); projCapability.WriteToFile(); }
private static void OnPostProcessBuild(BuildTarget buildTarget, string path) { if (buildTarget == BuildTarget.iOS) { _path = path; AddFramework(); AddInfoPlist(); var projCapability = new ProjectCapabilityManager(_projPath, "Unity-iPhone/mmk.entitlements", "Unity-iPhone"); projCapability.AddBackgroundModes(BackgroundModesOptions.RemoteNotifications); projCapability.AddPushNotifications(Debug.isDebugBuild); projCapability.WriteToFile(); } }
private static void SetCapabilitiesSimple(string buildPath, string entitlementsName) { string pbxPath = PBXProject.GetPBXProjectPath(buildPath); PBXProject pbxProject = new PBXProject(); pbxProject.ReadFromFile(pbxPath); var target_name = PBXProject.GetUnityTargetName(); // var target_guid = pbxProject.TargetGuidByName(target_name); var capManager = new ProjectCapabilityManager(pbxPath, entitlementsName, target_name); capManager.AddGameCenter(); capManager.AddInAppPurchase(); bool developmentMode = true; // Development mode should be used while testing your application outside of the App Store. capManager.AddPushNotifications(developmentMode); capManager.AddBackgroundModes(BackgroundModesOptions.RemoteNotifications); //todo: Problem is: is not setting up remote notification flag capManager.WriteToFile(); // will update Info List, Will update Capability Entitlements }
public static void OnPostprocessBuildHandler(BuildTarget buildTarget, string path) { var projPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj"; var proj = new PBXProject(); proj.ReadFromString(File.ReadAllText(projPath)); var target = proj.GetUnityMainTargetGuid(); proj.AddFrameworkToProject(target, "UserNotifications.framework", true); proj.AddCapability(target, PBXCapabilityType.PushNotifications); if (Directory.Exists(ICONS_PROJECT_PATH)) { foreach (var file in Directory.GetFiles(ICONS_PROJECT_PATH, "*.png", SearchOption.AllDirectories)) { var dstLocalPath = Path.GetFileName(file); var resourcesBuildPhase = proj.GetResourcesBuildPhaseByTarget(target); var fileRef = proj.AddFile(dstLocalPath, dstLocalPath); File.Copy(file, Path.Combine(path, dstLocalPath), true); proj.AddFileToBuild(target, fileRef); } } File.WriteAllText(projPath, proj.WriteToString()); var capabilities = new ProjectCapabilityManager(PBXProject.GetPBXProjectPath(path), "app.entitlements", "Unity-iPhone"); capabilities.AddPushNotifications(true); capabilities.AddBackgroundModes(BackgroundModesOptions.RemoteNotifications); capabilities.WriteToFile(); }
private static void AddCapabilities(PBXProject project, string pathToBuildProject) { string targetGuid = project.GetUnityMainTargetGuid(); string relativeEntitlementsFilePath = ProductName + "." + "entitlements"; ProjectCapabilityManager manager = new ProjectCapabilityManager(pathToBuildProject + "/Unity-iPhone.xcodeproj/project.pbxproj", relativeEntitlementsFilePath, "Unity-iPhone"); // 1. game center manager.AddGameCenter(); if (project.ContainsFramework(targetGuid, "GameKit.framework") == false) { Debug.Log("Add GameKit.framework"); project.AddFrameworkToProject(targetGuid, "GameKit.framework", true); } // 2. purchase manager.AddInAppPurchase(); if (project.ContainsFramework(targetGuid, "StoreKit.framework") == false) { Debug.Log("Add StoreKit.framework"); project.AddFrameworkToProject(targetGuid, "StoreKit.framework", true); } // 3. remote push manager.AddPushNotifications(true); project.AddFile(relativeEntitlementsFilePath, relativeEntitlementsFilePath); project.AddBuildProperty(targetGuid, "CODE_SIGN_ENTITLEMENTS", relativeEntitlementsFilePath); // 4. background manager.AddBackgroundModes(BackgroundModesOptions.RemoteNotifications); // 4. domains //string[] domains = { "xxx"}; //manager.AddAssociatedDomains(domains); manager.WriteToFile(); }
static void AddCapabilities(PBXProject proj, string targetGuid, ProjectCapabilityManager capManager) { var capability = ISD_Settings.Instance.Capability; if (capability.iCloud.Enabled) { if (capability.iCloud.iCloudDocument || capability.iCloud.customContainers.Count > 0) { capManager.AddiCloud(capability.iCloud.keyValueStorage, capability.iCloud.iCloudDocument, capability.iCloud.customContainers.ToArray()); } else { capManager.AddiCloud(capability.iCloud.keyValueStorage, false, null); } } if (capability.PushNotifications.Enabled) { capManager.AddPushNotifications(capability.PushNotifications.development); } if (capability.GameCenter.Enabled) { capManager.AddGameCenter(); } if (capability.Wallet.Enabled) { capManager.AddWallet(capability.Wallet.passSubset.ToArray()); } if (capability.Siri.Enabled) { capManager.AddSiri(); } if (capability.ApplePay.Enabled) { capManager.AddApplePay(capability.ApplePay.merchants.ToArray()); } if (capability.InAppPurchase.Enabled) { capManager.AddInAppPurchase(); } if (capability.Maps.Enabled) { var options = MapsOptions.None; foreach (var opt in capability.Maps.options) { MapsOptions opt2 = (MapsOptions)opt; options |= opt2; } capManager.AddMaps(options); } if (capability.PersonalVPN.Enabled) { capManager.AddPersonalVPN(); } if (capability.BackgroundModes.Enabled) { var options = BackgroundModesOptions.None; foreach (var opt in capability.BackgroundModes.options) { BackgroundModesOptions opt2 = (BackgroundModesOptions)opt; options |= opt2; } capManager.AddBackgroundModes(options); } if (capability.InterAppAudio.Enabled) { capManager.AddInterAppAudio(); } if (capability.KeychainSharing.Enabled) { capManager.AddKeychainSharing(capability.KeychainSharing.accessGroups.ToArray()); } if (capability.AssociatedDomains.Enabled) { capManager.AddAssociatedDomains(capability.AssociatedDomains.domains.ToArray()); } if (capability.AppGroups.Enabled) { capManager.AddAppGroups(capability.AppGroups.groups.ToArray()); } if (capability.DataProtection.Enabled) { capManager.AddDataProtection(); } if (capability.HomeKit.Enabled) { capManager.AddHomeKit(); } if (capability.HealthKit.Enabled) { capManager.AddHealthKit(); } if (capability.WirelessAccessoryConfiguration.Enabled) { capManager.AddWirelessAccessoryConfiguration(); } /* * * * if (ISD_Settings.Instance.Capabilities.Count == 0) { * return; * } * * * foreach (var cap in ISD_Settings.Instance.Capabilities) { * switch(cap.CapabilityType) { * * * case ISD_CapabilityType.InAppPurchase: * capManager.AddInAppPurchase(); * break; * case ISD_CapabilityType.GameCenter: * capManager.AddGameCenter(); * break; * case ISD_CapabilityType.PushNotifications: * var pushSettings = ISD_Settings.Instance.PushNotificationsCapabilitySettings; * capManager.AddPushNotifications(pushSettings.Development); * break; * * default: * var capability = ISD_PBXCapabilityTypeUtility.ToPBXCapability(cap.CapabilityType); * string entitlementsFilePath = null; * if(!string.IsNullOrEmpty(cap.EntitlementsFilePath)) { * entitlementsFilePath = cap.EntitlementsFilePath; * } * * * proj.AddCapability(targetGuid, capability, entitlementsFilePath, cap.AddOptionalFramework); * break; * } * } */ }
private static void PostProcessXCodeProject(string path) { Debug.Log("Post Process X Code Project"); var settings = GetBuildSettings(); if (settings.EnablePostProcessXCodeProject == false) { Debug.Log("[HovelHouse.CloudKit] skipping post process build step..."); return; } Debug.Log("[HovelHouse.CloudKit] " + path); // When building a MacOS xCode project, unity's GetPBXProjectPath // returns the wrong pbxproject path #if UNITY_STANDALONE_OSX && UNITY_2019_3_OR_NEWER string pbxPath = Path.Combine(path, "./project.pbxproj"); #else string pbxPath = PBXProject.GetPBXProjectPath(path); #endif var pbxProject = new PBXProject(); pbxProject.ReadFromFile(pbxPath); var name = PlayerSettings.applicationIdentifier.Split('.').Last(); #if UNITY_2019_3_OR_NEWER // On MacOS GetUnityManTargetGuid returns null - so we have to look it up by name // but honestly, doesn't even look like the ProjectCapabilityManager is doing anything // on MacOS #if UNITY_STANDALONE_OSX string targetGUID = pbxProject.TargetGuidByName(name); string entitlementsFilename = name + "/" + name + ".entitlements"; #else string targetGUID = pbxProject.GetUnityMainTargetGuid(); string entitlementsFilename = name + ".entitlements"; #endif if (string.IsNullOrEmpty(targetGUID)) { throw new BuildFailedException("unable to find the GUID of the build target"); } ProjectCapabilityManager projCapability = new ProjectCapabilityManager( pbxPath, entitlementsFilename, null, targetGUID); #else string entitlementsFilename = name + ".entitlements"; ProjectCapabilityManager projCapability = new ProjectCapabilityManager( pbxPath, entitlementsFilename, PBXProject.GetUnityTargetName()); #endif projCapability.AddiCloud( settings.EnableKeyVaueStorage, settings.EnableDocumentStorage, settings.EnableCloudKit, settings.AddDefaultContainers, settings.CustomContainers); if (settings.EnableCloudKitNotifications) { projCapability.AddPushNotifications(settings.apsEnvironment == APSEnvironment.Development); projCapability.AddBackgroundModes((BackgroundModesOptions)settings.BackgroundModes); } projCapability.WriteToFile(); }
private static void AddCapabilities(ProjectCapabilityManager capManager) { var capability = ISD_Settings.Instance.Capability; if (capability.iCloud.Enabled) { if (capability.iCloud.iCloudDocument || capability.iCloud.customContainers.Count > 0) { capManager.AddiCloud(capability.iCloud.keyValueStorage, capability.iCloud.iCloudDocument, capability.iCloud.customContainers.ToArray()); } else { capManager.AddiCloud(capability.iCloud.keyValueStorage, false, null); } } if (capability.PushNotifications.Enabled) { capManager.AddPushNotifications(capability.PushNotifications.development); } if (capability.GameCenter.Enabled) { capManager.AddGameCenter(); } if (capability.Wallet.Enabled) { capManager.AddWallet(capability.Wallet.passSubset.ToArray()); } if (capability.Siri.Enabled) { capManager.AddSiri(); } if (capability.ApplePay.Enabled) { capManager.AddApplePay(capability.ApplePay.merchants.ToArray()); } if (capability.InAppPurchase.Enabled) { capManager.AddInAppPurchase(); } if (capability.Maps.Enabled) { var options = MapsOptions.None; foreach (var opt in capability.Maps.options) { MapsOptions opt2 = (MapsOptions)opt; options |= opt2; } capManager.AddMaps(options); } if (capability.PersonalVPN.Enabled) { capManager.AddPersonalVPN(); } if (capability.BackgroundModes.Enabled) { var options = BackgroundModesOptions.None; foreach (var opt in capability.BackgroundModes.options) { BackgroundModesOptions opt2 = (BackgroundModesOptions)opt; options |= opt2; } capManager.AddBackgroundModes(options); } if (capability.InterAppAudio.Enabled) { capManager.AddInterAppAudio(); } if (capability.KeychainSharing.Enabled) { capManager.AddKeychainSharing(capability.KeychainSharing.accessGroups.ToArray()); } if (capability.AssociatedDomains.Enabled) { capManager.AddAssociatedDomains(capability.AssociatedDomains.domains.ToArray()); } if (capability.AppGroups.Enabled) { capManager.AddAppGroups(capability.AppGroups.groups.ToArray()); } if (capability.DataProtection.Enabled) { capManager.AddDataProtection(); } if (capability.HomeKit.Enabled) { capManager.AddHomeKit(); } if (capability.HealthKit.Enabled) { capManager.AddHealthKit(); } if (capability.WirelessAccessoryConfiguration.Enabled) { capManager.AddWirelessAccessoryConfiguration(); } }
public static void OnPostprocessBuild(BuildTarget build_target, string path) { if (build_target != BuildTarget.iOS) return; string proj_path = PBXProject.GetPBXProjectPath(path); PBXProject proj = new PBXProject(); proj.ReadFromString(File.ReadAllText(proj_path)); // 获取当前项目名字 string target = proj.TargetGuidByName(PBXProject.GetUnityTargetName()); // 对所有的编译配置设置选项 proj.SetBuildProperty(target, "ENABLE_BITCODE", "NO"); // 添加依赖库 proj.AddFrameworkToProject(target, "libc++.dylib", false); proj.AddFrameworkToProject(target, "libsqlite3.dylib", false); proj.AddFrameworkToProject(target, "libz.dylib", false); proj.AddFrameworkToProject(target, "libc++.tbd", false); proj.AddFrameworkToProject(target, "libicucore.tbd", false); proj.AddFrameworkToProject(target, "libsqlite3.tbd", false); proj.AddFrameworkToProject(target, "libz.tbd", false); proj.AddFrameworkToProject(target, "libz.1.2.5.tbd", false); proj.AddFrameworkToProject(target, "Accelerate.framework", false); proj.AddFrameworkToProject(target, "AudioToolbox.framework", false); proj.AddFrameworkToProject(target, "AVFoundation.framework", false); proj.AddFrameworkToProject(target, "CFNetwork.framework", false); proj.AddFrameworkToProject(target, "CoreLocation.framework", false); proj.AddFrameworkToProject(target, "CoreMedia.framework", false); proj.AddFrameworkToProject(target, "CoreMotion.framework", false); proj.AddFrameworkToProject(target, "CoreTelephony.framework", false); proj.AddFrameworkToProject(target, "CoreVideo.framework", false); proj.AddFrameworkToProject(target, "JavaScriptCore.framework", true);// 设置为Optional proj.AddFrameworkToProject(target, "MessageUI.framework", false); proj.AddFrameworkToProject(target, "MobileCoreServices.framework", false); proj.AddFrameworkToProject(target, "PushKit.framework", true); proj.AddFrameworkToProject(target, "Security.framework", false);// 用于存储keychain proj.AddFrameworkToProject(target, "SystemConfiguration.framework", false);// 用于读取异常发生时的系统信息 proj.AddFrameworkToProject(target, "UserNotifications.framework", true); // 设置签名 //proj.SetBuildProperty (target, "CODE_SIGN_IDENTITY", "iPhone Distribution: _______________"); //proj.SetBuildProperty (target, "PROVISIONING_PROFILE", "********-****-****-****-************"); //string debugConfig = proj.BuildConfigByName(target, "Debug"); //string releaseConfig = proj.BuildConfigByName(target, "Release"); //proj.SetBuildPropertyForConfig(debugConfig, "PROVISIONING_PROFILE", "证书"); //proj.SetBuildPropertyForConfig(releaseConfig, "PROVISIONING_PROFILE", "证书"); //proj.SetBuildPropertyForConfig(debugConfig, "PROVISIONING_PROFILE(Deprecated)", "证书"); //proj.SetBuildPropertyForConfig(releaseConfig, "PROVISIONING_PROFILE(Deprecated)", "证书"); //proj.SetBuildPropertyForConfig(debugConfig, "CODE_SIGN_IDENTITY", "自己的证书"); //proj.SetBuildPropertyForConfig(releaseConfig, "CODE_SIGN_IDENTITY", "自己的证书"); //proj.SetTeamId(target, "Team ID(自己的teamid)"); //proj.AddCapability(target, PBXCapabilityType.AssociatedDomains); // 保存工程 proj.WriteToFile(proj_path); ProjectCapabilityManager proj_capability_mgr = new ProjectCapabilityManager(proj_path, "KingNative.entitlements", PBXProject.GetUnityTargetName()); proj_capability_mgr.AddAssociatedDomains(new string[] { "applinks:znc4d4.openinstall.io" });// OpenInstall proj_capability_mgr.AddPushNotifications(false); proj_capability_mgr.AddBackgroundModes(BackgroundModesOptions.RemoteNotifications); proj_capability_mgr.WriteToFile(); // 修改plist string plist_path = path + "/Info.plist"; PlistDocument plist = new PlistDocument(); plist.ReadFromString(File.ReadAllText(plist_path)); PlistElementDict root_dict = plist.root; root_dict.SetString("com.openinstall.APP_KEY", "znc4d4");// OpenInstall // NativeToolkit root_dict.SetString("NSPhotoLibraryUsageDescription", "Requires access to the Photo Library"); root_dict.SetString("NSPhotoLibraryAddUsageDescription", "Requires access to the Photo Library"); root_dict.SetString("NSCameraUsageDescription", "Requires access to the Camera"); root_dict.SetString("NSContactsUsageDescription", "Requires access to Contacts"); root_dict.SetString("NSLocationAlwaysUsageDescription", "Requires access to Location"); root_dict.SetString("NSLocationWhenInUseUsageDescription", "Requires access to Location"); root_dict.SetString("NSLocationAlwaysAndWhenInUseUsageDescription", "Requires access to Location"); // 保存plist plist.WriteToFile(plist_path); #endif }