美文网首页iOS122-移动混合开发研究院
简陋的swift carthage copy-framework

简陋的swift carthage copy-framework

作者: ios122 | 来源:发表于2018-01-14 23:41 被阅读24次

    在看 carthage 时,其中需要配置一个 copy-frameworks 脚本,此脚本特殊的地方,需要手动填写 Input Files 和 Output Files.一个一个填写,很糟心~

    观察了下,对应修改的是 xxx.xcodeproj/project.pbxproj 中这个文本文件的特定位置的字段,类似于:

    /* Begin PBXShellScriptBuildPhase section */
            750D68EC2000817C006235CD /* ShellScript */ = {
                isa = PBXShellScriptBuildPhase;
                buildActionMask = 2147483647;
                files = (
                );
                inputPaths = (
                    "$(SRCROOT)/Carthage/Build/iOS/Alamofire.framework",
                );
                outputPaths = (
                    "$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Alamofire.framework",
                );
                runOnlyForDeploymentPostprocessing = 0;
                shellPath = /bin/sh;
                shellScript = "/usr/local/bin/carthage copy-frameworks";
            };
    /* End PBXShellScriptBuildPhase section */
    

    所以,就像着,自动生成 inputPathsoutputPaths ,然后直接手动修改 project.pbxproj 文件,试了下,可行.简单 nodejs 脚本如下:

    var glob = require("glob")
    
    // options is optional
    let frameWorks = glob.sync("**/*.framework", {
      cwd: "path/to/Carthage/Build/iOS/",
    })
    
    console.log(frameWorks)
    
    let inputPaths = frameWorks.filter(p=>!p.includes("test")&&!p.includes("Test")).map((p)=>`$(SRCROOT)/Carthage/Build/iOS/${p}`)
    
    let outputPaths = frameWorks.filter(p=>!p.includes("test")&&!p.includes("Test")).map((p)=>`$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/${p}`)
    
    console.log(inputPaths)
    console.log(outputPaths)
    
    /*
    控制台的单引号,要手动全局替换为双引号.
    [ "$(SRCROOT)/Carthage/Build/iOS/Alamofire.framework",
      "$(SRCROOT)/Carthage/Build/iOS/Bond.framework",
      "$(SRCROOT)/Carthage/Build/iOS/Differ.framework",
      "$(SRCROOT)/Carthage/Build/iOS/HEXColor.framework",
      "$(SRCROOT)/Carthage/Build/iOS/KeychainAccess.framework",
      "$(SRCROOT)/Carthage/Build/iOS/Kingfisher.framework",
      "$(SRCROOT)/Carthage/Build/iOS/Lottie.framework",
      "$(SRCROOT)/Carthage/Build/iOS/Moya.framework",
      "$(SRCROOT)/Carthage/Build/iOS/ObjectMapper.framework",
      "$(SRCROOT)/Carthage/Build/iOS/PKHUD.framework",
      "$(SRCROOT)/Carthage/Build/iOS/ReactiveKit.framework",
      "$(SRCROOT)/Carthage/Build/iOS/ReactiveMoya.framework",
      "$(SRCROOT)/Carthage/Build/iOS/ReactiveSwift.framework",
      "$(SRCROOT)/Carthage/Build/iOS/Realm.framework",
      "$(SRCROOT)/Carthage/Build/iOS/RealmSwift.framework",
      "$(SRCROOT)/Carthage/Build/iOS/Result.framework",
      "$(SRCROOT)/Carthage/Build/iOS/RxBlocking.framework",
      "$(SRCROOT)/Carthage/Build/iOS/RxCocoa.framework",
      "$(SRCROOT)/Carthage/Build/iOS/RxMoya.framework",
      "$(SRCROOT)/Carthage/Build/iOS/RxSwift.framework",
      "$(SRCROOT)/Carthage/Build/iOS/SideMenu.framework",
      "$(SRCROOT)/Carthage/Build/iOS/SnapKit.framework",
      "$(SRCROOT)/Carthage/Build/iOS/SwiftyTimer.framework" ]
    [ "$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Alamofire.framework",
      "$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Bond.framework",
      "$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Differ.framework",
      "$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/HEXColor.framework",
      "$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/KeychainAccess.framework",
      "$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Kingfisher.framework",
      "$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Lottie.framework",
      "$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Moya.framework",
      "$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/ObjectMapper.framework",
      "$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/PKHUD.framework",
      "$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/ReactiveKit.framework",
      "$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/ReactiveMoya.framework",
      "$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/ReactiveSwift.framework",
      "$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Realm.framework",
      "$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/RealmSwift.framework",
      "$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Result.framework",
      "$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/RxBlocking.framework",
      "$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/RxCocoa.framework",
      "$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/RxMoya.framework",
      "$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/RxSwift.framework",
      "$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/SideMenu.framework",
      "$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/SnapKit.framework",
      "$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/SwiftyTimer.framework" ]
    */
    

    参考:

    相关文章

      网友评论

        本文标题:简陋的swift carthage copy-framework

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