Compare commits

..
4 changed files with 34 additions and 17 deletions

View file

@ -28,11 +28,7 @@ Future<void> main(List<String> args) => build(args, (input, output) async {
final iosConfig = codeConfig.iOS; final iosConfig = codeConfig.iOS;
iosSdk = iosConfig.targetSdk; iosSdk = iosConfig.targetSdk;
final minVersion = iosConfig.targetVersion; final minVersion = iosConfig.targetVersion;
iosSdkPath = (await Process.run("xcrun", [ iosSdkPath = await getXCodeSDK(sdkType: iosSdk.type);
"--sdk",
iosSdk.type,
"--show-sdk-path",
])).stdout.toString().trim();
final archTriple = switch (targetArch) { final archTriple = switch (targetArch) {
Architecture.arm64 => "arm64", Architecture.arm64 => "arm64",
Architecture.x64 => "x86_64", Architecture.x64 => "x86_64",
@ -45,12 +41,7 @@ Future<void> main(List<String> args) => build(args, (input, output) async {
: "$archTriple-apple-ios$minVersion.0"; : "$archTriple-apple-ios$minVersion.0";
extraEnv = { extraEnv = {
"GOOS": "ios", "GOOS": "ios",
"CC": (await Process.run("xcrun", [ "CC": await getXCodeClang(sdkType: iosSdk.type),
"--sdk",
iosSdk.type,
"-f",
"clang",
])).stdout.toString().trim(),
"CGO_CFLAGS": "-isysroot $iosSdkPath -target $iosTargetTriple", "CGO_CFLAGS": "-isysroot $iosSdkPath -target $iosTargetTriple",
"CGO_LDFLAGS": "-isysroot $iosSdkPath -target $iosTargetTriple", "CGO_LDFLAGS": "-isysroot $iosSdkPath -target $iosTargetTriple",
}; };

View file

@ -336,7 +336,7 @@
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh; shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; shellScript = "export PATH=\"$PROJECT_DIR/scripts:$PATH\"\n/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
}; };
9740EEB61CF901F6004384FC /* Run Script */ = { 9740EEB61CF901F6004384FC /* Run Script */ = {
isa = PBXShellScriptBuildPhase; isa = PBXShellScriptBuildPhase;
@ -351,7 +351,7 @@
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh; shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; shellScript = "export PATH=\"$PROJECT_DIR/scripts:$PATH\"\n/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
}; };
EE82EC529EB6C0F1FA480659 /* [CP] Check Pods Manifest.lock */ = { EE82EC529EB6C0F1FA480659 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase; isa = PBXShellScriptBuildPhase;

15
ios/scripts/lipo Executable file
View file

@ -0,0 +1,15 @@
#!/bin/sh
# Workaround for NixOS/nixpkgs#405066: frameworks copied from the Nix store
# stay read-only, so lipo can't write its temporary output file when Flutter
# thins them during the build. Make the framework writable before delegating
# to the real lipo.
for arg in "$@"; do
case "$arg" in
*/*.framework/*)
fw_dir="${arg%.framework/*}.framework"
chmod -R +w "$fw_dir" 2>/dev/null
;;
esac
done
exec /usr/bin/lipo "$@"

View file

@ -1,11 +1,22 @@
import "dart:io"; import "dart:io";
Future<String> getXCodeSDK() async { Future<String> _runXcrun(List<String> args, String errorContext) async {
final result = await Process.run("xcrun", ["--show-sdk-path"]); final result = await Process.run("xcrun", args);
if (result.exitCode != 0) { if (result.exitCode != 0) {
throw Exception("Failed to get XCode SDK\n${result.stderr}"); throw Exception("Failed to $errorContext\n${result.stderr}");
} }
return result.stdout.trim(); return result.stdout.toString().trim();
} }
Future<String> getXCodeSDK({String? sdkType}) => _runXcrun([
if (sdkType != null) ...["--sdk", sdkType],
"--show-sdk-path",
], "get XCode SDK");
Future<String> getXCodeClang({String? sdkType}) => _runXcrun([
if (sdkType != null) ...["--sdk", sdkType],
"-f",
"clang",
], "get XCode clang");