|
1 |
| -using UnityEngine; |
2 | 1 | using UnityEditor;
|
3 |
| -using UnityEditor.Callbacks; |
4 | 2 | using UnityEditor.iOS.Xcode;
|
5 | 3 |
|
6 | 4 | public class PostProcessBuild
|
7 | 5 | {
|
8 |
| - [PostProcessBuildAttribute] |
| 6 | + [UnityEditor.Callbacks.PostProcessBuildAttribute] |
9 | 7 | public static void OnPostprocessBuild(BuildTarget target, string buildPath)
|
10 | 8 | {
|
| 9 | + /* Edit iOS project to enable Unity as a library: |
| 10 | + github.com/Unity-Technologies/uaal-example/blob/master/docs/ios.md */ |
11 | 11 | if (target == BuildTarget.iOS)
|
12 | 12 | {
|
13 |
| - string pbxPath = PBXProject.GetPBXProjectPath(buildPath); |
14 |
| - PBXProject pbx = new PBXProject(); |
15 |
| - pbx.ReadFromFile(pbxPath); |
| 13 | + // Read project |
| 14 | + string projectPath = PBXProject.GetPBXProjectPath(buildPath); |
| 15 | + PBXProject project = new PBXProject(); |
| 16 | + project.ReadFromFile(projectPath); |
16 | 17 |
|
17 |
| - string dataDirectoryXcodePath = "Data"; |
18 |
| - string pluginHeaderXcodePath = "Libraries/Plugins/iOS/NativeState.h"; |
19 |
| - string modulemapXcodePath = "UnityFramework/UnityFramework.modulemap"; |
20 |
| - string modulemapUnityPath = "Assets/Plugins/iOS/UnityFramework.modulemap"; |
21 |
| - string modulemapDestinationPath = $"{buildPath}/{modulemapXcodePath}"; |
22 |
| - string modulemapBuildPropertyName = "MODULEMAP_FILE"; |
23 |
| - string unityMainTargetGuid = pbx.GetUnityMainTargetGuid(); |
24 |
| - string unityFrameworkTargetGuid = pbx.GetUnityFrameworkTargetGuid(); |
25 |
| - string dataDirectoryGuid = pbx.FindFileGuidByProjectPath(dataDirectoryXcodePath); |
26 |
| - string pluginHeaderGuid = pbx.FindFileGuidByProjectPath(pluginHeaderXcodePath); |
| 18 | + // Get main and framework target guids |
| 19 | + string unityMainTargetGuid = project.GetUnityMainTargetGuid(); |
| 20 | + string unityFrameworkTargetGuid = project.GetUnityFrameworkTargetGuid(); |
27 | 21 |
|
28 |
| - FileUtil.CopyFileOrDirectory(modulemapUnityPath, modulemapDestinationPath); |
29 |
| - pbx.AddFile(modulemapDestinationPath, modulemapXcodePath); |
30 |
| - pbx.AddBuildProperty(unityFrameworkTargetGuid, modulemapBuildPropertyName, modulemapXcodePath); |
31 |
| - pbx.RemoveFileFromBuild(unityMainTargetGuid, dataDirectoryGuid); |
32 |
| - pbx.AddFileToBuild(unityFrameworkTargetGuid, dataDirectoryGuid); |
33 |
| - pbx.AddPublicHeaderToBuild(unityFrameworkTargetGuid, pluginHeaderGuid); |
| 22 | + // Set NativeState plugin header visibility to public |
| 23 | + string pluginHeaderGuid = project.FindFileGuidByProjectPath("Libraries/Plugins/iOS/NativeState.h"); |
| 24 | + project.AddPublicHeaderToBuild(unityFrameworkTargetGuid, pluginHeaderGuid); |
34 | 25 |
|
35 |
| - pbx.WriteToFile(pbxPath); |
| 26 | + // Change data directory target membership to framework only |
| 27 | + string dataDirectoryGuid = project.FindFileGuidByProjectPath("Data"); |
| 28 | + project.RemoveFileFromBuild(unityMainTargetGuid, dataDirectoryGuid); |
| 29 | + project.AddFileToBuild(unityFrameworkTargetGuid, dataDirectoryGuid); |
| 30 | + |
| 31 | + // Include modulemap so Swift can import NativeState plugin |
| 32 | + string modulemapRelativePath = "UnityFramework/UnityFramework.modulemap"; |
| 33 | + string modulemapAbsolutePath = $"{buildPath}/{modulemapRelativePath}"; |
| 34 | + FileUtil.CopyFileOrDirectory("Assets/Plugins/iOS/UnityFramework.modulemap", modulemapAbsolutePath); |
| 35 | + project.AddFile(modulemapAbsolutePath, modulemapRelativePath); |
| 36 | + project.AddBuildProperty(unityFrameworkTargetGuid, "MODULEMAP_FILE", modulemapRelativePath); |
| 37 | + |
| 38 | + // Overwrite project |
| 39 | + project.WriteToFile(projectPath); |
36 | 40 | }
|
37 | 41 | }
|
38 | 42 | }
|
0 commit comments