CFBundleIdentifier在上传使用Electron开发并使用电子构建器构建的macOS应用程序时发生冲突

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CFBundleIdentifier在上传使用Electron开发并使用电子构建器构建的macOS应用程序时发生冲突相关的知识,希望对你有一定的参考价值。

我目前正在开发一个Electron应用程序,我能够为macOS操作系统生成.app.pkg。虽然我可以从生成的.app运行它,但当我尝试上传.pkg(mas)时,我在AppStore Connect上收到以下错误:

CFBundleIdentifier Collision - 
The Info.plist CFBundleIdentifier value 'org.phantomjs' of 'phantomjs'
is already in use by another application.

我已经尝试将Electron更新到最新的稳定版本(2.0.9),并将电子生成器更新到最新版本(20.28.4)。我试图在生成的.app中搜索org.phantomjs字符串,我无法找到带有该Bundle Identifier的Info.plist

在这里我附上我的package.json以防它有用:

{
  "name": "myAppName",
  "version": "0.0.1",
  "author": "Me <me@mymail.com>",
  "description": "My Description",
  "license": "MIT",
  "main": "./dist/electron/main.js",
  "repository": {
    "type": "git",
    "url": "git+https://github.com/****.git"
  },
  "scripts": {
    "build": "node .electron-vue/build.js && electron-builder",
    "build:dir": "node .electron-vue/build.js && electron-builder --dir",
    "build:clean": "cross-env BUILD_TARGET=clean node .electron-vue/build.js",
    "build:web": "cross-env BUILD_TARGET=web node .electron-vue/build.js",
    "dev": "node .electron-vue/dev-runner.js",
    "lint": "eslint --ext .js,.vue -f ./node_modules/eslint-friendly-formatter src",
    "lint:fix": "eslint --ext .js,.vue -f ./node_modules/eslint-friendly-formatter --fix src",
    "pack": "npm run pack:main && npm run pack:renderer",
    "pack:main": "cross-env NODE_ENV=production webpack --progress --colors --config .electron-vue/webpack.main.config.js",
    "pack:renderer": "cross-env NODE_ENV=production webpack --progress --colors --config .electron-vue/webpack.renderer.config.js",
    "postinstall": "npm run lint:fix"
  },
  "build": {
    "productName": "myAppName",
    "appId": "this.is.a.real.appid",
    "buildVersion": "5",
    "directories": {
      "output": "build"
    },
    "files": [
      "dist/electron/**/*"
    ],
    "dmg": {
      "contents": [
        {
          "x": 410,
          "y": 150,
          "type": "link",
          "path": "/Applications"
        },
        {
          "x": 130,
          "y": 150,
          "type": "file"
        }
      ]
    },
    "mac": {
      "icon": "build/icons/icon.icns",
      "category": "public.app-category.developer-tools",
      "target": [
        {
          "target": "mas"
        }
      ]
    },
    "mas": {
      "entitlements": "build/entitlements.mas.plist",
      "entitlementsInherit": "build/entitlements.mas.inherit.plist",
      "icon": "build/icons/icon.icns",
      "category": "public.app-category.developer-tools"
    },
    "win": {
      "icon": "build/icons/icon.ico",
      "target": [
        {
          "target": "nsis"
        },
        {
          "target": "appx"
        }
      ]
    },
    "linux": {
      "icon": "build/icons"
    },
    "fileAssociations": [
      {
        "ext": "myExtension",
        "name": "My Project",
        "description": "File containing a My Project.",
        "icon": "build/icons/Project.icns",
        "role": "Editor",
        "isPackage": true
      }
    ],
    "copyright": "Copyright © 2018 Me"
  },
  "dependencies": {
    "@appshuttle.io/bell": "0.0.12",
    "@appshuttle.io/pollock": "0.0.28",
    "@appshuttle.io/turing": "0.0.16",
    "@fortawesome/fontawesome-svg-core": "^1.2.2",
    "@fortawesome/free-brands-svg-icons": "^5.0.13",
    "@fortawesome/free-regular-svg-icons": "^5.0.13",
    "@fortawesome/free-solid-svg-icons": "^5.0.13",
    "@fortawesome/vue-fontawesome": "0.1.1",
    "axios": "^0.16.1",
    "electron-updater": "^3.0.3",
    "email-validator": "^2.0.4",
    "grunt": "^1.0.3",
    "nedb": "^1.8.0",
    "p5": "^0.6.1",
    "path": "^0.12.7",
    "spectre.css": "^0.5.3",
    "vue": "^2.3.3",
    "vue-color": "^2.4.6",
    "vue-electron": "^1.0.6",
    "vue-router": "^2.5.3",
    "vuedraggable": "^2.16.0",
    "vuex": "^2.3.1"
  },
  "devDependencies": {
    "babel-core": "^6.26.3",
    "babel-eslint": "^7.2.3",
    "babel-loader": "^7.1.5",
    "babel-plugin-transform-runtime": "^6.23.0",
    "babel-preset-env": "^1.7.0",
    "babel-preset-stage-0": "^6.24.1",
    "babel-register": "^6.24.1",
    "babili-webpack-plugin": "^0.1.2",
    "cfonts": "^1.2.0",
    "chalk": "^2.4.1",
    "copy-webpack-plugin": "^4.5.2",
    "cross-env": "^5.2.0",
    "css-loader": "^0.28.11",
    "del": "^3.0.0",
    "devtron": "^1.4.0",
    "electron": "^2.0.0",
    "electron-builder": "20.28.4",
    "electron-debug": "^2.0.0",
    "electron-devtools-installer": "^2.2.4",
    "eslint": "^4.19.1",
    "eslint-config-standard": "^10.2.1",
    "eslint-friendly-formatter": "^3.0.0",
    "eslint-loader": "^1.9.0",
    "eslint-plugin-html": "^3.1.1",
    "eslint-plugin-import": "^2.13.0",
    "eslint-plugin-node": "^5.1.1",
    "eslint-plugin-promise": "^3.8.0",
    "eslint-plugin-standard": "^3.1.0",
    "extract-text-webpack-plugin": "^3.0.0",
    "file-loader": "^0.11.2",
    "html-webpack-plugin": "^2.30.1",
    "mini-css-extract-plugin": "^0.4.1",
    "multispinner": "^0.2.1",
    "node-loader": "^0.6.0",
    "node-sass": "^4.9.2",
    "sass-loader": "^6.0.7",
    "style-loader": "^0.18.2",
    "url-loader": "^0.5.9",
    "vue-html-loader": "^1.2.4",
    "vue-loader": "^15.4.0",
    "vue-style-loader": "^3.0.1",
    "vue-template-compiler": "^2.4.2",
    "webpack": "^3.12.0",
    "webpack-dev-server": "^2.7.1",
    "webpack-hot-middleware": "^2.22.3"
  }
}

非常感谢提前!

答案

找到了一个解决方案(正如@countravioli在这个Github Issue中所提到的):

我发现有一个名为app.asar.unpacked的文件,一旦创建并签名了.pkg,就会包含多个Bundle Identifier。在.app中删除此文件然后创建.pkg对我没有用,所以我使用了Github问题中提出的Build Hook。防止将文件插入.pkg文件。为此,我在其余内容的末尾为我的package.json的构建部分添加了一个钩子:

package.json
{ //package.json Root ...
   build: {
      // build content ...
      "afterPack": "./afterPack.js"
   }
}

然后在我的afterPack.js所在的文件夹中创建了一个名为package.json的文件,其中包含以下内容:

const fs = require('fs');
const fse = require('fs-extra');
const path = require('path');
module.exports = function (params) {
    const unpackFile = path.join(params.appOutDir, 'YOUR_APP_NAME.app/Contents/Resources/app.asar.unpacked');
    console.log('EXISTS?', fs.existsSync(unpackFile));
    console.log("REMOVE", unpackFile);
    fse.removeSync(unpackFile);
};

我能够毫无问题地将软件包上传到AppStore Connect。

以上是关于CFBundleIdentifier在上传使用Electron开发并使用电子构建器构建的macOS应用程序时发生冲突的主要内容,如果未能解决你的问题,请参考以下文章

带有 Apple Watch 的 Cordova 应用程序无法在 Apple Store 上上传(有多个包含 CFBundleIdentifier 冲突的捆绑包)

iOS 验证存档因 CFBundleIdentifier Collision & Invalid Bundle 而失败

iOS - watchOS App ITMS-90806:CFBundleIdentifier 冲突 Alamofire

无法在导致 CFBundleIdentifier 冲突的 JRE 中编辑嵌入的 info.plist

iTunes Store 操作失败。您必须为此请求提供 CFBundleIdentifier

在提供的路径中找不到应用程序包...“:CFBundleIdentifier”,不存在