diff --git a/CHANGELOG.md b/CHANGELOG.md index 7d3144f2a9..77fc28ae2c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,8 @@ This is the log of notable changes to EAS CLI and related packages. ### ๐ŸŽ‰ New features +- Change default iOS image for projects with Expo SDK <= 41 (SDK 41 won't build with Xcode 12.5). ([#479](https://github.com/expo/eas-cli/pull/479) by [@dsokal](https://github.com/dsokal)) + ### ๐Ÿ› Bug fixes ### ๐Ÿงน Chores diff --git a/packages/eas-cli/src/build/ios/prepareJob.ts b/packages/eas-cli/src/build/ios/prepareJob.ts index ba4bfba3a2..dfc906f0ab 100644 --- a/packages/eas-cli/src/build/ios/prepareJob.ts +++ b/packages/eas-cli/src/build/ios/prepareJob.ts @@ -1,6 +1,7 @@ import { ArchiveSource, Cache, Ios, Job, Workflow, sanitizeJob } from '@expo/eas-build-job'; import { IosGenericBuildProfile, IosManagedBuildProfile } from '@expo/eas-json'; import path from 'path'; +import semver from 'semver'; import { IosCredentials, TargetCredentials } from '../../credentials/ios/types'; import { getUsername } from '../../project/projectUtils'; @@ -59,7 +60,7 @@ async function prepareJobCommonAsync( projectArchive, distribution: ctx.buildProfile.distribution, builderEnvironment: { - image: ctx.buildProfile.image, + image: resolveImage(ctx), node: ctx.buildProfile.node, yarn: ctx.buildProfile.yarn, bundler: ctx.buildProfile.bundler, @@ -78,6 +79,17 @@ async function prepareJobCommonAsync( }; } +function resolveImage(ctx: BuildContext): Ios.BuilderEnvironment['image'] { + // see https://linear.app/expo/issue/ENG-1396/make-default-image-dependent-on-sdk-version + if (!ctx.buildProfile.image && ctx.commandCtx.exp.sdkVersion) { + const majorSdkVersion = semver.major(ctx.commandCtx.exp.sdkVersion); + if (majorSdkVersion <= 41) { + return 'macos-catalina-10.15-xcode-12.4'; + } + } + return ctx.buildProfile.image ?? 'default'; +} + function prepareTargetCredentials(targetCredentials: TargetCredentials): Ios.TargetCredentials { return { provisioningProfileBase64: targetCredentials.provisioningProfile, diff --git a/packages/eas-json/src/Config.types.ts b/packages/eas-json/src/Config.types.ts index 7b783d25dd..ee790fd8ee 100644 --- a/packages/eas-json/src/Config.types.ts +++ b/packages/eas-json/src/Config.types.ts @@ -35,7 +35,7 @@ export interface AndroidGenericBuildProfile extends Android.BuilderEnvironment { cache: Cache; } -export interface IosManagedBuildProfile extends Ios.BuilderEnvironment { +export interface IosManagedBuildProfile extends Omit { workflow: Workflow.MANAGED; credentialsSource: CredentialsSource; buildType?: Ios.ManagedBuildType; @@ -45,9 +45,10 @@ export interface IosManagedBuildProfile extends Ios.BuilderEnvironment { enterpriseProvisioning?: IosEnterpriseProvisioning; autoIncrement: VersionAutoIncrement; cache: Cache; + image?: Ios.BuilderEnvironment['image']; } -export interface IosGenericBuildProfile extends Ios.BuilderEnvironment { +export interface IosGenericBuildProfile extends Omit { workflow: Workflow.GENERIC; credentialsSource: CredentialsSource; scheme?: string; @@ -59,6 +60,7 @@ export interface IosGenericBuildProfile extends Ios.BuilderEnvironment { enterpriseProvisioning?: IosEnterpriseProvisioning; autoIncrement: VersionAutoIncrement; cache: Cache; + image?: Ios.BuilderEnvironment['image']; } export type AndroidBuildProfile = AndroidManagedBuildProfile | AndroidGenericBuildProfile; diff --git a/packages/eas-json/src/EasJsonSchema.ts b/packages/eas-json/src/EasJsonSchema.ts index 465034e6c7..b0884356bf 100644 --- a/packages/eas-json/src/EasJsonSchema.ts +++ b/packages/eas-json/src/EasJsonSchema.ts @@ -21,9 +21,7 @@ const AndroidBuilderEnvironmentSchema = Joi.object({ }); const IosBuilderEnvironmentSchema = Joi.object({ - image: Joi.string() - .valid(...Ios.builderBaseImages) - .default('default'), + image: Joi.string().valid(...Ios.builderBaseImages), node: Joi.string().empty(null).custom(semverSchemaCheck), yarn: Joi.string().empty(null).custom(semverSchemaCheck), bundler: Joi.string().empty(null).custom(semverSchemaCheck), @@ -100,7 +98,7 @@ const IosManagedSchema = Joi.object({ cache: CacheSchema.default(), }).concat(IosBuilderEnvironmentSchema); -const schemaBuildProfileMap: Record> = { +export const schemaBuildProfileMap: Record> = { android: { generic: AndroidGenericSchema, managed: AndroidManagedSchema, @@ -111,7 +109,7 @@ const schemaBuildProfileMap: Record> = { }, }; -const EasJsonSchema = Joi.object({ +export const EasJsonSchema = Joi.object({ builds: Joi.object({ android: Joi.object().pattern( Joi.string(), @@ -127,5 +125,3 @@ const EasJsonSchema = Joi.object({ ), }), }); - -export { EasJsonSchema, schemaBuildProfileMap }; diff --git a/packages/eas-json/src/__tests__/EasJsonReader-test.ts b/packages/eas-json/src/__tests__/EasJsonReader-test.ts index 5b1632ecda..84971dee27 100644 --- a/packages/eas-json/src/__tests__/EasJsonReader-test.ts +++ b/packages/eas-json/src/__tests__/EasJsonReader-test.ts @@ -56,7 +56,6 @@ test('minimal valid ios eas.json', async () => { autoIncrement: false, env: {}, cache: { disabled: false, cacheDefaultPaths: true, customPaths: [] }, - image: 'default', }, }, }).toEqual(easJson); @@ -94,7 +93,6 @@ test('minimal valid eas.json for both platforms', async () => { autoIncrement: false, env: {}, cache: { disabled: false, cacheDefaultPaths: true, customPaths: [] }, - image: 'default', }, }, }).toEqual(easJson); @@ -165,7 +163,6 @@ test('valid eas.json for development client builds', async () => { distribution: 'store', autoIncrement: false, env: {}, - image: 'default', cache: { disabled: false, cacheDefaultPaths: true, customPaths: [] }, buildType: 'development-client', }, diff --git a/yarn.lock b/yarn.lock index 743b929c5e..9a774bad74 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1924,13 +1924,6 @@ dependencies: "@hapi/joi" "^17.1.1" -"@expo/eas-build-job@0.2.37": - version "0.2.37" - resolved "https://registry.yarnpkg.com/@expo/eas-build-job/-/eas-build-job-0.2.37.tgz#fd6cb911e33774239d1ab7662c0ccc8efa22f7a2" - integrity sha512-B9gahwTTYs0pWQP2HnfYWcbsqmUIAdnr+iwounVqpcxHhERxGJby2JEw+Vxtl2+VMARM4w9RLgNduP5Vk/zeQw== - dependencies: - "@hapi/joi" "^17.1.1" - "@expo/image-utils@0.3.14": version "0.3.14" resolved "https://registry.yarnpkg.com/@expo/image-utils/-/image-utils-0.3.14.tgz#eea0d59c5845e8b19504011c20afd837c5d044c5"