我建立不同的味道扑应用程序的不同火力地堡环境(开发和生产)。我需要设置为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的方式。
你需要有不同的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
无论如何,如果你不使用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 id
和GoogleService-Info.plist
设置为生产(只是一个选项)
然后,我已经节省GoogleServices-Info-staging.plist
和GoogleServices-Info-production.plist
在我的ios /文件夹亚军保存
然后脚本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
(你可以调用它,你想要什么)
这个脚本店也有一些日志(时间戳)在一个名为environment.txt
ios
文件夹内的文件,以方便检查什么样的Xcode的构建做了
现在大概Schemes
和Build Configurations
:
我已经做了两个Build Configuration
是我Debug Build Configuration
的精确副本,我打电话给他们
Debug-Runner-staging
Debug-Runner-production
经验法则是来命名构建配置为'Debug-<your flavor>'
,你需要为你拥有的每一个口味方案,所以我有这些:
Runner-staging
其运行调用调试入门分期构建配置Runner-production
其运行调用调试-亚军生产构建配置所以,现在如果我叫flutter run --flavor Debug-staging
我有我的临时火力点项目运行构建。
如果我打电话flutter run --flavor Debug-production
我有我的生产项目火力运行构建。
更新2
只是为了完整性你也可以在这里改变束ID:
反正它似乎有一个奇怪的现象,一旦你正确地构建一个flavour
第二次flutter
命令生成的味道,但运行previos建立的味道。
与XCode
建设,并与方案中的所有作品转换为预期的(甚至是正确的应用程序的运行),我想,这可能是一个扑命令的问题。因此,我建议你尝试文件存在问题here联也该SO问题/答案。
更新3
一个位英特尔之后我发现flutter tools
设置的应用程序了建设项目之前推出的环境。所以,当我们改变CFBundleIdentifier
内Info.plist
第一次,我们推出第二次flutter run
把前面的修改后的值,并尝试推出这种捆绑ID而生成过程中,我们正在改变,因为我们正在建立一个不同的变体。
一个可能的解决办法是启动该调用CFBundleIdentifier
前更改内部Info.plist
的fluetter run
的脚本。
例如开始与Info.plist
的产品包ID的com.example.flutterAppAuthFlavours
,我们可以做这样的事情
在这里,我用sed
命令只是想不同的,但你可以拨打我们永远的讲座敬爱的PlistBuddy
调用flutter run
之前做出改变。