cocos2d-js打包重簽名

samael發表於2017-02-06

原文地址

問題

遊戲要出包, 由於使用cocos2d-js開發, 所以在釋出遊戲的時候js檔案要編譯成jsc的格式. 如果使用xcode進行Archive那麼需要以下步驟

  1. 對js檔案進行編譯
  2. 修改專案結構中的Resource/src(遊戲程式碼)與script(引擎程式碼), 使之指向jsc的目錄
  3. 打包

這種方式其實對開發很不友好, 因為在釋出之後我們又需要改一遍專案結構進行開發, 而且不能進行自動化的整合.

cocos compile其實可以對js檔案進行編譯並輸出ipa, 之後輸出的ipa包使用iOS App Signer 重簽名. 雖然簽名成功了, 但是在安裝到真機上時會報出CPU型別不符這樣的錯誤

原因

檢視引擎目錄下的

/tools/cocos2d-console/plugins/plugin_compile/project_compile.py

def build_ios(self):
    if not self._platforms.is_ios_active():
        return

    if not cocos.os_is_mac():
        raise cocos.CCPluginError(MultiLanguage.get_string('COMPILE_ERROR_BUILD_ON_MAC'),
                                  cocos.CCPluginError.ERROR_WRONG_ARGS)
    # 這裡
    if self._sign_id is not None:     
        cocos.Logging.info(MultiLanguage.get_string('COMPILE_INFO_IOS_SIGN_FMT', self._sign_id))
        self.use_sdk = 'iphoneos'
    else:
        self.use_sdk = 'iphonesimulator'

... 以下省略 ...
 try:
        cocos.Logging.info(MultiLanguage.get_string('COMPILE_INFO_BUILDING'))

        command = ' '.join([
            "xcodebuild",
            "-project",
            "\"%s\"" % projectPath,
            "-configuration",
            "%s" % 'Debug' if self._mode == 'debug' else 'Release',
            "-target",
            "\"%s\"" % targetName,
            # 這裡
            "%s" % "-arch i386" if self.use_sdk == 'iphonesimulator' else '', 
            "-sdk",
            "%s" % self.use_sdk,
            "CONFIGURATION_BUILD_DIR=\"%s\"" % (output_dir),
            # 這裡
            "%s" % "VALID_ARCHS=\"i386\"" if self.use_sdk == 'iphonesimulator' else ''
            ])
... 以下省略 ...

這裡可以發現, 如果在cocos compile中不使用SIGN_ID時, 生成的其實是讓模擬器使用的i386的包

解決

真正的命令是:

cocos compile -p ios -t TARGET -m release –sign-identity SIGN_ID

之後在會在遊戲專案publish下生成ipa檔案

相關文章