今天接到需求要在LaunchScreen顯示版本號,然額,LaunchScreen.stortboard 裏面的文本必須是靜態的,每次在pubspec.yaml修改版本號後還要手動修改LaunchScreen.stortboard,打包幾回後決定將其作成自動化的。
ios
複製代碼
參考了stackoverflow的思路,不過又和純ios項目不太同樣,腳本打算用dart 來寫。基本就是讀取pubspec.yaml文件中的版本號,而後替換LaunchScreen.stortboard文件swift
replace_launch_screen.dart
xcode
import 'dart:io';
main() {
File launchScreenFile = File("../ios/Runner/Base.lproj/LaunchScreen.storyboard");
File pubSpecFile = File("../pubspec.yaml");
// 1.從pubspec讀取版本號
String pubSpecFileContent = pubSpecFile.readAsStringSync();
RegExp versionReg = new RegExp("[\r\n]\\s*version:\\s*(\\S+)\\+(\\d+)");
RegExpMatch versionMatch = versionReg.firstMatch(pubSpecFileContent);
print(versionMatch.group(1) + ":" + versionMatch.group(2));
// 2.從lauchScreen獲取替換字符串
String launchScreenFileContent = launchScreenFile.readAsStringSync();
// print(launchScreenFileContent);
RegExp versionTextReg = new RegExp('text="\\S+"');
RegExpMatch versionTextMatch = versionTextReg.firstMatch(launchScreenFileContent);
// print(versionReg.hasMatch(launchScreenFileContent));
print(versionTextMatch.group(0));
String strToBeReplaced = versionTextMatch.group(0);
String replacedLacunchScreen = launchScreenFileContent.replaceFirst(versionTextReg, "text=\"${versionMatch.group(1)}\"");
launchScreenFile.writeAsString(replacedLacunchScreen, mode: FileMode.writeOnly);
}
複製代碼
"$FLUTTER_ROOT/bin/cache/dart-sdk/bin/dart" ../scripts/replace_launch_screen.dart 複製代碼
整體來講代碼簡單,步驟也不復雜,不過用dart 來替換,和項目代碼保持統一了,通俗易懂,須要的能夠參考一下。bash