总体目标是同时安装应用程序的两个副本,但名称不同。
一个用于生产环境,另一个用于测试环境。
环境不是由构建类型 (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.pbxproj 如:
PRODUCT_BUNDLE_IDENTIFIER = com.testcomp.testapp;
如何根据 --dart-define
变量更改应用程序的 Bundle id 和 Bundle 名称?
我尝试过的:
尽管此脚本基于 release/debug
参数,但我仍尝试将此脚本添加到构建阶段:
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< /strong> 文件,我无法使用脚本更改它。
我还将此脚本移至构建阶段的最顶部,并将其移至产品->方案->编辑方案...->构建->预-动作。这并没有解决错误。
但同样,我需要根据构建模式(--release 或 debug)而不是根据 dart-define
变量的值来更改 Bundle ID 和名称。
Flutter 版本:1.22