美文网首页
Unity导出已配置好的Xcode工程

Unity导出已配置好的Xcode工程

作者: Joshua520 | 来源:发表于2020-06-22 17:05 被阅读0次

    在做完Xcode工程脚本化构建后Xcodeproj工程配置脚本化,领导提出直接在unity工程配置,导出就可以直接运行,不必再接入Vigame的SDK。

    在一番调研后,发现Unity自带的Xcode插件就可以实现这个需求。现记录如下

    入口

    PostProcessBuildAttribute (在Unity编译的最后加入了一个脚本调用的命令,会自动搜索Editor文件夹下的PostprocessBuildPlayer,并进行调用)。

    [PostProcessBuildAttribute]
    public static void OnPostProcessBuild(BuildTarget target, string pathToBuildProject)
    {
    
    }
    

    修改Xcode工程

    1. 打开Xcode工程

    string pbxProjectPath = PBXProject.GetPBXProjectPath( pathToBuildProject );
        // 修改工程设置
        PBXProject pbxProject = new PBXProject();
        pbxProject.ReadFromFile( pbxProjectPath );
    

    2. 修改工程配置

    string target = project.TargetGuidByName(PBXProject.GetUnityTargetName());
    
            //project.SetBuildProperty(target, "CODE_SIGN_IDENTITY", "********");
            //project.SetBuildProperty(target, "PROVISIONING_PROFILE_SPECIFIER", "******");
            //project.SetBuildProperty(target, "DEVELOPMENT_TEAM", "******");
    
            //project.SetBuildProperty(target, "CODE_SIGNING_STYLE", "MANUAL");
    
    
            project.SetBuildProperty(target, "ENABLE_BITCODE", "NO");
            // 添加flag
            project.AddBuildProperty(target, "OTHER_LDFLAGS", "-ObjC");
    

    3. 添加系统库

    string[] frameworks =
            {
                "libz.dylib",
                "libz.1.1.3.dylib",
                "libsqlite3.dylib",
                "libxml2.dylib",
                "libc++.dylib",
                "libstdc++.dylib",
    
                "CoreTelephony.framework",
                "SystemConfiguration.framework",
                "UIKit.framework",
                "Foundation.framework",
                "CoreGraphics.framework",
                "MobileCoreServices.framework",
                "StoreKit.framework",
                "CFNetwork.framework",
                "CoreData.framework",
                "Security.framework",
                "CoreLocation.framework",
                "ImageIO.framework",
                "CoreText.framework",
                "QuartzCore.framework",
                "AdSupport.framework",
                "Accelerate.framework",
                "CoreImage.framework",
                "SafariServices.framework",
                "Social.framework",
                "JavaScriptCore.framework",
                "AssetsLibrary.framework",
                "MediaPlayer.framework",
                "AddressBook.framework",
                "CoreMotion.framework",
                "AVFoundation.framework",
                "MessageUI.framework",
                "EventKit.framework",
                "EventKitUI.framework",
                "CoreAudio.framework",
            };
    
            foreach (var framework in frameworks)
            {
                project.AddFrameworkToProject(target, framework, false);
            }
    

    4. 添加三方库

    以我们自己的SDK为例

     // Vigame
            project.AddBuildProperty(target, "LIBRARY_SEARCH_PATHS", "$(PROJECT_DIR)/Libraries/Wb/Vigame");
            project.AddBuildProperty(target, "HEADER_SEARCH_PATHS", "$(SRCROOT)/Libraries/Wb/Vigame/deps/curl/include/ios");
            project.AddBuildProperty(target, "HEADER_SEARCH_PATHS", "$(SRCROOT)/Libraries/Wb/Vigame/deps/openssl/include/ios");
            project.AddBuildProperty(target, "HEADER_SEARCH_PATHS", "$(SRCROOT)/Libraries/Wb/Vigame/deps/boost/include");
            project.AddBuildProperty(target, "HEADER_SEARCH_PATHS", "$(SRCROOT)/Libraries/Wb/Vigame/deps/zlib/include/linux");
            project.AddBuildProperty(target, "HEADER_SEARCH_PATHS", "$(SRCROOT)/Libraries/Wb/Vigame/include");
    

    4. 修改plist文件

     PlistElementArray urlArray = null;
            if (!rootDict.values.ContainsKey("CFBundleURLTypes"))
                urlArray = rootDict.CreateArray("CFBundleURLTypes");
            else
                urlArray = rootDict.values["CFBundleURLTypes"].AsArray();
            var urlTypeDict = urlArray.AddDict();
            urlTypeDict.SetString("CFBundleTypeRole", "Editor");
            urlTypeDict.SetString("CFBundleURLName", "weixin");
            var urlScheme = urlTypeDict.CreateArray("CFBundleURLSchemes");
            urlScheme.AddString("wx12333444");
    
            if (!rootDict.values.ContainsKey("LSApplicationQueriesSchemes"))
                urlArray = rootDict.CreateArray("LSApplicationQueriesSchemes");
            else
                urlArray = rootDict.values["LSApplicationQueriesSchemes"].AsArray();
          
            urlArray.AddString("weixin");
            urlArray.AddString("wechat");
    
            rootDict.SetString("NSCameraUsageDescription", "");
            rootDict.SetString("NSPhotoLibraryUsageDescription", "");
    
    
            if (rootDict.values.ContainsKey("NSAppTransportSecurity"))
                rootDict.values.Remove("NSAppTransportSecurity");
            PlistElementDict urlDict = rootDict.CreateDict("NSAppTransportSecurity");
            urlDict.SetBoolean("NSAllowsArbitraryLoads", true);
    

    最后由于我们c++库中有.hpp文件,导出工程时会丢失,导致工程运行报错,故暂时未用此方式。

    'boost/property_tree/xml_parser.hpp' file not found
    

    参考:

    配置Xcode工程

    PBXProject.AddFile Code Examples

    配置Xcode工程

    相关文章

      网友评论

          本文标题:Unity导出已配置好的Xcode工程

          本文链接:https://www.haomeiwen.com/subject/pynxfktx.html