Skip to content

Commit 91c086f

Browse files
committed
apply protocol to repositories
1 parent 8ee2e64 commit 91c086f

File tree

58 files changed

+1034
-182
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+1034
-182
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,3 +72,5 @@ Carthage/Build
7272
secrets.*.xcconfig
7373
!secrets.template.xcconfig
7474

75+
# Claude
76+
.claude/

CLAUDE.md

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
# CLAUDE.md
2+
3+
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4+
5+
## Build, Test, and Development Commands
6+
7+
### Building the Project
8+
```bash
9+
# Build for Debug
10+
xcodebuild -project NativeAppTemplate.xcodeproj \
11+
-scheme "NativeAppTemplate" \
12+
-configuration Debug \
13+
-sdk iphonesimulator \
14+
-destination 'platform=iOS Simulator,name=iPhone 16 Pro,OS=18.2' \
15+
build
16+
17+
# Build for Release
18+
xcodebuild -project NativeAppTemplate.xcodeproj \
19+
-scheme "NativeAppTemplate" \
20+
-configuration Release \
21+
-sdk iphonesimulator \
22+
-destination 'platform=iOS Simulator,name=iPhone 16 Pro,OS=18.2' \
23+
build
24+
```
25+
26+
### Running Tests
27+
```bash
28+
# Run all tests
29+
xcodebuild -project NativeAppTemplate.xcodeproj \
30+
-scheme "NativeAppTemplate" \
31+
-sdk iphonesimulator \
32+
-destination 'platform=iOS Simulator,name=iPhone 16 Pro,OS=18.2' \
33+
test
34+
```
35+
36+
### Linting
37+
```bash
38+
# Run SwiftLint (must be installed via: brew install swiftlint)
39+
cd NativeAppTemplate && swiftlint
40+
41+
# Run SwiftLint with strict mode (as in CI)
42+
cd NativeAppTemplate && swiftlint --strict
43+
```
44+
45+
## Architecture Overview
46+
47+
### MVVM with Observable Pattern
48+
The app uses iOS 17's `@Observable` macro for state management with clean separation between:
49+
- **Views**: SwiftUI views (99% SwiftUI, UIKit only for mail view)
50+
- **ViewModels**: Observable state containers that bridge views and data
51+
- **Models**: Domain objects and data structures
52+
- **Repositories**: Data access layer implementing CRUD operations
53+
54+
### Core Components
55+
56+
**Data Flow Architecture**:
57+
1. **SessionController** (`/Sessions/SessionController.swift`): Manages authentication state and user sessions
58+
2. **DataManager** (`/Data/DataManager.swift`): Central orchestrator that manages all repositories
59+
3. **Repositories**: Each entity has its own repository (e.g., `ShopRepository`, `ItemTagRepository`)
60+
4. **Services**: Network layer abstraction with protocol-based design
61+
5. **MessageBus** (`/MessageBus.swift`): Event communication system for decoupled components
62+
63+
**Networking Architecture**:
64+
- JSON API format with custom adapters (`/Networking/Adapters/`)
65+
- Service layer pattern (`/Networking/Services/`)
66+
- Request/Response models (`/Networking/Requests/`, `/Networking/Responses/`)
67+
- Error handling with typed errors (`/Models/AppError.swift`)
68+
69+
### Key Features Implementation
70+
71+
**NFC Support**:
72+
- Tag reading/writing capabilities (`/NFC/`)
73+
- Background tag reading support
74+
- Application-specific tag data format
75+
76+
**Offline Support**:
77+
- Network monitoring (`/Networking/NetworkMonitor.swift`)
78+
- Keychain storage for secure data persistence
79+
80+
**Configuration**:
81+
- Central configuration in `Constants.swift`
82+
- API endpoints, UI strings, and app constants
83+
- Environment-specific settings (scheme, domain, port)
84+
85+
### Project Structure
86+
```
87+
NativeAppTemplate/
88+
├── App.swift # App entry point
89+
├── MainView.swift # Root view
90+
├── Data/ # Data layer (repositories, ViewModels)
91+
├── Models/ # Domain models
92+
├── Networking/ # API layer
93+
├── UI/ # SwiftUI views by feature
94+
├── Sessions/ # Authentication
95+
├── Persistence/ # Keychain storage
96+
├── Utilities/ # Helpers and extensions
97+
└── NFC/ # NFC functionality
98+
```
99+
100+
### Dependencies (Swift Package Manager)
101+
- KeychainAccess (4.2.2) - Secure credential storage
102+
- SwiftyJSON (5.0.2) - JSON parsing
103+
- Swift Collections (1.1.4) - Additional data structures
104+
105+
### Testing
106+
Uses Swift Testing framework with `@Test` attribute. Tests are organized by component type (models, adapters, networking).

NativeAppTemplate.xcodeproj/project.pbxproj

Lines changed: 35 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
0135E7192D7E33F9004AD8FA /* CompleteScanResultView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0135E7152D7E33F9004AD8FA /* CompleteScanResultView.swift */; };
3333
0135E71A2D7E33F9004AD8FA /* ShowTagInfoScanResultView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0135E7172D7E33F9004AD8FA /* ShowTagInfoScanResultView.swift */; };
3434
0135E71B2D7E33F9004AD8FA /* ScanView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0135E7162D7E33F9004AD8FA /* ScanView.swift */; };
35-
0135E8E42D7E4478004AD8FA /* SampleCode.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 0135E8E22D7E4478004AD8FA /* SampleCode.xcconfig */; };
3635
013DE735284E99DF00528CC5 /* ShopCreateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 013DE734284E99DF00528CC5 /* ShopCreateView.swift */; };
3736
01467357299902230005423D /* ShopSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01467356299902230005423D /* ShopSettingsView.swift */; };
3837
01482FA42B351E4100A56D43 /* AcceptPrivacyView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01482FA32B351E4100A56D43 /* AcceptPrivacyView.swift */; };
@@ -56,7 +55,6 @@
5655
017203A325A96F7B008FD63B /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 017203A225A96F7A008FD63B /* Constants.swift */; };
5756
017203B325A96FD6008FD63B /* UIApplication+DismissKeyboard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 017203A825A96FBF008FD63B /* UIApplication+DismissKeyboard.swift */; };
5857
017203B625A96FD6008FD63B /* View+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 017203AB25A96FBF008FD63B /* View+Extensions.swift */; };
59-
017203CA25A97090008FD63B /* SessionController+States.swift in Sources */ = {isa = PBXBuildFile; fileRef = 017203C825A9708A008FD63B /* SessionController+States.swift */; };
6058
017203CB25A97090008FD63B /* SessionController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 017203C725A9708A008FD63B /* SessionController.swift */; };
6159
017203EB25AA6606008FD63B /* Logger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 017203EA25AA6601008FD63B /* Logger.swift */; };
6260
0172040025AA6775008FD63B /* LoginRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 017203F525AA675E008FD63B /* LoginRepository.swift */; };
@@ -119,6 +117,13 @@
119117
018D4EFF2B6350F500CBA736 /* Inter-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 018D4EFE2B6350F500CBA736 /* Inter-Bold.ttf */; };
120118
018E21CB2B36367F00FFD1F6 /* MeRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 018E21CA2B36367F00FFD1F6 /* MeRequest.swift */; };
121119
018E21CD2B36377800FFD1F6 /* MeService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 018E21CC2B36377800FFD1F6 /* MeService.swift */; };
120+
0199CD242E07510200109DC6 /* AccountPasswordRepositoryProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0199CD212E07510200109DC6 /* AccountPasswordRepositoryProtocol.swift */; };
121+
0199CD252E07510200109DC6 /* ItemTagRepositoryProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0199CD222E07510200109DC6 /* ItemTagRepositoryProtocol.swift */; };
122+
0199CD262E07510200109DC6 /* ShopRepositoryProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0199CD232E07510200109DC6 /* ShopRepositoryProtocol.swift */; };
123+
0199CD2A2E07512100109DC6 /* OnboardingRepositoryProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0199CD282E07512100109DC6 /* OnboardingRepositoryProtocol.swift */; };
124+
0199CD2B2E07512100109DC6 /* SignUpRepositoryProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0199CD292E07512100109DC6 /* SignUpRepositoryProtocol.swift */; };
125+
0199CD2C2E07512100109DC6 /* LoginRepositoryProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0199CD272E07512100109DC6 /* LoginRepositoryProtocol.swift */; };
126+
0199CD3E2E075CBB00109DC6 /* SessionControllerProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0199CD3D2E075CBB00109DC6 /* SessionControllerProtocol.swift */; };
122127
01B37C7629B0960700BF5B2D /* ForgotPasswordView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01B37C7529B0960700BF5B2D /* ForgotPasswordView.swift */; };
123128
01B526542AF4E36400655131 /* MainTab.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01B526532AF4E36400655131 /* MainTab.swift */; };
124129
01B526562AF4E82A00655131 /* ScrollToTopID.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01B526552AF4E82A00655131 /* ScrollToTopID.swift */; };
@@ -205,7 +210,6 @@
205210
017203A825A96FBF008FD63B /* UIApplication+DismissKeyboard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIApplication+DismissKeyboard.swift"; sourceTree = "<group>"; };
206211
017203AB25A96FBF008FD63B /* View+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "View+Extensions.swift"; sourceTree = "<group>"; };
207212
017203C725A9708A008FD63B /* SessionController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionController.swift; sourceTree = "<group>"; };
208-
017203C825A9708A008FD63B /* SessionController+States.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SessionController+States.swift"; sourceTree = "<group>"; };
209213
017203EA25AA6601008FD63B /* Logger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Logger.swift; sourceTree = "<group>"; };
210214
017203F525AA675E008FD63B /* LoginRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginRepository.swift; sourceTree = "<group>"; };
211215
0172045725AA82B4008FD63B /* MainView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainView.swift; sourceTree = "<group>"; };
@@ -267,6 +271,13 @@
267271
018D4EFE2B6350F500CBA736 /* Inter-Bold.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Inter-Bold.ttf"; sourceTree = "<group>"; };
268272
018E21CA2B36367F00FFD1F6 /* MeRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeRequest.swift; sourceTree = "<group>"; };
269273
018E21CC2B36377800FFD1F6 /* MeService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeService.swift; sourceTree = "<group>"; };
274+
0199CD212E07510200109DC6 /* AccountPasswordRepositoryProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountPasswordRepositoryProtocol.swift; sourceTree = "<group>"; };
275+
0199CD222E07510200109DC6 /* ItemTagRepositoryProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ItemTagRepositoryProtocol.swift; sourceTree = "<group>"; };
276+
0199CD232E07510200109DC6 /* ShopRepositoryProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShopRepositoryProtocol.swift; sourceTree = "<group>"; };
277+
0199CD272E07512100109DC6 /* LoginRepositoryProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginRepositoryProtocol.swift; sourceTree = "<group>"; };
278+
0199CD282E07512100109DC6 /* OnboardingRepositoryProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingRepositoryProtocol.swift; sourceTree = "<group>"; };
279+
0199CD292E07512100109DC6 /* SignUpRepositoryProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignUpRepositoryProtocol.swift; sourceTree = "<group>"; };
280+
0199CD3D2E075CBB00109DC6 /* SessionControllerProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionControllerProtocol.swift; sourceTree = "<group>"; };
270281
01B37C7529B0960700BF5B2D /* ForgotPasswordView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ForgotPasswordView.swift; sourceTree = "<group>"; };
271282
01B526532AF4E36400655131 /* MainTab.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainTab.swift; sourceTree = "<group>"; };
272283
01B526552AF4E82A00655131 /* ScrollToTopID.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScrollToTopID.swift; sourceTree = "<group>"; };
@@ -565,9 +576,9 @@
565576
017203C525A9708A008FD63B /* Sessions */ = {
566577
isa = PBXGroup;
567578
children = (
568-
01E0A62125BD4A7800298D35 /* Shopkeeper+Backdoor.swift */,
569579
017203C725A9708A008FD63B /* SessionController.swift */,
570-
017203C825A9708A008FD63B /* SessionController+States.swift */,
580+
0199CD3D2E075CBB00109DC6 /* SessionControllerProtocol.swift */,
581+
01E0A62125BD4A7800298D35 /* Shopkeeper+Backdoor.swift */,
571582
);
572583
path = Sessions;
573584
sourceTree = "<group>";
@@ -584,10 +595,13 @@
584595
isa = PBXGroup;
585596
children = (
586597
017203F525AA675E008FD63B /* LoginRepository.swift */,
598+
0199CD272E07512100109DC6 /* LoginRepositoryProtocol.swift */,
587599
017278062D7D4F5800CE424F /* OnboardingRepository.swift */,
600+
0199CD282E07512100109DC6 /* OnboardingRepositoryProtocol.swift */,
588601
0172052E25AC41A7008FD63B /* SessionRequest.swift */,
589602
0172051925AAF6BF008FD63B /* SessionsService.swift */,
590603
011DDC20287669EA00C6C21F /* SignUpRepository.swift */,
604+
0199CD292E07512100109DC6 /* SignUpRepositoryProtocol.swift */,
591605
011DDC2428766CEC00C6C21F /* SignUpRequest.swift */,
592606
011DDC2228766C5D00C6C21F /* SignUpService.swift */,
593607
);
@@ -733,8 +747,11 @@
733747
isa = PBXGroup;
734748
children = (
735749
0106414129A9F51700B46FED /* AccountPasswordRepository.swift */,
750+
0199CD212E07510200109DC6 /* AccountPasswordRepositoryProtocol.swift */,
736751
017278742D7D8FAC00CE424F /* ItemTagRepository.swift */,
752+
0199CD222E07510200109DC6 /* ItemTagRepositoryProtocol.swift */,
737753
017204A925AA8449008FD63B /* ShopRepository.swift */,
754+
0199CD232E07510200109DC6 /* ShopRepositoryProtocol.swift */,
738755
);
739756
path = Repositories;
740757
sourceTree = "<group>";
@@ -824,7 +841,7 @@
824841
attributes = {
825842
BuildIndependentTargetsInParallel = YES;
826843
LastSwiftUpdateCheck = 1620;
827-
LastUpgradeCheck = 1600;
844+
LastUpgradeCheck = 1640;
828845
TargetAttributes = {
829846
011F6DEC259EF16400BED22E = {
830847
CreatedOnToolsVersion = 12.3;
@@ -874,7 +891,6 @@
874891
01D19B412D4DE33500BDEAB7 /* Resources */ = {
875892
isa = PBXResourcesBuildPhase;
876893
files = (
877-
0135E8E42D7E4478004AD8FA /* SampleCode.xcconfig in Resources */,
878894
);
879895
};
880896
/* End PBXResourcesBuildPhase section */
@@ -896,6 +912,8 @@
896912
" echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"",
897913
"fi",
898914
"",
915+
"",
916+
"",
899917
);
900918
};
901919
/* End PBXShellScriptBuildPhase section */
@@ -928,8 +946,12 @@
928946
01B37C7629B0960700BF5B2D /* ForgotPasswordView.swift in Sources */,
929947
01E0A5B725BD0FCD00298D35 /* OfflineView.swift in Sources */,
930948
0110A15F2AC816F5003EDCBA /* SendConfirmation.swift in Sources */,
949+
0199CD2A2E07512100109DC6 /* OnboardingRepositoryProtocol.swift in Sources */,
950+
0199CD2B2E07512100109DC6 /* SignUpRepositoryProtocol.swift in Sources */,
951+
0199CD2C2E07512100109DC6 /* LoginRepositoryProtocol.swift in Sources */,
931952
0172033D25A9642E008FD63B /* NativeAppTemplateEnvironment.swift in Sources */,
932953
0172787F2D7D933000CE424F /* ShopDetailCardView.swift in Sources */,
954+
0199CD3E2E075CBB00109DC6 /* SessionControllerProtocol.swift in Sources */,
933955
01EE363E29A6DCEB009BCD9D /* ShopkeeperEditView.swift in Sources */,
934956
0182D38225B296B9001E881D /* ShopkeeperAdapter.swift in Sources */,
935957
01BE4F1D29CA6F8C002008BE /* TimeZoneData.swift in Sources */,
@@ -950,7 +972,6 @@
950972
0172051A25AAF6C0008FD63B /* SessionsService.swift in Sources */,
951973
017204D125AA8479008FD63B /* DataState.swift in Sources */,
952974
012643372B3554AD00D4E9BD /* AcceptTermsView.swift in Sources */,
953-
017203CA25A97090008FD63B /* SessionController+States.swift in Sources */,
954975
0172033E25A9642E008FD63B /* Parameters.swift in Sources */,
955976
0150A36629B14BB300907F96 /* SendResetPassword.swift in Sources */,
956977
017204B625AA8467008FD63B /* DataManager.swift in Sources */,
@@ -976,6 +997,9 @@
976997
017204D925AA847E008FD63B /* ShopRepository.swift in Sources */,
977998
017278612D7D83E700CE424F /* ItemTagData.swift in Sources */,
978999
017278622D7D83E700CE424F /* ItemTag.swift in Sources */,
1000+
0199CD242E07510200109DC6 /* AccountPasswordRepositoryProtocol.swift in Sources */,
1001+
0199CD252E07510200109DC6 /* ItemTagRepositoryProtocol.swift in Sources */,
1002+
0199CD262E07510200109DC6 /* ShopRepositoryProtocol.swift in Sources */,
9791003
017278632D7D83E700CE424F /* ItemTagState.swift in Sources */,
9801004
017278642D7D83E700CE424F /* ItemTagInfoFromNdefMessage.swift in Sources */,
9811005
017278652D7D83E700CE424F /* ItemTagType.swift in Sources */,
@@ -1085,6 +1109,7 @@
10851109
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
10861110
COPY_PHASE_STRIP = NO;
10871111
DEBUG_INFORMATION_FORMAT = dwarf;
1112+
DEVELOPMENT_TEAM = NNYDL5U3V3;
10881113
ENABLE_STRICT_OBJC_MSGSEND = YES;
10891114
ENABLE_TESTABILITY = YES;
10901115
ENABLE_USER_SCRIPT_SANDBOXING = YES;
@@ -1153,6 +1178,7 @@
11531178
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
11541179
COPY_PHASE_STRIP = NO;
11551180
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
1181+
DEVELOPMENT_TEAM = NNYDL5U3V3;
11561182
ENABLE_NS_ASSERTIONS = NO;
11571183
ENABLE_STRICT_OBJC_MSGSEND = YES;
11581184
ENABLE_USER_SCRIPT_SANDBOXING = YES;
@@ -1189,7 +1215,6 @@
11891215
CODE_SIGN_STYLE = Automatic;
11901216
CURRENT_PROJECT_VERSION = 5;
11911217
DEVELOPMENT_ASSET_PATHS = "\"NativeAppTemplate/Preview Content\"";
1192-
DEVELOPMENT_TEAM = NNYDL5U3V3;
11931218
ENABLE_PREVIEWS = YES;
11941219
ENABLE_USER_SCRIPT_SANDBOXING = NO;
11951220
INFOPLIST_FILE = NativeAppTemplate/Info.plist;
@@ -1226,7 +1251,6 @@
12261251
CODE_SIGN_STYLE = Automatic;
12271252
CURRENT_PROJECT_VERSION = 5;
12281253
DEVELOPMENT_ASSET_PATHS = "\"NativeAppTemplate/Preview Content\"";
1229-
DEVELOPMENT_TEAM = NNYDL5U3V3;
12301254
ENABLE_PREVIEWS = YES;
12311255
ENABLE_USER_SCRIPT_SANDBOXING = NO;
12321256
INFOPLIST_FILE = NativeAppTemplate/Info.plist;
@@ -1289,6 +1313,7 @@
12891313
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
12901314
COPY_PHASE_STRIP = NO;
12911315
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
1316+
DEVELOPMENT_TEAM = NNYDL5U3V3;
12921317
ENABLE_NS_ASSERTIONS = NO;
12931318
ENABLE_STRICT_OBJC_MSGSEND = YES;
12941319
ENABLE_USER_SCRIPT_SANDBOXING = YES;
@@ -1324,7 +1349,6 @@
13241349
CODE_SIGN_STYLE = Automatic;
13251350
CURRENT_PROJECT_VERSION = 5;
13261351
DEVELOPMENT_ASSET_PATHS = "\"NativeAppTemplate/Preview Content\"";
1327-
DEVELOPMENT_TEAM = NNYDL5U3V3;
13281352
ENABLE_PREVIEWS = YES;
13291353
ENABLE_USER_SCRIPT_SANDBOXING = NO;
13301354
INFOPLIST_FILE = NativeAppTemplate/Info.plist;
@@ -1355,7 +1379,6 @@
13551379
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
13561380
CODE_SIGN_STYLE = Automatic;
13571381
CURRENT_PROJECT_VERSION = 1;
1358-
DEVELOPMENT_TEAM = NNYDL5U3V3;
13591382
GCC_C_LANGUAGE_STANDARD = gnu17;
13601383
GENERATE_INFOPLIST_FILE = YES;
13611384
IPHONEOS_DEPLOYMENT_TARGET = 18.2;
@@ -1377,7 +1400,6 @@
13771400
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
13781401
CODE_SIGN_STYLE = Automatic;
13791402
CURRENT_PROJECT_VERSION = 1;
1380-
DEVELOPMENT_TEAM = NNYDL5U3V3;
13811403
GCC_C_LANGUAGE_STANDARD = gnu17;
13821404
GENERATE_INFOPLIST_FILE = YES;
13831405
IPHONEOS_DEPLOYMENT_TARGET = 18.2;
@@ -1398,7 +1420,6 @@
13981420
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
13991421
CODE_SIGN_STYLE = Automatic;
14001422
CURRENT_PROJECT_VERSION = 1;
1401-
DEVELOPMENT_TEAM = NNYDL5U3V3;
14021423
GCC_C_LANGUAGE_STANDARD = gnu17;
14031424
GENERATE_INFOPLIST_FILE = YES;
14041425
IPHONEOS_DEPLOYMENT_TARGET = 18.2;

NativeAppTemplate.xcodeproj/xcshareddata/xcschemes/NativeAppTemplate.xcscheme

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "1600"
3+
LastUpgradeVersion = "1640"
44
version = "1.3">
55
<BuildAction
66
parallelizeBuildables = "YES"

0 commit comments

Comments
 (0)