一般目标是同时安装两个应用程序副本,但名称不同。
一个用于生产环境,另一个用于测试环境。
环境不是由构建类型(release/debug/profile
)决定的,而是由-dart-define=myEnv="production/test"
变量的值决定的。所有构建都在ci/cd系统中使用--release
模式进行,并进行 Testflight。
如果我理解正确,这需要更改App ID。
我有两个info.plist文件:
ios/Runner/Info.plist:
<key>CFBundleIdentifier</key>
<string>com.testcomp.testapp</string>
ios/Runner/GoogleService-Info.plist
<key>BUNDLE_ID</key>
<string>com.testcomp.testapp</string>
并且还在文件中指定应用标识符:ios/Runner.xcodeproj/project.pbxprojas:
PRODUCT_BUNDLE_IDENTIFIER = com.testcomp.testapp;
如何根据--dart-define
变量更改应用程序的Bundle ID和Bundle名称?
我所尝试的:
虽然这个脚本是基于release/debug
参数的,但我还是尝试将这个脚本添加到Build phase中:
if [ "${CONFIGURATION}" = "Debug" ]; then
/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier com.testcomp.testapp.test" "$PROJECT_DIR/Runner/Info.plist"
/usr/libexec/PlistBuddy -c "Set :CFBundleName testapp-beta" "$PROJECT_DIR/Runner/Info.plist"
/usr/libexec/PlistBuddy -c "Set :CFBundleDisplayName testapp-beta" "$PROJECT_DIR/Runner/Info.plist"
/usr/libexec/PlistBuddy -c "Set :BUNDLE_ID com.testcomp.testapp.test" "$PROJECT_DIR/Runner/GoogleService-Info.plist"
echo "Changed bundle id and name for Debug"
else
/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier com.testcomp.testapp" "$PROJECT_DIR/Runner/Info.plist"
/usr/libexec/PlistBuddy -c "Set :CFBundleName testapp" "$PROJECT_DIR/Runner/Info.plist"
/usr/libexec/PlistBuddy -c "Set :CFBundleDisplayName testapp" "$PROJECT_DIR/Runner/Info.plist"
/usr/libexec/PlistBuddy -c "Set :BUNDLE_ID com.testcomp.testapp" "$PROJECT_DIR/Runner/GoogleService-Info.plist"
echo "Changed bundle id and name for PRODUCTION"
fi
但行为很奇怪
在完全清除之后的第一次构建尝试发生而没有错误。但安装的应用程序具有旧的ID和名称。第二次尝试构建时,会安装第二个ID和名称已更改的应用程序,并且设备上会出现第二个快捷方式,但随后Xcode崩溃并显示以下消息:
我认为这是由于脚本正在编辑info.plist文件,但flutter将标识符直接存储到ios/Runner.xcodeproj/project.pbxproj文件中,我无法用脚本更改它。
我还将此脚本移动到了Build阶段的最顶部,并将其移动到Product->Scheme->Edit Scheme... ->Build->Pre-actions。这没有解决错误。
但是同样,我需要更改Bundle ID和名称,而不是依赖于构建模式(--release或debug),而是来自dart-define
变量的值。
*Flutter版本:1.22
1条答案
按热度按时间dgsult0t1#
@ nilecrocket,要使用环境变量更改Flutter项目中的bundle标识符(CFBundleIdentifier),请按照以下步骤操作:
1.更新信息plist:
打开iOS项目中的任何Info.plist文件。将
<key>CFBundleIdentifier</key>
值替换为<string>$(BUNDLE_ID)</string>
。这引用了由BUNDLE_ID环境变量指定的包标识符。2.更新PRODUCT_BUNDLE_IDENTIFIER:
在代码编辑器中,搜索出现PRODUCT_BUNDLE_IDENTIFIER的项。将其值替换为**"$(BUNDLE_ID)"**。这确保了与Info. plist中设置的捆绑包标识符的一致性。
3.创建.env文件:
在您的项目目录中,创建一个
.env
文件来存储您想要的包标识符。例如,BUNDLE_ID=com.example.com。4.使用环境变量运行Flutter App:
使用
flutter run --dart-define-from-file=.env
命令运行Flutter应用,从.env
文件加载环境变量。5.校验环境变量:
在Dart代码中,使用
String.fromEnvironment("BUNDLE_ID")
确认环境变量已正确加载。打印该值以确保它与您在.env文件中提供的值匹配。确保使用const
在变量中分配String.fromEnvironment("BUNDLE_ID")
,否则它将给予空字符串。