ios 根据dart-define参数更改bundle ID和名称

xdnvmnnf  于 12个月前  发布在  iOS
关注(0)|答案(1)|浏览(165)

一般目标是同时安装两个应用程序副本,但名称不同。
一个用于生产环境,另一个用于测试环境。
环境不是由构建类型(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

dgsult0t

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"),否则它将给予空字符串。

相关问题