├── .github
└── workflows
│ └── ci.yml
├── .gitignore
├── .swiftpm
└── xcode
│ ├── package.xcworkspace
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
│ └── xcshareddata
│ └── xcschemes
│ ├── AppCore.xcscheme
│ ├── AppTests.xcscheme
│ └── AppUI.xcscheme
├── App
├── AppProject.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ └── xcshareddata
│ │ └── xcschemes
│ │ ├── iOS.xcscheme
│ │ ├── iPadOS.xcscheme
│ │ ├── macOS.xcscheme
│ │ ├── tvOS.xcscheme
│ │ ├── visionOS.xcscheme
│ │ └── watchOS.xcscheme
├── Package.swift
├── Platforms
│ ├── iOS
│ │ ├── Assets.xcassets
│ │ │ ├── AccentColor.colorset
│ │ │ │ └── Contents.json
│ │ │ ├── AppIcon.appiconset
│ │ │ │ └── Contents.json
│ │ │ └── Contents.json
│ │ └── PhoneApp.swift
│ ├── iPadOS
│ │ ├── Assets.xcassets
│ │ │ ├── AccentColor.colorset
│ │ │ │ └── Contents.json
│ │ │ ├── AppIcon.appiconset
│ │ │ │ └── Contents.json
│ │ │ └── Contents.json
│ │ └── PadApp.swift
│ ├── macOS
│ │ ├── Assets.xcassets
│ │ │ ├── AccentColor.colorset
│ │ │ │ └── Contents.json
│ │ │ ├── AppIcon.appiconset
│ │ │ │ └── Contents.json
│ │ │ └── Contents.json
│ │ └── MacApp.swift
│ ├── tvOS
│ │ ├── Assets.xcassets
│ │ │ ├── AccentColor.colorset
│ │ │ │ └── Contents.json
│ │ │ ├── App Icon & Top Shelf Image.brandassets
│ │ │ │ ├── App Icon - App Store.imagestack
│ │ │ │ │ ├── Back.imagestacklayer
│ │ │ │ │ │ ├── Content.imageset
│ │ │ │ │ │ │ └── Contents.json
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── Front.imagestacklayer
│ │ │ │ │ │ ├── Content.imageset
│ │ │ │ │ │ │ └── Contents.json
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ └── Middle.imagestacklayer
│ │ │ │ │ │ ├── Content.imageset
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ │ └── Contents.json
│ │ │ │ ├── App Icon.imagestack
│ │ │ │ │ ├── Back.imagestacklayer
│ │ │ │ │ │ ├── Content.imageset
│ │ │ │ │ │ │ └── Contents.json
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── Front.imagestacklayer
│ │ │ │ │ │ ├── Content.imageset
│ │ │ │ │ │ │ └── Contents.json
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ └── Middle.imagestacklayer
│ │ │ │ │ │ ├── Content.imageset
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ │ └── Contents.json
│ │ │ │ ├── Contents.json
│ │ │ │ ├── Top Shelf Image Wide.imageset
│ │ │ │ │ └── Contents.json
│ │ │ │ └── Top Shelf Image.imageset
│ │ │ │ │ └── Contents.json
│ │ │ └── Contents.json
│ │ └── TVApp.swift
│ ├── visionOS
│ │ ├── Assets.xcassets
│ │ │ ├── AppIcon.solidimagestack
│ │ │ │ ├── Back.solidimagestacklayer
│ │ │ │ │ ├── Content.imageset
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Contents.json
│ │ │ │ ├── Front.solidimagestacklayer
│ │ │ │ │ ├── Content.imageset
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ └── Contents.json
│ │ │ │ └── Middle.solidimagestacklayer
│ │ │ │ │ ├── Content.imageset
│ │ │ │ │ └── Contents.json
│ │ │ │ │ └── Contents.json
│ │ │ └── Contents.json
│ │ └── VisionApp.swift
│ └── watchOS
│ │ ├── Assets.xcassets
│ │ ├── AccentColor.colorset
│ │ │ └── Contents.json
│ │ ├── AppIcon.appiconset
│ │ │ └── Contents.json
│ │ └── Contents.json
│ │ └── WatchApp.swift
└── TestPlans
│ └── AppTests.xctestplan
├── LICENSE
├── Makefile
├── Package.swift
├── README.md
├── Sources
├── AppCore
│ └── AppCore.swift
└── AppUI
│ └── ContentView.swift
└── Tests
├── AppCoreTests
└── AppCoreTests.swift
└── AppUITests
└── AppUITests.swift
/.github/workflows/ci.yml:
--------------------------------------------------------------------------------
1 | name: CI
2 |
3 | on:
4 | push:
5 | branches:
6 | - main
7 | pull_request:
8 | branches:
9 | - '*'
10 |
11 | concurrency:
12 | group: ${{ github.workflow }}-${{ github.ref }}
13 | cancel-in-progress: true
14 |
15 | jobs:
16 | ci:
17 | runs-on: macos-15
18 | timeout-minutes: 30
19 |
20 | steps:
21 | - uses: actions/checkout@v3
22 | - uses: maxim-lobanov/setup-xcode@v1.6.0
23 | with:
24 | xcode-version: '16.2'
25 | - name: Build and Test
26 | run: make test
27 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | /.build
3 | /Packages
4 | xcuserdata/
5 | DerivedData/
6 | .swiftpm/configuration/registries.json
7 | .swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
8 | .netrc
9 |
--------------------------------------------------------------------------------
/.swiftpm/xcode/package.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/.swiftpm/xcode/xcshareddata/xcschemes/AppCore.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
34 |
35 |
36 |
37 |
47 |
48 |
54 |
55 |
61 |
62 |
63 |
64 |
66 |
67 |
70 |
71 |
72 |
--------------------------------------------------------------------------------
/.swiftpm/xcode/xcshareddata/xcschemes/AppTests.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
14 |
15 |
18 |
19 |
20 |
21 |
23 |
29 |
30 |
31 |
32 |
33 |
43 |
44 |
50 |
51 |
53 |
54 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/.swiftpm/xcode/xcshareddata/xcschemes/AppUI.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
34 |
35 |
36 |
37 |
47 |
48 |
54 |
55 |
61 |
62 |
63 |
64 |
66 |
67 |
70 |
71 |
72 |
--------------------------------------------------------------------------------
/App/AppProject.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 56;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | C3D4DF662B78BF0200824E65 /* WatchApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3D4DF612B78BF0200824E65 /* WatchApp.swift */; };
11 | C3D4DF672B78BF0200824E65 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C3D4DF622B78BF0200824E65 /* Assets.xcassets */; };
12 | C3D4DF6D2B78C68600824E65 /* AppCore in Frameworks */ = {isa = PBXBuildFile; productRef = C3D4DF6C2B78C68600824E65 /* AppCore */; };
13 | C3D4DF6F2B78C68900824E65 /* AppUI in Frameworks */ = {isa = PBXBuildFile; productRef = C3D4DF6E2B78C68900824E65 /* AppUI */; };
14 | C3D4DF712B78C69200824E65 /* AppCore in Frameworks */ = {isa = PBXBuildFile; productRef = C3D4DF702B78C69200824E65 /* AppCore */; };
15 | C3D4DF732B78C69200824E65 /* AppUI in Frameworks */ = {isa = PBXBuildFile; productRef = C3D4DF722B78C69200824E65 /* AppUI */; };
16 | C3D4DF752B78C69D00824E65 /* AppCore in Frameworks */ = {isa = PBXBuildFile; productRef = C3D4DF742B78C69D00824E65 /* AppCore */; };
17 | C3D4DF772B78C69D00824E65 /* AppUI in Frameworks */ = {isa = PBXBuildFile; productRef = C3D4DF762B78C69D00824E65 /* AppUI */; };
18 | C3D4DF792B78C6A300824E65 /* AppCore in Frameworks */ = {isa = PBXBuildFile; productRef = C3D4DF782B78C6A300824E65 /* AppCore */; };
19 | C3D4DF7B2B78C6A300824E65 /* AppUI in Frameworks */ = {isa = PBXBuildFile; productRef = C3D4DF7A2B78C6A300824E65 /* AppUI */; };
20 | C3D4DF7D2B78C6AA00824E65 /* AppCore in Frameworks */ = {isa = PBXBuildFile; productRef = C3D4DF7C2B78C6AA00824E65 /* AppCore */; };
21 | C3D4DF7F2B78C6AA00824E65 /* AppUI in Frameworks */ = {isa = PBXBuildFile; productRef = C3D4DF7E2B78C6AA00824E65 /* AppUI */; };
22 | C3D4DF812B78C6B100824E65 /* AppCore in Frameworks */ = {isa = PBXBuildFile; productRef = C3D4DF802B78C6B100824E65 /* AppCore */; };
23 | C3D4DF832B78C6B100824E65 /* AppUI in Frameworks */ = {isa = PBXBuildFile; productRef = C3D4DF822B78C6B100824E65 /* AppUI */; };
24 | C3DC6EB62B78B76000E1968B /* MacApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3DC6EB52B78B76000E1968B /* MacApp.swift */; };
25 | C3DC6EBA2B78B76100E1968B /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C3DC6EB92B78B76100E1968B /* Assets.xcassets */; };
26 | C3DC6EC92B78B86300E1968B /* TVApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3DC6EC82B78B86300E1968B /* TVApp.swift */; };
27 | C3DC6ECD2B78B86400E1968B /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C3DC6ECC2B78B86400E1968B /* Assets.xcassets */; };
28 | C3DC6EDB2B78B8E800E1968B /* PhoneApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3DC6EDA2B78B8E800E1968B /* PhoneApp.swift */; };
29 | C3DC6EDF2B78B8E900E1968B /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C3DC6EDE2B78B8E900E1968B /* Assets.xcassets */; };
30 | C3E08D322B78B9DF00659303 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C3E08D2D2B78B9DF00659303 /* Assets.xcassets */; };
31 | C3E08D342B78B9DF00659303 /* PadApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3E08D302B78B9DF00659303 /* PadApp.swift */; };
32 | C3E08D422B78BA6A00659303 /* VisionApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3E08D412B78BA6A00659303 /* VisionApp.swift */; };
33 | C3E08D462B78BA6B00659303 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C3E08D452B78BA6B00659303 /* Assets.xcassets */; };
34 | C3E08D692B78BEA800659303 /* watchOS.app in Embed Watch Content */ = {isa = PBXBuildFile; fileRef = C3E08D5C2B78BEA700659303 /* watchOS.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
35 | /* End PBXBuildFile section */
36 |
37 | /* Begin PBXContainerItemProxy section */
38 | C3E08D672B78BEA800659303 /* PBXContainerItemProxy */ = {
39 | isa = PBXContainerItemProxy;
40 | containerPortal = C3F0AC442B2EE3A900D2165B /* Project object */;
41 | proxyType = 1;
42 | remoteGlobalIDString = C3E08D5B2B78BEA700659303;
43 | remoteInfo = "watchOS Watch App";
44 | };
45 | /* End PBXContainerItemProxy section */
46 |
47 | /* Begin PBXCopyFilesBuildPhase section */
48 | C3E08D6D2B78BEA800659303 /* Embed Watch Content */ = {
49 | isa = PBXCopyFilesBuildPhase;
50 | buildActionMask = 2147483647;
51 | dstPath = "$(CONTENTS_FOLDER_PATH)/Watch";
52 | dstSubfolderSpec = 16;
53 | files = (
54 | C3E08D692B78BEA800659303 /* watchOS.app in Embed Watch Content */,
55 | );
56 | name = "Embed Watch Content";
57 | runOnlyForDeploymentPostprocessing = 0;
58 | };
59 | /* End PBXCopyFilesBuildPhase section */
60 |
61 | /* Begin PBXFileReference section */
62 | C3CAD57F2B78C8CA00C7344D /* AppTests.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = AppTests.xctestplan; sourceTree = ""; };
63 | C3D2A16C2B6E32340059EADC /* AppPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = AppPackage; path = ..; sourceTree = ""; };
64 | C3D4DF612B78BF0200824E65 /* WatchApp.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WatchApp.swift; sourceTree = ""; };
65 | C3D4DF622B78BF0200824E65 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
66 | C3DC6EB32B78B76000E1968B /* macOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = macOS.app; sourceTree = BUILT_PRODUCTS_DIR; };
67 | C3DC6EB52B78B76000E1968B /* MacApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MacApp.swift; sourceTree = ""; };
68 | C3DC6EB92B78B76100E1968B /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
69 | C3DC6EC62B78B86300E1968B /* tvOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tvOS.app; sourceTree = BUILT_PRODUCTS_DIR; };
70 | C3DC6EC82B78B86300E1968B /* TVApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TVApp.swift; sourceTree = ""; };
71 | C3DC6ECC2B78B86400E1968B /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
72 | C3DC6ED82B78B8E800E1968B /* iOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = iOS.app; sourceTree = BUILT_PRODUCTS_DIR; };
73 | C3DC6EDA2B78B8E800E1968B /* PhoneApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhoneApp.swift; sourceTree = ""; };
74 | C3DC6EDE2B78B8E900E1968B /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
75 | C3DC6EEA2B78B9A200E1968B /* iPadOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = iPadOS.app; sourceTree = BUILT_PRODUCTS_DIR; };
76 | C3E08D2D2B78B9DF00659303 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
77 | C3E08D302B78B9DF00659303 /* PadApp.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PadApp.swift; sourceTree = ""; };
78 | C3E08D3B2B78BA6A00659303 /* visionOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = visionOS.app; sourceTree = BUILT_PRODUCTS_DIR; };
79 | C3E08D412B78BA6A00659303 /* VisionApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VisionApp.swift; sourceTree = ""; };
80 | C3E08D452B78BA6B00659303 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
81 | C3E08D5C2B78BEA700659303 /* watchOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = watchOS.app; sourceTree = BUILT_PRODUCTS_DIR; };
82 | /* End PBXFileReference section */
83 |
84 | /* Begin PBXFrameworksBuildPhase section */
85 | C3DC6EB02B78B76000E1968B /* Frameworks */ = {
86 | isa = PBXFrameworksBuildPhase;
87 | buildActionMask = 2147483647;
88 | files = (
89 | C3D4DF772B78C69D00824E65 /* AppUI in Frameworks */,
90 | C3D4DF752B78C69D00824E65 /* AppCore in Frameworks */,
91 | );
92 | runOnlyForDeploymentPostprocessing = 0;
93 | };
94 | C3DC6EC32B78B86300E1968B /* Frameworks */ = {
95 | isa = PBXFrameworksBuildPhase;
96 | buildActionMask = 2147483647;
97 | files = (
98 | C3D4DF7B2B78C6A300824E65 /* AppUI in Frameworks */,
99 | C3D4DF792B78C6A300824E65 /* AppCore in Frameworks */,
100 | );
101 | runOnlyForDeploymentPostprocessing = 0;
102 | };
103 | C3DC6ED52B78B8E800E1968B /* Frameworks */ = {
104 | isa = PBXFrameworksBuildPhase;
105 | buildActionMask = 2147483647;
106 | files = (
107 | C3D4DF6F2B78C68900824E65 /* AppUI in Frameworks */,
108 | C3D4DF6D2B78C68600824E65 /* AppCore in Frameworks */,
109 | );
110 | runOnlyForDeploymentPostprocessing = 0;
111 | };
112 | C3DC6EE72B78B9A200E1968B /* Frameworks */ = {
113 | isa = PBXFrameworksBuildPhase;
114 | buildActionMask = 2147483647;
115 | files = (
116 | C3D4DF732B78C69200824E65 /* AppUI in Frameworks */,
117 | C3D4DF712B78C69200824E65 /* AppCore in Frameworks */,
118 | );
119 | runOnlyForDeploymentPostprocessing = 0;
120 | };
121 | C3E08D382B78BA6A00659303 /* Frameworks */ = {
122 | isa = PBXFrameworksBuildPhase;
123 | buildActionMask = 2147483647;
124 | files = (
125 | C3D4DF7F2B78C6AA00824E65 /* AppUI in Frameworks */,
126 | C3D4DF7D2B78C6AA00824E65 /* AppCore in Frameworks */,
127 | );
128 | runOnlyForDeploymentPostprocessing = 0;
129 | };
130 | C3E08D592B78BEA700659303 /* Frameworks */ = {
131 | isa = PBXFrameworksBuildPhase;
132 | buildActionMask = 2147483647;
133 | files = (
134 | C3D4DF832B78C6B100824E65 /* AppUI in Frameworks */,
135 | C3D4DF812B78C6B100824E65 /* AppCore in Frameworks */,
136 | );
137 | runOnlyForDeploymentPostprocessing = 0;
138 | };
139 | /* End PBXFrameworksBuildPhase section */
140 |
141 | /* Begin PBXGroup section */
142 | C3100B852B396A0600CD640B /* Platforms */ = {
143 | isa = PBXGroup;
144 | children = (
145 | C3DC6ED92B78B8E800E1968B /* iOS */,
146 | C3E08D2C2B78B9DF00659303 /* iPadOS */,
147 | C3DC6EB42B78B76000E1968B /* macOS */,
148 | C3DC6EC72B78B86300E1968B /* tvOS */,
149 | C3E08D3C2B78BA6A00659303 /* visionOS */,
150 | C3D4DF602B78BF0200824E65 /* watchOS */,
151 | );
152 | path = Platforms;
153 | sourceTree = "";
154 | };
155 | C3CAD57E2B78C8A000C7344D /* TestPlans */ = {
156 | isa = PBXGroup;
157 | children = (
158 | C3CAD57F2B78C8CA00C7344D /* AppTests.xctestplan */,
159 | );
160 | path = TestPlans;
161 | sourceTree = "";
162 | };
163 | C3D2A16D2B6E32BD0059EADC /* Frameworks */ = {
164 | isa = PBXGroup;
165 | children = (
166 | );
167 | name = Frameworks;
168 | sourceTree = "";
169 | };
170 | C3D4DF602B78BF0200824E65 /* watchOS */ = {
171 | isa = PBXGroup;
172 | children = (
173 | C3D4DF612B78BF0200824E65 /* WatchApp.swift */,
174 | C3D4DF622B78BF0200824E65 /* Assets.xcassets */,
175 | );
176 | name = watchOS;
177 | path = Platforms/watchOS;
178 | sourceTree = SOURCE_ROOT;
179 | };
180 | C3DC6EB42B78B76000E1968B /* macOS */ = {
181 | isa = PBXGroup;
182 | children = (
183 | C3DC6EB52B78B76000E1968B /* MacApp.swift */,
184 | C3DC6EB92B78B76100E1968B /* Assets.xcassets */,
185 | );
186 | path = macOS;
187 | sourceTree = "";
188 | };
189 | C3DC6EC72B78B86300E1968B /* tvOS */ = {
190 | isa = PBXGroup;
191 | children = (
192 | C3DC6EC82B78B86300E1968B /* TVApp.swift */,
193 | C3DC6ECC2B78B86400E1968B /* Assets.xcassets */,
194 | );
195 | path = tvOS;
196 | sourceTree = "";
197 | };
198 | C3DC6ED92B78B8E800E1968B /* iOS */ = {
199 | isa = PBXGroup;
200 | children = (
201 | C3DC6EDA2B78B8E800E1968B /* PhoneApp.swift */,
202 | C3DC6EDE2B78B8E900E1968B /* Assets.xcassets */,
203 | );
204 | path = iOS;
205 | sourceTree = "";
206 | };
207 | C3E08D2C2B78B9DF00659303 /* iPadOS */ = {
208 | isa = PBXGroup;
209 | children = (
210 | C3E08D302B78B9DF00659303 /* PadApp.swift */,
211 | C3E08D2D2B78B9DF00659303 /* Assets.xcassets */,
212 | );
213 | path = iPadOS;
214 | sourceTree = "";
215 | };
216 | C3E08D3C2B78BA6A00659303 /* visionOS */ = {
217 | isa = PBXGroup;
218 | children = (
219 | C3E08D412B78BA6A00659303 /* VisionApp.swift */,
220 | C3E08D452B78BA6B00659303 /* Assets.xcassets */,
221 | );
222 | path = visionOS;
223 | sourceTree = "";
224 | };
225 | C3F0AC432B2EE3A900D2165B = {
226 | isa = PBXGroup;
227 | children = (
228 | C3D2A16C2B6E32340059EADC /* AppPackage */,
229 | C3100B852B396A0600CD640B /* Platforms */,
230 | C3CAD57E2B78C8A000C7344D /* TestPlans */,
231 | C3F0AC4D2B2EE3A900D2165B /* Products */,
232 | C3D2A16D2B6E32BD0059EADC /* Frameworks */,
233 | );
234 | sourceTree = "";
235 | };
236 | C3F0AC4D2B2EE3A900D2165B /* Products */ = {
237 | isa = PBXGroup;
238 | children = (
239 | C3DC6EB32B78B76000E1968B /* macOS.app */,
240 | C3DC6EC62B78B86300E1968B /* tvOS.app */,
241 | C3DC6ED82B78B8E800E1968B /* iOS.app */,
242 | C3DC6EEA2B78B9A200E1968B /* iPadOS.app */,
243 | C3E08D3B2B78BA6A00659303 /* visionOS.app */,
244 | C3E08D5C2B78BEA700659303 /* watchOS.app */,
245 | );
246 | name = Products;
247 | sourceTree = "";
248 | };
249 | /* End PBXGroup section */
250 |
251 | /* Begin PBXNativeTarget section */
252 | C3DC6EB22B78B76000E1968B /* macOS */ = {
253 | isa = PBXNativeTarget;
254 | buildConfigurationList = C3DC6EC12B78B76100E1968B /* Build configuration list for PBXNativeTarget "macOS" */;
255 | buildPhases = (
256 | C3DC6EAF2B78B76000E1968B /* Sources */,
257 | C3DC6EB02B78B76000E1968B /* Frameworks */,
258 | C3DC6EB12B78B76000E1968B /* Resources */,
259 | );
260 | buildRules = (
261 | );
262 | dependencies = (
263 | );
264 | name = macOS;
265 | packageProductDependencies = (
266 | C3D4DF742B78C69D00824E65 /* AppCore */,
267 | C3D4DF762B78C69D00824E65 /* AppUI */,
268 | );
269 | productName = macOS;
270 | productReference = C3DC6EB32B78B76000E1968B /* macOS.app */;
271 | productType = "com.apple.product-type.application";
272 | };
273 | C3DC6EC52B78B86300E1968B /* tvOS */ = {
274 | isa = PBXNativeTarget;
275 | buildConfigurationList = C3DC6ED12B78B86400E1968B /* Build configuration list for PBXNativeTarget "tvOS" */;
276 | buildPhases = (
277 | C3DC6EC22B78B86300E1968B /* Sources */,
278 | C3DC6EC32B78B86300E1968B /* Frameworks */,
279 | C3DC6EC42B78B86300E1968B /* Resources */,
280 | );
281 | buildRules = (
282 | );
283 | dependencies = (
284 | );
285 | name = tvOS;
286 | packageProductDependencies = (
287 | C3D4DF782B78C6A300824E65 /* AppCore */,
288 | C3D4DF7A2B78C6A300824E65 /* AppUI */,
289 | );
290 | productName = tvOS;
291 | productReference = C3DC6EC62B78B86300E1968B /* tvOS.app */;
292 | productType = "com.apple.product-type.application";
293 | };
294 | C3DC6ED72B78B8E800E1968B /* iOS */ = {
295 | isa = PBXNativeTarget;
296 | buildConfigurationList = C3DC6EE32B78B8E900E1968B /* Build configuration list for PBXNativeTarget "iOS" */;
297 | buildPhases = (
298 | C3DC6ED42B78B8E800E1968B /* Sources */,
299 | C3DC6ED52B78B8E800E1968B /* Frameworks */,
300 | C3DC6ED62B78B8E800E1968B /* Resources */,
301 | C3E08D6D2B78BEA800659303 /* Embed Watch Content */,
302 | );
303 | buildRules = (
304 | );
305 | dependencies = (
306 | C3E08D682B78BEA800659303 /* PBXTargetDependency */,
307 | );
308 | name = iOS;
309 | packageProductDependencies = (
310 | C3D4DF6C2B78C68600824E65 /* AppCore */,
311 | C3D4DF6E2B78C68900824E65 /* AppUI */,
312 | );
313 | productName = iOS;
314 | productReference = C3DC6ED82B78B8E800E1968B /* iOS.app */;
315 | productType = "com.apple.product-type.application";
316 | };
317 | C3DC6EE92B78B9A200E1968B /* iPadOS */ = {
318 | isa = PBXNativeTarget;
319 | buildConfigurationList = C3DC6EF52B78B9A400E1968B /* Build configuration list for PBXNativeTarget "iPadOS" */;
320 | buildPhases = (
321 | C3DC6EE62B78B9A200E1968B /* Sources */,
322 | C3DC6EE72B78B9A200E1968B /* Frameworks */,
323 | C3DC6EE82B78B9A200E1968B /* Resources */,
324 | );
325 | buildRules = (
326 | );
327 | dependencies = (
328 | );
329 | name = iPadOS;
330 | packageProductDependencies = (
331 | C3D4DF702B78C69200824E65 /* AppCore */,
332 | C3D4DF722B78C69200824E65 /* AppUI */,
333 | );
334 | productName = iPadOS;
335 | productReference = C3DC6EEA2B78B9A200E1968B /* iPadOS.app */;
336 | productType = "com.apple.product-type.application";
337 | };
338 | C3E08D3A2B78BA6A00659303 /* visionOS */ = {
339 | isa = PBXNativeTarget;
340 | buildConfigurationList = C3E08D4B2B78BA6B00659303 /* Build configuration list for PBXNativeTarget "visionOS" */;
341 | buildPhases = (
342 | C3E08D372B78BA6A00659303 /* Sources */,
343 | C3E08D382B78BA6A00659303 /* Frameworks */,
344 | C3E08D392B78BA6A00659303 /* Resources */,
345 | );
346 | buildRules = (
347 | );
348 | dependencies = (
349 | );
350 | name = visionOS;
351 | packageProductDependencies = (
352 | C3D4DF7C2B78C6AA00824E65 /* AppCore */,
353 | C3D4DF7E2B78C6AA00824E65 /* AppUI */,
354 | );
355 | productName = visionOS;
356 | productReference = C3E08D3B2B78BA6A00659303 /* visionOS.app */;
357 | productType = "com.apple.product-type.application";
358 | };
359 | C3E08D5B2B78BEA700659303 /* watchOS */ = {
360 | isa = PBXNativeTarget;
361 | buildConfigurationList = C3E08D6A2B78BEA800659303 /* Build configuration list for PBXNativeTarget "watchOS" */;
362 | buildPhases = (
363 | C3E08D582B78BEA700659303 /* Sources */,
364 | C3E08D592B78BEA700659303 /* Frameworks */,
365 | C3E08D5A2B78BEA700659303 /* Resources */,
366 | );
367 | buildRules = (
368 | );
369 | dependencies = (
370 | );
371 | name = watchOS;
372 | packageProductDependencies = (
373 | C3D4DF802B78C6B100824E65 /* AppCore */,
374 | C3D4DF822B78C6B100824E65 /* AppUI */,
375 | );
376 | productName = "watchOS Watch App";
377 | productReference = C3E08D5C2B78BEA700659303 /* watchOS.app */;
378 | productType = "com.apple.product-type.application";
379 | };
380 | /* End PBXNativeTarget section */
381 |
382 | /* Begin PBXProject section */
383 | C3F0AC442B2EE3A900D2165B /* Project object */ = {
384 | isa = PBXProject;
385 | attributes = {
386 | BuildIndependentTargetsInParallel = 1;
387 | LastSwiftUpdateCheck = 1520;
388 | LastUpgradeCheck = 1520;
389 | TargetAttributes = {
390 | C3DC6EB22B78B76000E1968B = {
391 | CreatedOnToolsVersion = 15.2;
392 | };
393 | C3DC6EC52B78B86300E1968B = {
394 | CreatedOnToolsVersion = 15.2;
395 | };
396 | C3DC6ED72B78B8E800E1968B = {
397 | CreatedOnToolsVersion = 15.2;
398 | };
399 | C3DC6EE92B78B9A200E1968B = {
400 | CreatedOnToolsVersion = 15.2;
401 | };
402 | C3E08D3A2B78BA6A00659303 = {
403 | CreatedOnToolsVersion = 15.2;
404 | };
405 | C3E08D5B2B78BEA700659303 = {
406 | CreatedOnToolsVersion = 15.2;
407 | };
408 | };
409 | };
410 | buildConfigurationList = C3F0AC472B2EE3A900D2165B /* Build configuration list for PBXProject "AppProject" */;
411 | compatibilityVersion = "Xcode 14.0";
412 | developmentRegion = en;
413 | hasScannedForEncodings = 0;
414 | knownRegions = (
415 | en,
416 | Base,
417 | );
418 | mainGroup = C3F0AC432B2EE3A900D2165B;
419 | productRefGroup = C3F0AC4D2B2EE3A900D2165B /* Products */;
420 | projectDirPath = "";
421 | projectRoot = "";
422 | targets = (
423 | C3DC6ED72B78B8E800E1968B /* iOS */,
424 | C3DC6EE92B78B9A200E1968B /* iPadOS */,
425 | C3DC6EB22B78B76000E1968B /* macOS */,
426 | C3DC6EC52B78B86300E1968B /* tvOS */,
427 | C3E08D3A2B78BA6A00659303 /* visionOS */,
428 | C3E08D5B2B78BEA700659303 /* watchOS */,
429 | );
430 | };
431 | /* End PBXProject section */
432 |
433 | /* Begin PBXResourcesBuildPhase section */
434 | C3DC6EB12B78B76000E1968B /* Resources */ = {
435 | isa = PBXResourcesBuildPhase;
436 | buildActionMask = 2147483647;
437 | files = (
438 | C3DC6EBA2B78B76100E1968B /* Assets.xcassets in Resources */,
439 | );
440 | runOnlyForDeploymentPostprocessing = 0;
441 | };
442 | C3DC6EC42B78B86300E1968B /* Resources */ = {
443 | isa = PBXResourcesBuildPhase;
444 | buildActionMask = 2147483647;
445 | files = (
446 | C3DC6ECD2B78B86400E1968B /* Assets.xcassets in Resources */,
447 | );
448 | runOnlyForDeploymentPostprocessing = 0;
449 | };
450 | C3DC6ED62B78B8E800E1968B /* Resources */ = {
451 | isa = PBXResourcesBuildPhase;
452 | buildActionMask = 2147483647;
453 | files = (
454 | C3DC6EDF2B78B8E900E1968B /* Assets.xcassets in Resources */,
455 | );
456 | runOnlyForDeploymentPostprocessing = 0;
457 | };
458 | C3DC6EE82B78B9A200E1968B /* Resources */ = {
459 | isa = PBXResourcesBuildPhase;
460 | buildActionMask = 2147483647;
461 | files = (
462 | C3E08D322B78B9DF00659303 /* Assets.xcassets in Resources */,
463 | );
464 | runOnlyForDeploymentPostprocessing = 0;
465 | };
466 | C3E08D392B78BA6A00659303 /* Resources */ = {
467 | isa = PBXResourcesBuildPhase;
468 | buildActionMask = 2147483647;
469 | files = (
470 | C3E08D462B78BA6B00659303 /* Assets.xcassets in Resources */,
471 | );
472 | runOnlyForDeploymentPostprocessing = 0;
473 | };
474 | C3E08D5A2B78BEA700659303 /* Resources */ = {
475 | isa = PBXResourcesBuildPhase;
476 | buildActionMask = 2147483647;
477 | files = (
478 | C3D4DF672B78BF0200824E65 /* Assets.xcassets in Resources */,
479 | );
480 | runOnlyForDeploymentPostprocessing = 0;
481 | };
482 | /* End PBXResourcesBuildPhase section */
483 |
484 | /* Begin PBXSourcesBuildPhase section */
485 | C3DC6EAF2B78B76000E1968B /* Sources */ = {
486 | isa = PBXSourcesBuildPhase;
487 | buildActionMask = 2147483647;
488 | files = (
489 | C3DC6EB62B78B76000E1968B /* MacApp.swift in Sources */,
490 | );
491 | runOnlyForDeploymentPostprocessing = 0;
492 | };
493 | C3DC6EC22B78B86300E1968B /* Sources */ = {
494 | isa = PBXSourcesBuildPhase;
495 | buildActionMask = 2147483647;
496 | files = (
497 | C3DC6EC92B78B86300E1968B /* TVApp.swift in Sources */,
498 | );
499 | runOnlyForDeploymentPostprocessing = 0;
500 | };
501 | C3DC6ED42B78B8E800E1968B /* Sources */ = {
502 | isa = PBXSourcesBuildPhase;
503 | buildActionMask = 2147483647;
504 | files = (
505 | C3DC6EDB2B78B8E800E1968B /* PhoneApp.swift in Sources */,
506 | );
507 | runOnlyForDeploymentPostprocessing = 0;
508 | };
509 | C3DC6EE62B78B9A200E1968B /* Sources */ = {
510 | isa = PBXSourcesBuildPhase;
511 | buildActionMask = 2147483647;
512 | files = (
513 | C3E08D342B78B9DF00659303 /* PadApp.swift in Sources */,
514 | );
515 | runOnlyForDeploymentPostprocessing = 0;
516 | };
517 | C3E08D372B78BA6A00659303 /* Sources */ = {
518 | isa = PBXSourcesBuildPhase;
519 | buildActionMask = 2147483647;
520 | files = (
521 | C3E08D422B78BA6A00659303 /* VisionApp.swift in Sources */,
522 | );
523 | runOnlyForDeploymentPostprocessing = 0;
524 | };
525 | C3E08D582B78BEA700659303 /* Sources */ = {
526 | isa = PBXSourcesBuildPhase;
527 | buildActionMask = 2147483647;
528 | files = (
529 | C3D4DF662B78BF0200824E65 /* WatchApp.swift in Sources */,
530 | );
531 | runOnlyForDeploymentPostprocessing = 0;
532 | };
533 | /* End PBXSourcesBuildPhase section */
534 |
535 | /* Begin PBXTargetDependency section */
536 | C3E08D682B78BEA800659303 /* PBXTargetDependency */ = {
537 | isa = PBXTargetDependency;
538 | target = C3E08D5B2B78BEA700659303 /* watchOS */;
539 | targetProxy = C3E08D672B78BEA800659303 /* PBXContainerItemProxy */;
540 | };
541 | /* End PBXTargetDependency section */
542 |
543 | /* Begin XCBuildConfiguration section */
544 | C3DC6EBF2B78B76100E1968B /* Debug */ = {
545 | isa = XCBuildConfiguration;
546 | buildSettings = {
547 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
548 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
549 | CODE_SIGN_ENTITLEMENTS = "";
550 | CODE_SIGN_STYLE = Automatic;
551 | COMBINE_HIDPI_IMAGES = YES;
552 | CURRENT_PROJECT_VERSION = 1;
553 | DEAD_CODE_STRIPPING = YES;
554 | DEVELOPMENT_ASSET_PATHS = "";
555 | DEVELOPMENT_TEAM = T42V7M748Y;
556 | ENABLE_HARDENED_RUNTIME = YES;
557 | ENABLE_PREVIEWS = YES;
558 | GENERATE_INFOPLIST_FILE = YES;
559 | INFOPLIST_KEY_NSHumanReadableCopyright = "";
560 | LD_RUNPATH_SEARCH_PATHS = (
561 | "$(inherited)",
562 | "@executable_path/../Frameworks",
563 | );
564 | MACOSX_DEPLOYMENT_TARGET = 12.0;
565 | MARKETING_VERSION = 1.0;
566 | PRODUCT_BUNDLE_IDENTIFIER = com.devyeom.app.macOS;
567 | PRODUCT_NAME = "$(TARGET_NAME)";
568 | SDKROOT = macosx;
569 | SWIFT_EMIT_LOC_STRINGS = YES;
570 | SWIFT_VERSION = 6.0;
571 | };
572 | name = Debug;
573 | };
574 | C3DC6EC02B78B76100E1968B /* Release */ = {
575 | isa = XCBuildConfiguration;
576 | buildSettings = {
577 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
578 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
579 | CODE_SIGN_ENTITLEMENTS = "";
580 | CODE_SIGN_STYLE = Automatic;
581 | COMBINE_HIDPI_IMAGES = YES;
582 | CURRENT_PROJECT_VERSION = 1;
583 | DEAD_CODE_STRIPPING = YES;
584 | DEVELOPMENT_ASSET_PATHS = "";
585 | DEVELOPMENT_TEAM = T42V7M748Y;
586 | ENABLE_HARDENED_RUNTIME = YES;
587 | ENABLE_PREVIEWS = YES;
588 | GENERATE_INFOPLIST_FILE = YES;
589 | INFOPLIST_KEY_NSHumanReadableCopyright = "";
590 | LD_RUNPATH_SEARCH_PATHS = (
591 | "$(inherited)",
592 | "@executable_path/../Frameworks",
593 | );
594 | MACOSX_DEPLOYMENT_TARGET = 12.0;
595 | MARKETING_VERSION = 1.0;
596 | PRODUCT_BUNDLE_IDENTIFIER = com.devyeom.app.macOS;
597 | PRODUCT_NAME = "$(TARGET_NAME)";
598 | SDKROOT = macosx;
599 | SWIFT_EMIT_LOC_STRINGS = YES;
600 | SWIFT_VERSION = 6.0;
601 | };
602 | name = Release;
603 | };
604 | C3DC6ED22B78B86400E1968B /* Debug */ = {
605 | isa = XCBuildConfiguration;
606 | buildSettings = {
607 | ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
608 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
609 | CODE_SIGN_STYLE = Automatic;
610 | CURRENT_PROJECT_VERSION = 1;
611 | DEVELOPMENT_ASSET_PATHS = "";
612 | DEVELOPMENT_TEAM = T42V7M748Y;
613 | ENABLE_PREVIEWS = YES;
614 | GENERATE_INFOPLIST_FILE = YES;
615 | INFOPLIST_KEY_UILaunchScreen_Generation = YES;
616 | INFOPLIST_KEY_UIUserInterfaceStyle = Automatic;
617 | LD_RUNPATH_SEARCH_PATHS = (
618 | "$(inherited)",
619 | "@executable_path/Frameworks",
620 | );
621 | MARKETING_VERSION = 1.0;
622 | PRODUCT_BUNDLE_IDENTIFIER = com.devyeom.app.tvOS;
623 | PRODUCT_NAME = "$(TARGET_NAME)";
624 | SDKROOT = appletvos;
625 | SWIFT_EMIT_LOC_STRINGS = YES;
626 | SWIFT_VERSION = 6.0;
627 | TARGETED_DEVICE_FAMILY = 3;
628 | TVOS_DEPLOYMENT_TARGET = 15.0;
629 | };
630 | name = Debug;
631 | };
632 | C3DC6ED32B78B86400E1968B /* Release */ = {
633 | isa = XCBuildConfiguration;
634 | buildSettings = {
635 | ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
636 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
637 | CODE_SIGN_STYLE = Automatic;
638 | CURRENT_PROJECT_VERSION = 1;
639 | DEVELOPMENT_ASSET_PATHS = "";
640 | DEVELOPMENT_TEAM = T42V7M748Y;
641 | ENABLE_PREVIEWS = YES;
642 | GENERATE_INFOPLIST_FILE = YES;
643 | INFOPLIST_KEY_UILaunchScreen_Generation = YES;
644 | INFOPLIST_KEY_UIUserInterfaceStyle = Automatic;
645 | LD_RUNPATH_SEARCH_PATHS = (
646 | "$(inherited)",
647 | "@executable_path/Frameworks",
648 | );
649 | MARKETING_VERSION = 1.0;
650 | PRODUCT_BUNDLE_IDENTIFIER = com.devyeom.app.tvOS;
651 | PRODUCT_NAME = "$(TARGET_NAME)";
652 | SDKROOT = appletvos;
653 | SWIFT_EMIT_LOC_STRINGS = YES;
654 | SWIFT_VERSION = 6.0;
655 | TARGETED_DEVICE_FAMILY = 3;
656 | TVOS_DEPLOYMENT_TARGET = 15.0;
657 | VALIDATE_PRODUCT = YES;
658 | };
659 | name = Release;
660 | };
661 | C3DC6EE42B78B8E900E1968B /* Debug */ = {
662 | isa = XCBuildConfiguration;
663 | buildSettings = {
664 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
665 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
666 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
667 | CODE_SIGN_ENTITLEMENTS = "";
668 | CODE_SIGN_STYLE = Automatic;
669 | CURRENT_PROJECT_VERSION = 1;
670 | DEVELOPMENT_ASSET_PATHS = "";
671 | DEVELOPMENT_TEAM = T42V7M748Y;
672 | ENABLE_PREVIEWS = YES;
673 | GENERATE_INFOPLIST_FILE = YES;
674 | INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
675 | INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
676 | INFOPLIST_KEY_UILaunchScreen_Generation = YES;
677 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
678 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
679 | IPHONEOS_DEPLOYMENT_TARGET = 15.0;
680 | LD_RUNPATH_SEARCH_PATHS = (
681 | "$(inherited)",
682 | "@executable_path/Frameworks",
683 | );
684 | MARKETING_VERSION = 1.0;
685 | PRODUCT_BUNDLE_IDENTIFIER = com.devyeom.app.iOS;
686 | PRODUCT_NAME = "$(TARGET_NAME)";
687 | SDKROOT = iphoneos;
688 | SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
689 | SUPPORTS_MACCATALYST = NO;
690 | SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
691 | SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
692 | SWIFT_EMIT_LOC_STRINGS = YES;
693 | SWIFT_VERSION = 6.0;
694 | TARGETED_DEVICE_FAMILY = 1;
695 | };
696 | name = Debug;
697 | };
698 | C3DC6EE52B78B8E900E1968B /* Release */ = {
699 | isa = XCBuildConfiguration;
700 | buildSettings = {
701 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
702 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
703 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
704 | CODE_SIGN_ENTITLEMENTS = "";
705 | CODE_SIGN_STYLE = Automatic;
706 | CURRENT_PROJECT_VERSION = 1;
707 | DEVELOPMENT_ASSET_PATHS = "";
708 | DEVELOPMENT_TEAM = T42V7M748Y;
709 | ENABLE_PREVIEWS = YES;
710 | GENERATE_INFOPLIST_FILE = YES;
711 | INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
712 | INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
713 | INFOPLIST_KEY_UILaunchScreen_Generation = YES;
714 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
715 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
716 | IPHONEOS_DEPLOYMENT_TARGET = 15.0;
717 | LD_RUNPATH_SEARCH_PATHS = (
718 | "$(inherited)",
719 | "@executable_path/Frameworks",
720 | );
721 | MARKETING_VERSION = 1.0;
722 | PRODUCT_BUNDLE_IDENTIFIER = com.devyeom.app.iOS;
723 | PRODUCT_NAME = "$(TARGET_NAME)";
724 | SDKROOT = iphoneos;
725 | SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
726 | SUPPORTS_MACCATALYST = NO;
727 | SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
728 | SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
729 | SWIFT_EMIT_LOC_STRINGS = YES;
730 | SWIFT_VERSION = 6.0;
731 | TARGETED_DEVICE_FAMILY = 1;
732 | VALIDATE_PRODUCT = YES;
733 | };
734 | name = Release;
735 | };
736 | C3DC6EF62B78B9A400E1968B /* Debug */ = {
737 | isa = XCBuildConfiguration;
738 | buildSettings = {
739 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
740 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
741 | CODE_SIGN_ENTITLEMENTS = "";
742 | CODE_SIGN_STYLE = Automatic;
743 | CURRENT_PROJECT_VERSION = 1;
744 | DEVELOPMENT_ASSET_PATHS = "";
745 | DEVELOPMENT_TEAM = T42V7M748Y;
746 | ENABLE_PREVIEWS = YES;
747 | GENERATE_INFOPLIST_FILE = YES;
748 | INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
749 | INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
750 | INFOPLIST_KEY_UILaunchScreen_Generation = YES;
751 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
752 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
753 | IPHONEOS_DEPLOYMENT_TARGET = 15.0;
754 | LD_RUNPATH_SEARCH_PATHS = (
755 | "$(inherited)",
756 | "@executable_path/Frameworks",
757 | );
758 | MARKETING_VERSION = 1.0;
759 | PRODUCT_BUNDLE_IDENTIFIER = com.devyeom.app.iPadOS;
760 | PRODUCT_NAME = "$(TARGET_NAME)";
761 | SDKROOT = iphoneos;
762 | SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
763 | SUPPORTS_MACCATALYST = NO;
764 | SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
765 | SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
766 | SWIFT_EMIT_LOC_STRINGS = YES;
767 | SWIFT_VERSION = 6.0;
768 | TARGETED_DEVICE_FAMILY = 2;
769 | };
770 | name = Debug;
771 | };
772 | C3DC6EF72B78B9A400E1968B /* Release */ = {
773 | isa = XCBuildConfiguration;
774 | buildSettings = {
775 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
776 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
777 | CODE_SIGN_ENTITLEMENTS = "";
778 | CODE_SIGN_STYLE = Automatic;
779 | CURRENT_PROJECT_VERSION = 1;
780 | DEVELOPMENT_ASSET_PATHS = "";
781 | DEVELOPMENT_TEAM = T42V7M748Y;
782 | ENABLE_PREVIEWS = YES;
783 | GENERATE_INFOPLIST_FILE = YES;
784 | INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
785 | INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
786 | INFOPLIST_KEY_UILaunchScreen_Generation = YES;
787 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
788 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
789 | IPHONEOS_DEPLOYMENT_TARGET = 15.0;
790 | LD_RUNPATH_SEARCH_PATHS = (
791 | "$(inherited)",
792 | "@executable_path/Frameworks",
793 | );
794 | MARKETING_VERSION = 1.0;
795 | PRODUCT_BUNDLE_IDENTIFIER = com.devyeom.app.iPadOS;
796 | PRODUCT_NAME = "$(TARGET_NAME)";
797 | SDKROOT = iphoneos;
798 | SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
799 | SUPPORTS_MACCATALYST = NO;
800 | SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
801 | SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
802 | SWIFT_EMIT_LOC_STRINGS = YES;
803 | SWIFT_VERSION = 6.0;
804 | TARGETED_DEVICE_FAMILY = 2;
805 | VALIDATE_PRODUCT = YES;
806 | };
807 | name = Release;
808 | };
809 | C3E08D4C2B78BA6B00659303 /* Debug */ = {
810 | isa = XCBuildConfiguration;
811 | buildSettings = {
812 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
813 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
814 | CODE_SIGN_STYLE = Automatic;
815 | CURRENT_PROJECT_VERSION = 1;
816 | DEVELOPMENT_ASSET_PATHS = "";
817 | DEVELOPMENT_TEAM = T42V7M748Y;
818 | ENABLE_PREVIEWS = YES;
819 | GENERATE_INFOPLIST_FILE = YES;
820 | INFOPLIST_FILE = "";
821 | LD_RUNPATH_SEARCH_PATHS = (
822 | "$(inherited)",
823 | "@executable_path/Frameworks",
824 | );
825 | MARKETING_VERSION = 1.0;
826 | PRODUCT_BUNDLE_IDENTIFIER = com.devyeom.app.visionOS;
827 | PRODUCT_NAME = "$(TARGET_NAME)";
828 | SDKROOT = xros;
829 | SUPPORTED_PLATFORMS = "xros xrsimulator";
830 | SWIFT_EMIT_LOC_STRINGS = YES;
831 | SWIFT_VERSION = 6.0;
832 | TARGETED_DEVICE_FAMILY = "1,2,7";
833 | XROS_DEPLOYMENT_TARGET = 1.0;
834 | };
835 | name = Debug;
836 | };
837 | C3E08D4D2B78BA6B00659303 /* Release */ = {
838 | isa = XCBuildConfiguration;
839 | buildSettings = {
840 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
841 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
842 | CODE_SIGN_STYLE = Automatic;
843 | CURRENT_PROJECT_VERSION = 1;
844 | DEVELOPMENT_ASSET_PATHS = "";
845 | DEVELOPMENT_TEAM = T42V7M748Y;
846 | ENABLE_PREVIEWS = YES;
847 | GENERATE_INFOPLIST_FILE = YES;
848 | INFOPLIST_FILE = "";
849 | LD_RUNPATH_SEARCH_PATHS = (
850 | "$(inherited)",
851 | "@executable_path/Frameworks",
852 | );
853 | MARKETING_VERSION = 1.0;
854 | PRODUCT_BUNDLE_IDENTIFIER = com.devyeom.app.visionOS;
855 | PRODUCT_NAME = "$(TARGET_NAME)";
856 | SDKROOT = xros;
857 | SUPPORTED_PLATFORMS = "xros xrsimulator";
858 | SWIFT_EMIT_LOC_STRINGS = YES;
859 | SWIFT_VERSION = 6.0;
860 | TARGETED_DEVICE_FAMILY = "1,2,7";
861 | VALIDATE_PRODUCT = YES;
862 | XROS_DEPLOYMENT_TARGET = 1.0;
863 | };
864 | name = Release;
865 | };
866 | C3E08D6B2B78BEA800659303 /* Debug */ = {
867 | isa = XCBuildConfiguration;
868 | buildSettings = {
869 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
870 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
871 | CODE_SIGN_STYLE = Automatic;
872 | CURRENT_PROJECT_VERSION = 1;
873 | DEVELOPMENT_ASSET_PATHS = "";
874 | DEVELOPMENT_TEAM = T42V7M748Y;
875 | ENABLE_PREVIEWS = YES;
876 | GENERATE_INFOPLIST_FILE = YES;
877 | INFOPLIST_KEY_CFBundleDisplayName = watchOS;
878 | INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown";
879 | INFOPLIST_KEY_WKCompanionAppBundleIdentifier = com.devyeom.app.iOS;
880 | INFOPLIST_KEY_WKRunsIndependentlyOfCompanionApp = YES;
881 | LD_RUNPATH_SEARCH_PATHS = (
882 | "$(inherited)",
883 | "@executable_path/Frameworks",
884 | );
885 | MARKETING_VERSION = 1.0;
886 | PRODUCT_BUNDLE_IDENTIFIER = com.devyeom.app.iOS.watchOS;
887 | PRODUCT_NAME = "$(TARGET_NAME)";
888 | SDKROOT = watchos;
889 | SKIP_INSTALL = YES;
890 | SWIFT_EMIT_LOC_STRINGS = YES;
891 | SWIFT_VERSION = 6.0;
892 | TARGETED_DEVICE_FAMILY = 4;
893 | WATCHOS_DEPLOYMENT_TARGET = 8.0;
894 | };
895 | name = Debug;
896 | };
897 | C3E08D6C2B78BEA800659303 /* Release */ = {
898 | isa = XCBuildConfiguration;
899 | buildSettings = {
900 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
901 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
902 | CODE_SIGN_STYLE = Automatic;
903 | CURRENT_PROJECT_VERSION = 1;
904 | DEVELOPMENT_ASSET_PATHS = "";
905 | DEVELOPMENT_TEAM = T42V7M748Y;
906 | ENABLE_PREVIEWS = YES;
907 | GENERATE_INFOPLIST_FILE = YES;
908 | INFOPLIST_KEY_CFBundleDisplayName = watchOS;
909 | INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown";
910 | INFOPLIST_KEY_WKCompanionAppBundleIdentifier = com.devyeom.app.iOS;
911 | INFOPLIST_KEY_WKRunsIndependentlyOfCompanionApp = YES;
912 | LD_RUNPATH_SEARCH_PATHS = (
913 | "$(inherited)",
914 | "@executable_path/Frameworks",
915 | );
916 | MARKETING_VERSION = 1.0;
917 | PRODUCT_BUNDLE_IDENTIFIER = com.devyeom.app.iOS.watchOS;
918 | PRODUCT_NAME = "$(TARGET_NAME)";
919 | SDKROOT = watchos;
920 | SKIP_INSTALL = YES;
921 | SWIFT_EMIT_LOC_STRINGS = YES;
922 | SWIFT_VERSION = 6.0;
923 | TARGETED_DEVICE_FAMILY = 4;
924 | VALIDATE_PRODUCT = YES;
925 | WATCHOS_DEPLOYMENT_TARGET = 8.0;
926 | };
927 | name = Release;
928 | };
929 | C3F0AC722B2EE3AA00D2165B /* Debug */ = {
930 | isa = XCBuildConfiguration;
931 | buildSettings = {
932 | ALWAYS_SEARCH_USER_PATHS = NO;
933 | ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
934 | CLANG_ANALYZER_NONNULL = YES;
935 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
936 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
937 | CLANG_ENABLE_MODULES = YES;
938 | CLANG_ENABLE_OBJC_ARC = YES;
939 | CLANG_ENABLE_OBJC_WEAK = YES;
940 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
941 | CLANG_WARN_BOOL_CONVERSION = YES;
942 | CLANG_WARN_COMMA = YES;
943 | CLANG_WARN_CONSTANT_CONVERSION = YES;
944 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
945 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
946 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
947 | CLANG_WARN_EMPTY_BODY = YES;
948 | CLANG_WARN_ENUM_CONVERSION = YES;
949 | CLANG_WARN_INFINITE_RECURSION = YES;
950 | CLANG_WARN_INT_CONVERSION = YES;
951 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
952 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
953 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
954 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
955 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
956 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
957 | CLANG_WARN_STRICT_PROTOTYPES = YES;
958 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
959 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
960 | CLANG_WARN_UNREACHABLE_CODE = YES;
961 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
962 | COPY_PHASE_STRIP = NO;
963 | DEAD_CODE_STRIPPING = YES;
964 | DEBUG_INFORMATION_FORMAT = dwarf;
965 | ENABLE_STRICT_OBJC_MSGSEND = YES;
966 | ENABLE_TESTABILITY = YES;
967 | ENABLE_USER_SCRIPT_SANDBOXING = YES;
968 | GCC_C_LANGUAGE_STANDARD = gnu17;
969 | GCC_DYNAMIC_NO_PIC = NO;
970 | GCC_NO_COMMON_BLOCKS = YES;
971 | GCC_OPTIMIZATION_LEVEL = 0;
972 | GCC_PREPROCESSOR_DEFINITIONS = (
973 | "DEBUG=1",
974 | "$(inherited)",
975 | );
976 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
977 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
978 | GCC_WARN_UNDECLARED_SELECTOR = YES;
979 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
980 | GCC_WARN_UNUSED_FUNCTION = YES;
981 | GCC_WARN_UNUSED_VARIABLE = YES;
982 | IPHONEOS_DEPLOYMENT_TARGET = 15.0;
983 | LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
984 | MACOSX_DEPLOYMENT_TARGET = 12.0;
985 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
986 | MTL_FAST_MATH = YES;
987 | ONLY_ACTIVE_ARCH = YES;
988 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
989 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
990 | SWIFT_VERSION = 6.0;
991 | TVOS_DEPLOYMENT_TARGET = 15.0;
992 | WATCHOS_DEPLOYMENT_TARGET = 8.0;
993 | XROS_DEPLOYMENT_TARGET = 1.0;
994 | };
995 | name = Debug;
996 | };
997 | C3F0AC732B2EE3AA00D2165B /* Release */ = {
998 | isa = XCBuildConfiguration;
999 | buildSettings = {
1000 | ALWAYS_SEARCH_USER_PATHS = NO;
1001 | ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
1002 | CLANG_ANALYZER_NONNULL = YES;
1003 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
1004 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
1005 | CLANG_ENABLE_MODULES = YES;
1006 | CLANG_ENABLE_OBJC_ARC = YES;
1007 | CLANG_ENABLE_OBJC_WEAK = YES;
1008 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
1009 | CLANG_WARN_BOOL_CONVERSION = YES;
1010 | CLANG_WARN_COMMA = YES;
1011 | CLANG_WARN_CONSTANT_CONVERSION = YES;
1012 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
1013 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
1014 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
1015 | CLANG_WARN_EMPTY_BODY = YES;
1016 | CLANG_WARN_ENUM_CONVERSION = YES;
1017 | CLANG_WARN_INFINITE_RECURSION = YES;
1018 | CLANG_WARN_INT_CONVERSION = YES;
1019 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
1020 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
1021 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
1022 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
1023 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
1024 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
1025 | CLANG_WARN_STRICT_PROTOTYPES = YES;
1026 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
1027 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
1028 | CLANG_WARN_UNREACHABLE_CODE = YES;
1029 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
1030 | COPY_PHASE_STRIP = NO;
1031 | DEAD_CODE_STRIPPING = YES;
1032 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
1033 | ENABLE_NS_ASSERTIONS = NO;
1034 | ENABLE_STRICT_OBJC_MSGSEND = YES;
1035 | ENABLE_USER_SCRIPT_SANDBOXING = YES;
1036 | GCC_C_LANGUAGE_STANDARD = gnu17;
1037 | GCC_NO_COMMON_BLOCKS = YES;
1038 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
1039 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
1040 | GCC_WARN_UNDECLARED_SELECTOR = YES;
1041 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
1042 | GCC_WARN_UNUSED_FUNCTION = YES;
1043 | GCC_WARN_UNUSED_VARIABLE = YES;
1044 | IPHONEOS_DEPLOYMENT_TARGET = 15.0;
1045 | LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
1046 | MACOSX_DEPLOYMENT_TARGET = 12.0;
1047 | MTL_ENABLE_DEBUG_INFO = NO;
1048 | MTL_FAST_MATH = YES;
1049 | SWIFT_COMPILATION_MODE = wholemodule;
1050 | SWIFT_VERSION = 6.0;
1051 | TVOS_DEPLOYMENT_TARGET = 15.0;
1052 | WATCHOS_DEPLOYMENT_TARGET = 8.0;
1053 | XROS_DEPLOYMENT_TARGET = 1.0;
1054 | };
1055 | name = Release;
1056 | };
1057 | /* End XCBuildConfiguration section */
1058 |
1059 | /* Begin XCConfigurationList section */
1060 | C3DC6EC12B78B76100E1968B /* Build configuration list for PBXNativeTarget "macOS" */ = {
1061 | isa = XCConfigurationList;
1062 | buildConfigurations = (
1063 | C3DC6EBF2B78B76100E1968B /* Debug */,
1064 | C3DC6EC02B78B76100E1968B /* Release */,
1065 | );
1066 | defaultConfigurationIsVisible = 0;
1067 | defaultConfigurationName = Release;
1068 | };
1069 | C3DC6ED12B78B86400E1968B /* Build configuration list for PBXNativeTarget "tvOS" */ = {
1070 | isa = XCConfigurationList;
1071 | buildConfigurations = (
1072 | C3DC6ED22B78B86400E1968B /* Debug */,
1073 | C3DC6ED32B78B86400E1968B /* Release */,
1074 | );
1075 | defaultConfigurationIsVisible = 0;
1076 | defaultConfigurationName = Release;
1077 | };
1078 | C3DC6EE32B78B8E900E1968B /* Build configuration list for PBXNativeTarget "iOS" */ = {
1079 | isa = XCConfigurationList;
1080 | buildConfigurations = (
1081 | C3DC6EE42B78B8E900E1968B /* Debug */,
1082 | C3DC6EE52B78B8E900E1968B /* Release */,
1083 | );
1084 | defaultConfigurationIsVisible = 0;
1085 | defaultConfigurationName = Release;
1086 | };
1087 | C3DC6EF52B78B9A400E1968B /* Build configuration list for PBXNativeTarget "iPadOS" */ = {
1088 | isa = XCConfigurationList;
1089 | buildConfigurations = (
1090 | C3DC6EF62B78B9A400E1968B /* Debug */,
1091 | C3DC6EF72B78B9A400E1968B /* Release */,
1092 | );
1093 | defaultConfigurationIsVisible = 0;
1094 | defaultConfigurationName = Release;
1095 | };
1096 | C3E08D4B2B78BA6B00659303 /* Build configuration list for PBXNativeTarget "visionOS" */ = {
1097 | isa = XCConfigurationList;
1098 | buildConfigurations = (
1099 | C3E08D4C2B78BA6B00659303 /* Debug */,
1100 | C3E08D4D2B78BA6B00659303 /* Release */,
1101 | );
1102 | defaultConfigurationIsVisible = 0;
1103 | defaultConfigurationName = Release;
1104 | };
1105 | C3E08D6A2B78BEA800659303 /* Build configuration list for PBXNativeTarget "watchOS" */ = {
1106 | isa = XCConfigurationList;
1107 | buildConfigurations = (
1108 | C3E08D6B2B78BEA800659303 /* Debug */,
1109 | C3E08D6C2B78BEA800659303 /* Release */,
1110 | );
1111 | defaultConfigurationIsVisible = 0;
1112 | defaultConfigurationName = Release;
1113 | };
1114 | C3F0AC472B2EE3A900D2165B /* Build configuration list for PBXProject "AppProject" */ = {
1115 | isa = XCConfigurationList;
1116 | buildConfigurations = (
1117 | C3F0AC722B2EE3AA00D2165B /* Debug */,
1118 | C3F0AC732B2EE3AA00D2165B /* Release */,
1119 | );
1120 | defaultConfigurationIsVisible = 0;
1121 | defaultConfigurationName = Release;
1122 | };
1123 | /* End XCConfigurationList section */
1124 |
1125 | /* Begin XCSwiftPackageProductDependency section */
1126 | C3D4DF6C2B78C68600824E65 /* AppCore */ = {
1127 | isa = XCSwiftPackageProductDependency;
1128 | productName = AppCore;
1129 | };
1130 | C3D4DF6E2B78C68900824E65 /* AppUI */ = {
1131 | isa = XCSwiftPackageProductDependency;
1132 | productName = AppUI;
1133 | };
1134 | C3D4DF702B78C69200824E65 /* AppCore */ = {
1135 | isa = XCSwiftPackageProductDependency;
1136 | productName = AppCore;
1137 | };
1138 | C3D4DF722B78C69200824E65 /* AppUI */ = {
1139 | isa = XCSwiftPackageProductDependency;
1140 | productName = AppUI;
1141 | };
1142 | C3D4DF742B78C69D00824E65 /* AppCore */ = {
1143 | isa = XCSwiftPackageProductDependency;
1144 | productName = AppCore;
1145 | };
1146 | C3D4DF762B78C69D00824E65 /* AppUI */ = {
1147 | isa = XCSwiftPackageProductDependency;
1148 | productName = AppUI;
1149 | };
1150 | C3D4DF782B78C6A300824E65 /* AppCore */ = {
1151 | isa = XCSwiftPackageProductDependency;
1152 | productName = AppCore;
1153 | };
1154 | C3D4DF7A2B78C6A300824E65 /* AppUI */ = {
1155 | isa = XCSwiftPackageProductDependency;
1156 | productName = AppUI;
1157 | };
1158 | C3D4DF7C2B78C6AA00824E65 /* AppCore */ = {
1159 | isa = XCSwiftPackageProductDependency;
1160 | productName = AppCore;
1161 | };
1162 | C3D4DF7E2B78C6AA00824E65 /* AppUI */ = {
1163 | isa = XCSwiftPackageProductDependency;
1164 | productName = AppUI;
1165 | };
1166 | C3D4DF802B78C6B100824E65 /* AppCore */ = {
1167 | isa = XCSwiftPackageProductDependency;
1168 | productName = AppCore;
1169 | };
1170 | C3D4DF822B78C6B100824E65 /* AppUI */ = {
1171 | isa = XCSwiftPackageProductDependency;
1172 | productName = AppUI;
1173 | };
1174 | /* End XCSwiftPackageProductDependency section */
1175 | };
1176 | rootObject = C3F0AC442B2EE3A900D2165B /* Project object */;
1177 | }
1178 |
--------------------------------------------------------------------------------
/App/AppProject.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/App/AppProject.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/App/AppProject.xcodeproj/xcshareddata/xcschemes/iOS.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
31 |
32 |
42 |
44 |
50 |
51 |
52 |
53 |
59 |
61 |
67 |
68 |
69 |
70 |
72 |
73 |
76 |
77 |
78 |
--------------------------------------------------------------------------------
/App/AppProject.xcodeproj/xcshareddata/xcschemes/iPadOS.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
31 |
32 |
42 |
44 |
50 |
51 |
52 |
53 |
59 |
61 |
67 |
68 |
69 |
70 |
72 |
73 |
76 |
77 |
78 |
--------------------------------------------------------------------------------
/App/AppProject.xcodeproj/xcshareddata/xcschemes/macOS.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
31 |
32 |
42 |
44 |
50 |
51 |
52 |
53 |
59 |
61 |
67 |
68 |
69 |
70 |
72 |
73 |
76 |
77 |
78 |
--------------------------------------------------------------------------------
/App/AppProject.xcodeproj/xcshareddata/xcschemes/tvOS.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
31 |
32 |
42 |
44 |
50 |
51 |
52 |
53 |
59 |
61 |
67 |
68 |
69 |
70 |
72 |
73 |
76 |
77 |
78 |
--------------------------------------------------------------------------------
/App/AppProject.xcodeproj/xcshareddata/xcschemes/visionOS.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
31 |
32 |
42 |
44 |
50 |
51 |
52 |
53 |
59 |
61 |
67 |
68 |
69 |
70 |
72 |
73 |
76 |
77 |
78 |
--------------------------------------------------------------------------------
/App/AppProject.xcodeproj/xcshareddata/xcschemes/watchOS.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
29 |
35 |
36 |
37 |
38 |
39 |
45 |
46 |
56 |
58 |
64 |
65 |
66 |
67 |
73 |
75 |
81 |
82 |
83 |
84 |
86 |
87 |
90 |
91 |
92 |
--------------------------------------------------------------------------------
/App/Package.swift:
--------------------------------------------------------------------------------
1 | // swift-tools-version: 5.9
2 |
3 | import PackageDescription
4 |
5 | let package = Package(
6 | name: "empty",
7 | products: [],
8 | targets: []
9 | )
10 |
--------------------------------------------------------------------------------
/App/Platforms/iOS/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "idiom" : "universal"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/App/Platforms/iOS/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "platform" : "ios",
6 | "size" : "1024x1024"
7 | }
8 | ],
9 | "info" : {
10 | "author" : "xcode",
11 | "version" : 1
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/App/Platforms/iOS/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/App/Platforms/iOS/PhoneApp.swift:
--------------------------------------------------------------------------------
1 | import AppCore
2 | import AppUI
3 | import SwiftUI
4 |
5 | @main
6 | struct PhoneApp: App {
7 | var body: some Scene {
8 | WindowGroup {
9 | ContentView()
10 | .onAppear {
11 | print(Hello.world())
12 | }
13 | }
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/App/Platforms/iPadOS/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "idiom" : "universal"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/App/Platforms/iPadOS/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "platform" : "ios",
6 | "size" : "1024x1024"
7 | }
8 | ],
9 | "info" : {
10 | "author" : "xcode",
11 | "version" : 1
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/App/Platforms/iPadOS/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/App/Platforms/iPadOS/PadApp.swift:
--------------------------------------------------------------------------------
1 | import AppCore
2 | import AppUI
3 | import SwiftUI
4 |
5 | @main
6 | struct PadApp: App {
7 | var body: some Scene {
8 | WindowGroup {
9 | ContentView()
10 | .onAppear {
11 | print(Hello.world())
12 | }
13 | }
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/App/Platforms/macOS/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "idiom" : "universal"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/App/Platforms/macOS/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "mac",
5 | "scale" : "1x",
6 | "size" : "16x16"
7 | },
8 | {
9 | "idiom" : "mac",
10 | "scale" : "2x",
11 | "size" : "16x16"
12 | },
13 | {
14 | "idiom" : "mac",
15 | "scale" : "1x",
16 | "size" : "32x32"
17 | },
18 | {
19 | "idiom" : "mac",
20 | "scale" : "2x",
21 | "size" : "32x32"
22 | },
23 | {
24 | "idiom" : "mac",
25 | "scale" : "1x",
26 | "size" : "128x128"
27 | },
28 | {
29 | "idiom" : "mac",
30 | "scale" : "2x",
31 | "size" : "128x128"
32 | },
33 | {
34 | "idiom" : "mac",
35 | "scale" : "1x",
36 | "size" : "256x256"
37 | },
38 | {
39 | "idiom" : "mac",
40 | "scale" : "2x",
41 | "size" : "256x256"
42 | },
43 | {
44 | "idiom" : "mac",
45 | "scale" : "1x",
46 | "size" : "512x512"
47 | },
48 | {
49 | "idiom" : "mac",
50 | "scale" : "2x",
51 | "size" : "512x512"
52 | }
53 | ],
54 | "info" : {
55 | "author" : "xcode",
56 | "version" : 1
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/App/Platforms/macOS/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/App/Platforms/macOS/MacApp.swift:
--------------------------------------------------------------------------------
1 | import AppCore
2 | import AppUI
3 | import SwiftUI
4 |
5 | @main
6 | struct MacApp: App {
7 | var body: some Scene {
8 | WindowGroup {
9 | ContentView()
10 | .onAppear {
11 | print(Hello.world())
12 | }
13 | }
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/App/Platforms/tvOS/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "idiom" : "universal"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/App/Platforms/tvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Back.imagestacklayer/Content.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "tv"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/App/Platforms/tvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Back.imagestacklayer/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/App/Platforms/tvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | },
6 | "layers" : [
7 | {
8 | "filename" : "Front.imagestacklayer"
9 | },
10 | {
11 | "filename" : "Middle.imagestacklayer"
12 | },
13 | {
14 | "filename" : "Back.imagestacklayer"
15 | }
16 | ]
17 | }
18 |
--------------------------------------------------------------------------------
/App/Platforms/tvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Front.imagestacklayer/Content.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "tv"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/App/Platforms/tvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Front.imagestacklayer/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/App/Platforms/tvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "tv"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/App/Platforms/tvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Middle.imagestacklayer/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/App/Platforms/tvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Back.imagestacklayer/Content.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "tv",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "tv",
9 | "scale" : "2x"
10 | }
11 | ],
12 | "info" : {
13 | "author" : "xcode",
14 | "version" : 1
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/App/Platforms/tvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Back.imagestacklayer/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/App/Platforms/tvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | },
6 | "layers" : [
7 | {
8 | "filename" : "Front.imagestacklayer"
9 | },
10 | {
11 | "filename" : "Middle.imagestacklayer"
12 | },
13 | {
14 | "filename" : "Back.imagestacklayer"
15 | }
16 | ]
17 | }
18 |
--------------------------------------------------------------------------------
/App/Platforms/tvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Content.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "tv",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "tv",
9 | "scale" : "2x"
10 | }
11 | ],
12 | "info" : {
13 | "author" : "xcode",
14 | "version" : 1
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/App/Platforms/tvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/App/Platforms/tvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "tv",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "tv",
9 | "scale" : "2x"
10 | }
11 | ],
12 | "info" : {
13 | "author" : "xcode",
14 | "version" : 1
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/App/Platforms/tvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/App/Platforms/tvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "assets" : [
3 | {
4 | "filename" : "App Icon - App Store.imagestack",
5 | "idiom" : "tv",
6 | "role" : "primary-app-icon",
7 | "size" : "1280x768"
8 | },
9 | {
10 | "filename" : "App Icon.imagestack",
11 | "idiom" : "tv",
12 | "role" : "primary-app-icon",
13 | "size" : "400x240"
14 | },
15 | {
16 | "filename" : "Top Shelf Image Wide.imageset",
17 | "idiom" : "tv",
18 | "role" : "top-shelf-image-wide",
19 | "size" : "2320x720"
20 | },
21 | {
22 | "filename" : "Top Shelf Image.imageset",
23 | "idiom" : "tv",
24 | "role" : "top-shelf-image",
25 | "size" : "1920x720"
26 | }
27 | ],
28 | "info" : {
29 | "author" : "xcode",
30 | "version" : 1
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/App/Platforms/tvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "tv",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "tv",
9 | "scale" : "2x"
10 | }
11 | ],
12 | "info" : {
13 | "author" : "xcode",
14 | "version" : 1
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/App/Platforms/tvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "tv",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "tv",
9 | "scale" : "2x"
10 | }
11 | ],
12 | "info" : {
13 | "author" : "xcode",
14 | "version" : 1
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/App/Platforms/tvOS/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/App/Platforms/tvOS/TVApp.swift:
--------------------------------------------------------------------------------
1 | import AppCore
2 | import AppUI
3 | import SwiftUI
4 |
5 | @main
6 | struct TVApp: App {
7 | var body: some Scene {
8 | WindowGroup {
9 | ContentView()
10 | .onAppear {
11 | print(Hello.world())
12 | }
13 | }
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/App/Platforms/visionOS/Assets.xcassets/AppIcon.solidimagestack/Back.solidimagestacklayer/Content.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "vision",
5 | "scale" : "2x"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/App/Platforms/visionOS/Assets.xcassets/AppIcon.solidimagestack/Back.solidimagestacklayer/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/App/Platforms/visionOS/Assets.xcassets/AppIcon.solidimagestack/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | },
6 | "layers" : [
7 | {
8 | "filename" : "Front.solidimagestacklayer"
9 | },
10 | {
11 | "filename" : "Middle.solidimagestacklayer"
12 | },
13 | {
14 | "filename" : "Back.solidimagestacklayer"
15 | }
16 | ]
17 | }
18 |
--------------------------------------------------------------------------------
/App/Platforms/visionOS/Assets.xcassets/AppIcon.solidimagestack/Front.solidimagestacklayer/Content.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "vision",
5 | "scale" : "2x"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/App/Platforms/visionOS/Assets.xcassets/AppIcon.solidimagestack/Front.solidimagestacklayer/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/App/Platforms/visionOS/Assets.xcassets/AppIcon.solidimagestack/Middle.solidimagestacklayer/Content.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "vision",
5 | "scale" : "2x"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/App/Platforms/visionOS/Assets.xcassets/AppIcon.solidimagestack/Middle.solidimagestacklayer/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/App/Platforms/visionOS/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/App/Platforms/visionOS/VisionApp.swift:
--------------------------------------------------------------------------------
1 | import AppCore
2 | import AppUI
3 | import SwiftUI
4 |
5 | @main
6 | struct VisionApp: App {
7 | var body: some Scene {
8 | WindowGroup {
9 | ContentView()
10 | .onAppear {
11 | print(Hello.world())
12 | }
13 | }
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/App/Platforms/watchOS/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "idiom" : "universal"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/App/Platforms/watchOS/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "platform" : "watchos",
6 | "size" : "1024x1024"
7 | }
8 | ],
9 | "info" : {
10 | "author" : "xcode",
11 | "version" : 1
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/App/Platforms/watchOS/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/App/Platforms/watchOS/WatchApp.swift:
--------------------------------------------------------------------------------
1 | import AppCore
2 | import AppUI
3 | import SwiftUI
4 |
5 | @main
6 | struct WatchApp: App {
7 | var body: some Scene {
8 | WindowGroup {
9 | ContentView()
10 | .onAppear {
11 | print(Hello.world())
12 | }
13 | }
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/App/TestPlans/AppTests.xctestplan:
--------------------------------------------------------------------------------
1 | {
2 | "configurations" : [
3 | {
4 | "id" : "B6F5DE55-97C1-454B-875E-7D37993CB8BD",
5 | "name" : "Configuration 1",
6 | "options" : {
7 |
8 | }
9 | }
10 | ],
11 | "defaultOptions" : {
12 | "testTimeoutsEnabled" : true
13 | },
14 | "testTargets" : [
15 | {
16 | "target" : {
17 | "containerPath" : "container:",
18 | "identifier" : "AppCoreTests",
19 | "name" : "AppCoreTests"
20 | }
21 | },
22 | {
23 | "target" : {
24 | "containerPath" : "container:",
25 | "identifier" : "AppUITests",
26 | "name" : "AppUITests"
27 | }
28 | }
29 | ],
30 | "version" : 1
31 | }
32 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2024 SeungYeop Yeom
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/Makefile:
--------------------------------------------------------------------------------
1 | PLATFORM_IOS = iOS Simulator,name=iPhone 16
2 | PLATFORM_IPADOS = iOS Simulator,name=iPad (10th generation)
3 | PLATFORM_MACOS = macOS
4 | PLATFORM_TVOS = tvOS Simulator,name=Apple TV
5 | PLATFORM_VISIONOS = visionOS Simulator,name=Apple Vision Pro
6 | PLATFORM_WATCHOS = watchOS Simulator,name=Apple Watch Series 10 (42mm)
7 |
8 | PROJECT = App/AppProject.xcodeproj
9 | SCHEME = AppTests
10 | TEST_PLAN = AppTests
11 | CONFIG = debug
12 |
13 | default: test
14 |
15 | test:
16 | for platform in \
17 | "$(PLATFORM_IOS)" \
18 | "$(PLATFORM_IPADOS)" \
19 | "$(PLATFORM_MACOS)" \
20 | "$(PLATFORM_TVOS)" \
21 | "$(PLATFORM_VISIONOS)" \
22 | "$(PLATFORM_WATCHOS)"; \
23 | do \
24 | xcodebuild test \
25 | -project $(PROJECT) \
26 | -scheme $(SCHEME) \
27 | -testPlan $(TEST_PLAN) \
28 | -configuration $(CONFIG) \
29 | -destination platform="$$platform" || exit 1; \
30 | done;
31 |
32 | id:
33 | @read -p "Enter the new Bundle Identifier: " new_bundle_identifier; \
34 | find . -name '*.pbxproj' -exec sed -i '' "s/com.devyeom.app/$$new_bundle_identifier/g" {} + && \
35 | echo "Bundle Identifier changed to $$new_bundle_identifier"
36 |
--------------------------------------------------------------------------------
/Package.swift:
--------------------------------------------------------------------------------
1 | // swift-tools-version: 6.0
2 |
3 | import PackageDescription
4 |
5 | let package = Package(
6 | name: "AppPackage",
7 | platforms: [
8 | .iOS(.v15),
9 | .macOS(.v12),
10 | .tvOS(.v15),
11 | .visionOS(.v1),
12 | .watchOS(.v8),
13 | ],
14 | products: [
15 | .library(
16 | name: "AppCore",
17 | targets: ["AppCore"]
18 | ),
19 | .library(
20 | name: "AppUI",
21 | targets: ["AppUI"]
22 | ),
23 | ],
24 | targets: [
25 | .target(
26 | name: "AppCore"
27 | ),
28 | .testTarget(
29 | name: "AppCoreTests",
30 | dependencies: ["AppCore"]
31 | ),
32 | .target(
33 | name: "AppUI"
34 | ),
35 | .testTarget(
36 | name: "AppUITests",
37 | dependencies: ["AppUI"]
38 | ),
39 | ]
40 | )
41 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # swift-app-package
2 |
3 |
4 |
5 |
6 |
7 | Welcome to **swift-app-package**, a template project designed to kickstart your app development journey using Swift, SwiftUI, and Swift Package Manager (SPM). With this template, you can develop applications for multiple platforms including `iOS`, `iPadOS`, `macOS`, `tvOS`, `visionOS`, and `watchOS` all within a single project. With the use of [SPM](https://github.com/apple/swift-package-manager), we no longer need third-party dependencies such as [Tuist](https://github.com/tuist/tuist), [XcodeGen](https://github.com/yonaskolb/XcodeGen), or [xUnique](https://github.com/truebit/xUnique).
8 |
9 | ## Overview
10 |
11 | - **Targets**: `AppProject` consists of six targets: `iOS`, `iPadOS`, `macOS`, `tvOS`, `visionOS`, and `watchOS`.
12 | - **Modules**: `AppPackage` includes two default modules: `AppCore` and `AppUI`.
13 | - **Test Plans**: Running `AppTests` executes all test cases, including `AppCoreTests` and `AppUITests`.
14 |
15 | ## Getting Started
16 |
17 | To begin using **swift-app-package**, simply clone or download this repository and start building your app on top of the provided template.
18 |
19 | ```
20 | git clone --depth 1 https://github.com/DevYeom/swift-app-package
21 | ```
22 |
23 | ## Usage
24 |
25 | 1. Clone or download the repository.
26 | 2. Open the project in Xcode. (`App/AppProject.xcodeproj`)
27 | 3. Start developing your app.
28 | 4. Customize and extend the template to suit your app's requirements.
29 | 5. Build and run your app across various platforms to explore its full potential.
30 |
31 | ## Advanced
32 |
33 | 1. **Unit Testing**: Run unit tests based on the test plan by executing `make test`.
34 | 2. **Bundle Identifier Modification**: Modify the bundle identifier using `make id`.
35 | 3. **GitHub Action**: Explore default GitHub Actions settings in `.github/workflows`.
36 |
37 | ## License
38 |
39 | This library is released under the MIT license. See [LICENSE](LICENSE) for details.
40 |
--------------------------------------------------------------------------------
/Sources/AppCore/AppCore.swift:
--------------------------------------------------------------------------------
1 | public struct Hello {
2 | public static func world() -> String {
3 | "Hello, world!"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/Sources/AppUI/ContentView.swift:
--------------------------------------------------------------------------------
1 | import SwiftUI
2 |
3 | public struct ContentView: View {
4 | public init() { }
5 |
6 | public var body: some View {
7 | VStack {
8 | Image(systemName: "globe")
9 | .imageScale(.large)
10 | .foregroundStyle(.tint)
11 | #if os(iOS)
12 | Text("Hello, iOS!")
13 | #elseif os(macOS)
14 | Text("Hello, macOS!")
15 | #elseif os(tvOS)
16 | Text("Hello, tvOS!")
17 | #elseif os(visionOS)
18 | Text("Hello, visionOS!")
19 | #elseif os(watchOS)
20 | Text("Hello, watchOS!")
21 | #else
22 | Text("Hello, world!")
23 | #endif
24 | }
25 | .padding()
26 | }
27 | }
28 |
29 | #Preview {
30 | ContentView()
31 | }
32 |
--------------------------------------------------------------------------------
/Tests/AppCoreTests/AppCoreTests.swift:
--------------------------------------------------------------------------------
1 | import Testing
2 | @testable import AppCore
3 |
4 | @Suite
5 | struct AppCoreTests {
6 | @Test
7 | func example() {
8 | #expect(1 + 1 == 2)
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/Tests/AppUITests/AppUITests.swift:
--------------------------------------------------------------------------------
1 | import Testing
2 | @testable import AppUI
3 |
4 | @Suite
5 | struct AppUITests {
6 | @Test
7 | func example() {
8 | #expect(1 + 1 == 2)
9 | }
10 | }
11 |
--------------------------------------------------------------------------------