Skip to content

Commit

Permalink
feat: add ios destination platform enrichment to work with rosetta
Browse files Browse the repository at this point in the history
  • Loading branch information
rams23 committed Aug 9, 2024
1 parent 61dc045 commit bf8f361
Show file tree
Hide file tree
Showing 6 changed files with 21 additions and 11 deletions.
9 changes: 5 additions & 4 deletions packages/cli/src/application/buildIos.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,21 +13,22 @@ function installPods() {
executeCommand("pod install", { cwd: iosFolder });
}

function _buildIos(schema?: string, config = "Debug", platform: IosPlatform = iosBuildPlatforms.simulator) {
function _buildIos(schema?: string, config = "Debug", platform: IosPlatform = iosBuildPlatforms.simulator, destinationPlatformEnrichment?: string) {
const iosFolder = path.join(getProjectRootDir(), "ios");
const workspacePath = path.join(iosFolder, `${appName}.xcworkspace`);
const buildFlavor = getIosFlavors(schema);
if (!buildFlavor) {
throw new Error(`No build flavor found for ${schema}`);
}

logger.log('builfing config', config);
logger.log("builfing config", config);
const archivePath = `${iosFolder}/build/Products/${appName}.xcarchive`;

const buildCommand = `RCT_NO_LAUNCH_PACKAGER=true xcodebuild \
-workspace "${workspacePath}" \
-scheme "${buildFlavor.scheme}" \
-configuration ${config || buildFlavor.config} \
-destination '${platform.destination}${destinationPlatformEnrichment ? `,${destinationPlatformEnrichment}` : ""}' \
-sdk ${platform.name} \
-archivePath '${archivePath}' \
-derivedDataPath ${iosFolder}/DerivedData/${appName} \
Expand All @@ -49,7 +50,7 @@ function _buildIos(schema?: string, config = "Debug", platform: IosPlatform = io

}

export function buildIos(schema?: string, config = "Debug", platform: IosPlatform = iosBuildPlatforms.simulator) {
export function buildIos(schema?: string, config = "Debug", platform: IosPlatform = iosBuildPlatforms.simulator, destination?: string) {
// installPods();
_buildIos(schema, config, platform);
_buildIos(schema, config, platform, destination);
}
8 changes: 6 additions & 2 deletions packages/cli/src/application/iosUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,23 +5,27 @@ export const iosBuildPlatforms = {
simulator: {
name: "iphonesimulator",
ext: "app",
buildCmd: "build"
buildCmd: "build",
destination: "generic/platform=iOS Simulator"
},
iphone: {
name: "iphoneos",
ext: "app",
buildCmd: "build"
buildCmd: "build",
destination: "generic/platform=iOS"
}
} as const;

export type IosPlatform = {
name: "iphonesimulator";
ext: "app";
buildCmd: "build";
destination: string;
} | {
name: "iphoneos",
ext: "app",
buildCmd: "build"
destination:string;
};

export function getIosBuildDestination(platform: {
Expand Down
2 changes: 1 addition & 1 deletion packages/cli/src/application/metroManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ export async function checkIsMetroRunning(port = '8081') {
await axios.get(`http://localhost:${port}`);
return true;
} catch (ex) {
if ((ex as any)?.message.includes('ECONNREFUSED')) {
if ((ex as any)?.message?.includes('ECONNREFUSED') || (ex as any)?.code?.includes('ECONNREFUSED')) {
return false;
}
throw ex;
Expand Down
5 changes: 3 additions & 2 deletions packages/cli/src/application/runIos.ts
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,8 @@ export async function runApp(
config?:string,
iosPlatform: IosPlatform = iosBuildPlatforms.simulator,
forceBuild?: boolean,
buildId?: string
buildId?: string,
destinationPlatformEnrichment?:string
) {
const buildFlavor = getIosFlavors(buildType);

Expand All @@ -185,7 +186,7 @@ export async function runApp(
if (buildId) {
throw new Error(`The requested build id ${buildId} does not contain an ios build for scheme ${buildFlavor}`);
}
buildIos(buildType,config, iosPlatform);
buildIos(buildType,config, iosPlatform, destinationPlatformEnrichment);
} else {
logger.info('Build already present, skipping build');
}
Expand Down
4 changes: 3 additions & 1 deletion packages/cli/src/commands/build.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ export default class Build extends Command {
android: Flags.boolean({ char: 'a', description: 'Generate android native build' }),
flavor: Flags.string({ char: 'f', description: 'Specify flavor/schema to build' }),
config: Flags.string({ char: 'c', description: 'Specify the config to build' }),
destination: Flags.string({ char: 'd', description: 'Append this to the standard destination platform, like arch=x86_64 for rosetta emulator' }),
release: Flags.boolean({ description: 'Optimized release build', default: false }),
incremental: Flags.boolean({ char: 'I', description: 'Incremental build', default: false }),
iosPlatform: Flags.string({
Expand All @@ -38,13 +39,14 @@ export default class Build extends Command {
const release = flags.release;
const config = flags.config;
const incremental = flags.incremental;
const destination = flags.destination;
let iosPlatform = flags.iosPlatform === 'simulator' ? iosBuildPlatforms.simulator : iosBuildPlatforms.iphone;

const start = performance.now();

if (shouldBuildIos) {
logger.info('Building ios app');
buildIos(buildFlavor, config, iosPlatform);
buildIos(buildFlavor, config, iosPlatform, destination);
}
if (shouldBuildAndroid) {
logger.info('Building android');
Expand Down
4 changes: 3 additions & 1 deletion packages/cli/src/commands/run.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ export default class Run extends MaybeRemoteAwareCommand {
ios: Flags.boolean({ char: 'i', description: 'Run the ios app' }),
flavor: Flags.string({ char: 'f', description: 'Specify the android flavor or the ios scheme to build' }),
config: Flags.string({ char: 'c', description: 'Specify the config to build' }),
destination: Flags.string({ char: 'd', description: 'Append this to the standard destination platform, like arch=x86_64 for rosetta emulator' }),
verbose: Flags.boolean({ description: 'Verbose output' }),
iosPlatform: Flags.string({
description: 'Specify the ios platform to run on',
Expand Down Expand Up @@ -44,6 +45,7 @@ export default class Run extends MaybeRemoteAwareCommand {
const config = flags.config;
const forceBuild = flags.forceBuild;
let buildId = flags.buildId;
let destination = flags.destination;
let iosPlatform = flags.iosPlatform === 'simulator' ? iosBuildPlatforms.simulator : iosBuildPlatforms.iphone;

logger.setVerbose(flags.verbose);
Expand Down Expand Up @@ -77,7 +79,7 @@ export default class Run extends MaybeRemoteAwareCommand {
}
if (shouldRunIos) {
logger.info(`Running ios app ${buildFlavor ? `with flavor ${buildFlavor}` : ''}`);
await runIos(buildFlavor!,config, iosPlatform, forceBuild, buildId);
await runIos(buildFlavor!,config, iosPlatform, forceBuild, buildId, destination);
}
logger.info(`Run finished in ${((performance.now() - start) / 1000).toFixed(1)} seconds`);
this.exit(0);
Expand Down

0 comments on commit bf8f361

Please sign in to comment.