如何在Xcode改变$(PRODUCT_BUNDLE_IDENTIFIER)?

问题描述 投票:-1回答:1

我建立不同的味道扑应用程序的不同火力地堡环境(开发和生产)。我需要设置为iOS应用开发及生产在Xcode不同束ID。

我使用的方案来配置不同的味道(在生成设置我的每一个配置中添加环境值)。

但是我有变化$(PRODUCT_BUNDLE_IDENTIFIER)大问题。我需要后缀.development添加到正常的应用程序ID为开发应用程序ID。

我试着跟随this method(使用用户自定义设置),并更改info.plist获得来自用户定义的设置变量,但它不能正常工作。

错误的是:

操作无法完成。申请“$(EXAMPLE_BUNDLE_ID)”是未知的FrontBoard。

因此,它似乎当通在用户定义的设置是不正确的插值。

我也尝试添加默认PRODUCT_BUNDLE_IDENTIFIER和用户自定义设置的搭配方法。例如:com.example.app$(EXAMPLE_BUNDLE_ID)其中EXAMPLE_BUNDLE_ID = .development

我也尝试通过定义直接设定$(EXAMPLE_BUNDLE_ID)其添加到捆绑标识符下“身份”目标常规选项卡用户参考。但是,这则更改为:-- EXAMPLE_BUNDLE_ID-

我也尝试在info.plist使用$(PRODUCT_BUNDLE_IDENTIFIER)$(EXAMPLE_BUNDLE_ID)用于捆绑标识符值。但是,这给类似的错误:

操作无法完成。应用“com.example.app $(EXAMPLE_BUNDLE_ID)”是未知的FrontBoard。

同样,这看起来像插值问题。

任何人都知道解决办法?我有看,但无法找到答案。

这很容易为Android,因为刚刚在applicationIdSuffix ".development”使用productFlavors。但我不能找到这样的Xcode的方式。

ios xcode firebase flutter android-productflavors
1个回答
5
投票

你需要有不同的package name(Android)和bundle id(IOS),因为你需要使用Firebase Auth插件?

在这种情况下适用于iOS的项目,您shold考虑使用PlistBuddy,你可以将其设置成你的Run Script像添加XCode build phases

if [ "${CONFIGURATION}" = "Debug" ]; then
/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier com.example.developmento.appName" "$PROJECT_DIR/Runner/Info.plist"
echo "Changed bundle id for developement $PROJECT_DIR/Runner/Info.plist"
else
echo "Nothing to do"
fi

enter image description here

无论如何,如果你不使用Firebase Auth,你可以在不同的火力点项目同捆ID。

如果您需要再到differenziate火力项目分期和生产之间的文件,你可以看看这里:

How to choose between development and production firebase project based on build flavours?

UPDATE

所以下面OP聊天,知道tutorial我tryed自己,看看我们被困住,他是跟随这flutter flavors设置。

出发点是以下几点:

  • Firebase project
  • Firebase Auth模块的使用(因此需要改变项目之间的捆绑ID)
  • 当然,两种不同的GoogleService-Info.plist

我开始在Xcode bundle idGoogleService-Info.plist设置为生产(只是一个选项)

enter image description here

然后,我已经节省GoogleServices-Info-staging.plistGoogleServices-Info-production.plist在我的ios /文件夹亚军保存

enter image description here

然后脚本Compile Sources之前,我安装此版本的脚本

# Type a script or drag a script file from your workspace to insert its path.
if [ "${CONFIGURATION}" == "Debug" ] || [ "${CONFIGURATION}" == "Debug-Runner-staging" ]; then 

echo "Setting up staging firebase environment"
/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier com.example.staging.flutterAppAuthFlavours" "${PROJECT_DIR}/Runner/Info.plist"
cp -r "${PROJECT_DIR}/Runner/GoogleService-Info-staging.plist" "${PROJECT_DIR}/Runner/GoogleService-Info.plist" 
echo "$(date) staging flavour - Configuration: ${CONFIGURATION}" > "${PROJECT_DIR}/environment.txt"

elif [ "${CONFIGURATION}" == "Debug-Runner-production" ]; then 

echo "Setting up production firebase environment"
/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier com.example.flutterAppAuthFlavours" "${PROJECT_DIR}/Runner/Info.plist" 
cp -r "${PROJECT_DIR}/Runner/GoogleService-Info-production.plist" "${PROJECT_DIR}/Runner/GoogleService-Info.plist"
echo "$(date) production flavour - Configuration:  ${CONFIGURATION}" > "${PROJECT_DIR}/environment.txt"

fi

我把它叫做Setup Firebase Environment(你可以调用它,你想要什么)

enter image description here

这个脚本店也有一些日志(时间戳)在一个名为environment.txt ios文件夹内的文件,以方便检查什么样的Xcode的构建做了

enter image description here

现在大概SchemesBuild Configurations

我已经做了两个Build Configuration是我Debug Build Configuration的精确副本,我打电话给他们

enter image description here

  • Debug-Runner-staging
  • Debug-Runner-production

经验法则是来命名构建配置为'Debug-<your flavor>',你需要为你拥有的每一个口味方案,所以我有这些:

  • Runner-staging其运行调用调试入门分期构建配置
  • Runner-production其运行调用调试-亚军生产构建配置

enter image description here

enter image description here

所以,现在如果我叫flutter run --flavor Debug-staging我有我的临时火力点项目运行构建。

如果我打电话flutter run --flavor Debug-production我有我的生产项目火力运行构建。

enter image description here

enter image description here

更新2

只是为了完整性你也可以在这里改变束ID:

enter image description here

反正它似乎有一个奇怪的现象,一旦你正确地构建一个flavour第二次flutter命令生成的味道,但运行previos建立的味道。

XCode建设,并与方案中的所有作品转换为预期的(甚至是正确的应用程序的运行),我想,这可能是一个扑命令的问题。因此,我建议你尝试文件存在问题here联也该SO问题/答案。

更新3

一个位英特尔之后我发现flutter tools设置的应用程序了建设项目之前推出的环境。所以,当我们改变CFBundleIdentifierInfo.plist第一次,我们推出第二次flutter run把前面的修改后的值,并尝试推出这种捆绑ID而生成过程中,我们正在改变,因为我们正在建立一个不同的变体。

一个可能的解决办法是启动该调用CFBundleIdentifier前更改内部Info.plistfluetter run的脚本。

例如开始与Info.plist的产品包ID的com.example.flutterAppAuthFlavours,我们可以做这样的事情

enter image description here

enter image description here

在这里,我用sed命令只是想不同的,但你可以拨打我们永远的讲座敬爱的PlistBuddy调用flutter run之前做出改变。

© www.soinside.com 2019 - 2024. All rights reserved.