bsky-app/plugins/starterPackAppClipExtension/withXcodeTarget.js

92 lines
3.2 KiB
JavaScript

const {withXcodeProject} = require('@expo/config-plugins')
const BUILD_PHASE_FILES = ['AppDelegate.swift', 'ViewController.swift']
const withXcodeTarget = (config, {targetName}) => {
// eslint-disable-next-line no-shadow
return withXcodeProject(config, config => {
const pbxProject = config.modResults
const target = pbxProject.addTarget(targetName, 'application', targetName)
target.pbxNativeTarget.productType = `"com.apple.product-type.application.on-demand-install-capable"`
pbxProject.addBuildPhase(
BUILD_PHASE_FILES.map(f => `${targetName}/${f}`),
'PBXSourcesBuildPhase',
'Sources',
target.uuid,
'application',
'"AppClips"',
)
pbxProject.addBuildPhase(
[`${targetName}/Images.xcassets`],
'PBXResourcesBuildPhase',
'Resources',
target.uuid,
'application',
'"AppClips"',
)
const pbxGroup = pbxProject.addPbxGroup([
'AppDelegate.swift',
'ViewController.swift',
'Images.xcassets',
`${targetName}.entitlements`,
'Info.plist',
])
pbxProject.addFile(`${targetName}/Info.plist`, pbxGroup.uuid)
const configurations = pbxProject.pbxXCBuildConfigurationSection()
for (const key in configurations) {
if (typeof configurations[key].buildSettings !== 'undefined') {
const buildSettingsObj = configurations[key].buildSettings
if (
typeof buildSettingsObj.PRODUCT_NAME !== 'undefined' &&
buildSettingsObj.PRODUCT_NAME === `"${targetName}"`
) {
buildSettingsObj.CLANG_ENABLE_MODULES = 'YES'
buildSettingsObj.INFOPLIST_FILE = `"${targetName}/Info.plist"`
buildSettingsObj.CODE_SIGN_ENTITLEMENTS = `"${targetName}/${targetName}.entitlements"`
buildSettingsObj.CODE_SIGN_STYLE = 'Automatic'
buildSettingsObj.CURRENT_PROJECT_VERSION = `"${
process.env.BSKY_IOS_BUILD_NUMBER ?? '1'
}"`
buildSettingsObj.GENERATE_INFOPLIST_FILE = 'YES'
buildSettingsObj.MARKETING_VERSION = `"${config.version}"`
buildSettingsObj.PRODUCT_BUNDLE_IDENTIFIER = `"${config.ios?.bundleIdentifier}.AppClip"`
buildSettingsObj.SWIFT_EMIT_LOC_STRINGS = 'YES'
buildSettingsObj.SWIFT_VERSION = '5.0'
buildSettingsObj.TARGETED_DEVICE_FAMILY = `"1"`
buildSettingsObj.DEVELOPMENT_TEAM = 'B3LX46C5HS'
buildSettingsObj.IPHONEOS_DEPLOYMENT_TARGET = '14.0'
buildSettingsObj.ASSETCATALOG_COMPILER_APPICON_NAME = 'AppIcon'
}
}
}
pbxProject.addTargetAttribute('DevelopmentTeam', 'B3LX46C5HS', targetName)
if (!pbxProject.hash.project.objects.PBXTargetDependency) {
pbxProject.hash.project.objects.PBXTargetDependency = {}
}
if (!pbxProject.hash.project.objects.PBXContainerItemProxy) {
pbxProject.hash.project.objects.PBXContainerItemProxy = {}
}
pbxProject.addTargetDependency(pbxProject.getFirstTarget().uuid, [
target.uuid,
])
pbxProject.addBuildPhase(
[`${targetName}.app`],
'PBXCopyFilesBuildPhase',
'Embed App Clips',
pbxProject.getFirstTarget().uuid,
'application',
'"AppClips"',
)
return config
})
}
module.exports = {withXcodeTarget}