Bluesky app fork with some witchin' additions 馃挮
1const {withXcodeProject} = require('expo/config-plugins')
2
3const BUILD_PHASE_FILES = ['AppDelegate.swift', 'ViewController.swift']
4
5const withXcodeTarget = (config, {targetName}) => {
6 return withXcodeProject(config, config => {
7 const pbxProject = config.modResults
8
9 const target = pbxProject.addTarget(targetName, 'application', targetName)
10 target.pbxNativeTarget.productType = `"com.apple.product-type.application.on-demand-install-capable"`
11 pbxProject.addBuildPhase(
12 BUILD_PHASE_FILES.map(f => `${targetName}/${f}`),
13 'PBXSourcesBuildPhase',
14 'Sources',
15 target.uuid,
16 'application',
17 '"AppClips"',
18 )
19 pbxProject.addBuildPhase(
20 [`${targetName}/Images.xcassets`],
21 'PBXResourcesBuildPhase',
22 'Resources',
23 target.uuid,
24 'application',
25 '"AppClips"',
26 )
27
28 const pbxGroup = pbxProject.addPbxGroup([
29 'AppDelegate.swift',
30 'ViewController.swift',
31 'Images.xcassets',
32 `${targetName}.entitlements`,
33 'Info.plist',
34 ])
35
36 pbxProject.addFile(`${targetName}/Info.plist`, pbxGroup.uuid)
37 const configurations = pbxProject.pbxXCBuildConfigurationSection()
38 for (const key in configurations) {
39 if (typeof configurations[key].buildSettings !== 'undefined') {
40 const buildSettingsObj = configurations[key].buildSettings
41 if (
42 typeof buildSettingsObj.PRODUCT_NAME !== 'undefined' &&
43 buildSettingsObj.PRODUCT_NAME === `"${targetName}"`
44 ) {
45 buildSettingsObj.CLANG_ENABLE_MODULES = 'YES'
46 buildSettingsObj.INFOPLIST_FILE = `"${targetName}/Info.plist"`
47 buildSettingsObj.CODE_SIGN_ENTITLEMENTS = `"${targetName}/${targetName}.entitlements"`
48 buildSettingsObj.CODE_SIGN_STYLE = 'Automatic'
49 buildSettingsObj.CURRENT_PROJECT_VERSION = `"${
50 process.env.BSKY_IOS_BUILD_NUMBER ?? '1'
51 }"`
52 buildSettingsObj.GENERATE_INFOPLIST_FILE = 'YES'
53 buildSettingsObj.MARKETING_VERSION = `"${config.version}"`
54 buildSettingsObj.PRODUCT_BUNDLE_IDENTIFIER = `"${config.ios?.bundleIdentifier}.AppClip"`
55 buildSettingsObj.SWIFT_EMIT_LOC_STRINGS = 'YES'
56 buildSettingsObj.SWIFT_VERSION = '5.0'
57 buildSettingsObj.TARGETED_DEVICE_FAMILY = `"1"`
58 buildSettingsObj.DEVELOPMENT_TEAM = 'B3LX46C5HS'
59 buildSettingsObj.IPHONEOS_DEPLOYMENT_TARGET = '15.1'
60 buildSettingsObj.ASSETCATALOG_COMPILER_APPICON_NAME = 'AppIcon'
61 }
62 }
63 }
64
65 pbxProject.addTargetAttribute('DevelopmentTeam', 'B3LX46C5HS', targetName)
66
67 if (!pbxProject.hash.project.objects.PBXTargetDependency) {
68 pbxProject.hash.project.objects.PBXTargetDependency = {}
69 }
70 if (!pbxProject.hash.project.objects.PBXContainerItemProxy) {
71 pbxProject.hash.project.objects.PBXContainerItemProxy = {}
72 }
73 pbxProject.addTargetDependency(pbxProject.getFirstTarget().uuid, [
74 target.uuid,
75 ])
76
77 pbxProject.addBuildPhase(
78 [`${targetName}.app`],
79 'PBXCopyFilesBuildPhase',
80 'Embed App Clips',
81 pbxProject.getFirstTarget().uuid,
82 'application',
83 '"AppClips"',
84 )
85
86 return config
87 })
88}
89
90module.exports = {withXcodeTarget}