diff --git a/scarf/scarf-ios/App/ScarfIOSApp.swift b/scarf/Scarf iOS/App/ScarfIOSApp.swift
similarity index 100%
rename from scarf/scarf-ios/App/ScarfIOSApp.swift
rename to scarf/Scarf iOS/App/ScarfIOSApp.swift
diff --git a/scarf/scarf-ios/Assets.xcassets/AccentColor.colorset/Contents.json b/scarf/Scarf iOS/Assets.xcassets/AccentColor.colorset/Contents.json
similarity index 100%
rename from scarf/scarf-ios/Assets.xcassets/AccentColor.colorset/Contents.json
rename to scarf/Scarf iOS/Assets.xcassets/AccentColor.colorset/Contents.json
diff --git a/scarf/scarf-ios/Assets.xcassets/AppIcon.appiconset/AppIcon-1024.png b/scarf/Scarf iOS/Assets.xcassets/AppIcon.appiconset/AppIcon-1024.png
similarity index 100%
rename from scarf/scarf-ios/Assets.xcassets/AppIcon.appiconset/AppIcon-1024.png
rename to scarf/Scarf iOS/Assets.xcassets/AppIcon.appiconset/AppIcon-1024.png
diff --git a/scarf/scarf-ios/Assets.xcassets/AppIcon.appiconset/Contents.json b/scarf/Scarf iOS/Assets.xcassets/AppIcon.appiconset/Contents.json
similarity index 100%
rename from scarf/scarf-ios/Assets.xcassets/AppIcon.appiconset/Contents.json
rename to scarf/Scarf iOS/Assets.xcassets/AppIcon.appiconset/Contents.json
diff --git a/scarf/scarf-ios/Assets.xcassets/Contents.json b/scarf/Scarf iOS/Assets.xcassets/Contents.json
similarity index 100%
rename from scarf/scarf-ios/Assets.xcassets/Contents.json
rename to scarf/Scarf iOS/Assets.xcassets/Contents.json
diff --git a/scarf/scarf-ios/Dashboard/DashboardView.swift b/scarf/Scarf iOS/Dashboard/DashboardView.swift
similarity index 100%
rename from scarf/scarf-ios/Dashboard/DashboardView.swift
rename to scarf/Scarf iOS/Dashboard/DashboardView.swift
diff --git a/scarf/Scarf iOS/Info.plist b/scarf/Scarf iOS/Info.plist
new file mode 100644
index 0000000..ca9a074
--- /dev/null
+++ b/scarf/Scarf iOS/Info.plist
@@ -0,0 +1,10 @@
+
+
+
+
+ UIBackgroundModes
+
+ remote-notification
+
+
+
diff --git a/scarf/scarf-ios/Onboarding/OnboardingRootView.swift b/scarf/Scarf iOS/Onboarding/OnboardingRootView.swift
similarity index 100%
rename from scarf/scarf-ios/Onboarding/OnboardingRootView.swift
rename to scarf/Scarf iOS/Onboarding/OnboardingRootView.swift
diff --git a/scarf/Scarf iOS/Scarf_iOS.entitlements b/scarf/Scarf iOS/Scarf_iOS.entitlements
new file mode 100644
index 0000000..9e0940e
--- /dev/null
+++ b/scarf/Scarf iOS/Scarf_iOS.entitlements
@@ -0,0 +1,14 @@
+
+
+
+
+ aps-environment
+ development
+ com.apple.developer.icloud-container-identifiers
+
+ com.apple.developer.icloud-services
+
+ CloudKit
+
+
+
diff --git a/scarf/Scarf iOSTests/Scarf_iOSTests.swift b/scarf/Scarf iOSTests/Scarf_iOSTests.swift
new file mode 100644
index 0000000..167b35e
--- /dev/null
+++ b/scarf/Scarf iOSTests/Scarf_iOSTests.swift
@@ -0,0 +1,17 @@
+//
+// Scarf_iOSTests.swift
+// Scarf iOSTests
+//
+// Created by Alan Wizemann on 4/23/26.
+//
+
+import Testing
+@testable import Scarf_iOS
+
+struct Scarf_iOSTests {
+
+ @Test func example() async throws {
+ // Write your test here and use APIs like `#expect(...)` to check expected conditions.
+ }
+
+}
diff --git a/scarf/Scarf iOSUITests/Scarf_iOSUITests.swift b/scarf/Scarf iOSUITests/Scarf_iOSUITests.swift
new file mode 100644
index 0000000..e80e38a
--- /dev/null
+++ b/scarf/Scarf iOSUITests/Scarf_iOSUITests.swift
@@ -0,0 +1,41 @@
+//
+// Scarf_iOSUITests.swift
+// Scarf iOSUITests
+//
+// Created by Alan Wizemann on 4/23/26.
+//
+
+import XCTest
+
+final class Scarf_iOSUITests: XCTestCase {
+
+ override func setUpWithError() throws {
+ // Put setup code here. This method is called before the invocation of each test method in the class.
+
+ // In UI tests it is usually best to stop immediately when a failure occurs.
+ continueAfterFailure = false
+
+ // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.
+ }
+
+ override func tearDownWithError() throws {
+ // Put teardown code here. This method is called after the invocation of each test method in the class.
+ }
+
+ @MainActor
+ func testExample() throws {
+ // UI tests must launch the application that they test.
+ let app = XCUIApplication()
+ app.launch()
+
+ // Use XCTAssert and related functions to verify your tests produce the correct results.
+ }
+
+ @MainActor
+ func testLaunchPerformance() throws {
+ // This measures how long it takes to launch your application.
+ measure(metrics: [XCTApplicationLaunchMetric()]) {
+ XCUIApplication().launch()
+ }
+ }
+}
diff --git a/scarf/Scarf iOSUITests/Scarf_iOSUITestsLaunchTests.swift b/scarf/Scarf iOSUITests/Scarf_iOSUITestsLaunchTests.swift
new file mode 100644
index 0000000..0b1db7d
--- /dev/null
+++ b/scarf/Scarf iOSUITests/Scarf_iOSUITestsLaunchTests.swift
@@ -0,0 +1,33 @@
+//
+// Scarf_iOSUITestsLaunchTests.swift
+// Scarf iOSUITests
+//
+// Created by Alan Wizemann on 4/23/26.
+//
+
+import XCTest
+
+final class Scarf_iOSUITestsLaunchTests: XCTestCase {
+
+ override class var runsForEachTargetApplicationUIConfiguration: Bool {
+ true
+ }
+
+ override func setUpWithError() throws {
+ continueAfterFailure = false
+ }
+
+ @MainActor
+ func testLaunch() throws {
+ let app = XCUIApplication()
+ app.launch()
+
+ // Insert steps here to perform after app launch but before taking a screenshot,
+ // such as logging into a test account or navigating somewhere in the app
+
+ let attachment = XCTAttachment(screenshot: app.screenshot())
+ attachment.name = "Launch Screen"
+ attachment.lifetime = .keepAlways
+ add(attachment)
+ }
+}
diff --git a/scarf/docs/iOS-SETUP.md b/scarf/docs/iOS-SETUP.md
new file mode 100644
index 0000000..4280269
--- /dev/null
+++ b/scarf/docs/iOS-SETUP.md
@@ -0,0 +1,180 @@
+# Scarf Mobile — iOS build & setup
+
+The iOS app target (`scarf mobile`) is already set up inside the
+shared `scarf.xcodeproj`. This document records what was done so
+future contributors understand the project layout; the step-by-step
+target-creation instructions that used to live here are moot now
+that the target exists.
+
+## Layout
+
+```
+scarf/
+ scarf.xcodeproj/ Single project, multiple targets:
+ - scarf (macOS app)
+ - scarf mobile (iOS app, Bundle com.scarf-mobile.app)
+ - Mac + iOS test bundles
+ Packages/
+ ScarfCore/ Local SPM — shared platform-neutral code
+ (Models, Transport, Services, ViewModels,
+ ACP state machine). Consumed by BOTH
+ Mac and iOS targets.
+ ScarfIOS/ Local SPM — iOS-specific
+ (CitadelSSHService, CitadelServerTransport,
+ Keychain, UserDefaults-backed stores).
+ Consumed by iOS target only.
+ scarf/ PBXFileSystemSynchronizedRootGroup for Mac
+ target. Every .swift under this tree is
+ auto-compiled into the Mac app.
+ Scarf iOS/ PBXFileSystemSynchronizedRootGroup for
+ iOS target. Same auto-compile pattern.
+ App/
+ ScarfIOSApp.swift @main entry point
+ Onboarding/
+ OnboardingRootView.swift
+ Dashboard/
+ DashboardView.swift
+ Assets.xcassets/ App icon + Scarf-teal accent color
+ Info.plist
+ Scarf_iOS.entitlements
+ Scarf iOSTests/ iOS unit tests (XCTest)
+ Scarf iOSUITests/ iOS UI tests (XCTest)
+```
+
+## Target settings
+
+As configured in `scarf.xcodeproj/project.pbxproj`:
+
+- **Product name**: `scarf mobile`
+- **Folder name** (on disk): `Scarf iOS`
+- **Bundle ID**: `com.scarf-mobile.app`
+- **Deployment target**: iOS 18.0, iPhone-only
+- **Team**: `3Q6X2L86C4` (shared with the Mac target)
+- **Swift language version**: Swift 5 (matches Mac + both SPM packages)
+
+The product / folder naming mismatch is cosmetic — Xcode's
+`PBXFileSystemSynchronizedRootGroup` decouples the two cleanly.
+
+## SPM dependencies
+
+Both local packages are wired into the iOS target in the pbxproj:
+
+- `ScarfCore` (local package at `Packages/ScarfCore`) → shared with Mac.
+- `ScarfIOS` (local package at `Packages/ScarfIOS`) → iOS-only; pulls
+ `Citadel 0.12.x` transitively.
+
+On first open Xcode will resolve Citadel from GitHub (~30s-1min).
+Delete DerivedData + **File → Packages → Reset Package Caches** if
+it stalls.
+
+## Build + run
+
+1. Open `scarf/scarf.xcodeproj`.
+2. Scheme picker top-left → select **scarf mobile**.
+3. Destination → any iPhone simulator on iOS 18+.
+4. ⌘R. Expect onboarding → dashboard flow.
+
+Switch back to the Mac target with the scheme picker.
+
+## Smoke test — end-to-end against a real Hermes host
+
+1. Pick a host you own with a Hermes install at `~/.hermes/`.
+2. Run the iOS app on a simulator or physical device.
+3. Onboarding: enter the host, generate a new Ed25519 key, tap
+ **Copy** on the public-key screen, paste that line into
+ `~/.ssh/authorized_keys` on the remote, tap **I've added this key**.
+4. If auth succeeds → **Connected** → Dashboard.
+5. Dashboard should populate session stats + recent sessions within
+ a second or two (first load does a Citadel SSH handshake + SFTP
+ snapshot of `state.db`; subsequent refreshes reuse the same SSH
+ session).
+
+## Info.plist / entitlements
+
+Current iOS target is configured with:
+
+- `UIBackgroundModes: remote-notification` (in Info.plist)
+- `aps-environment: development` (in Scarf_iOS.entitlements)
+- `com.apple.developer.icloud-services: [CloudKit]` (in entitlements)
+
+These are Xcode's defaults from "Storage: CloudKit" + APNs-capable.
+M2–M4 don't use any of them — no APNs in v1 per the plan, no
+CloudKit at all. Leaving them in place for now since they're a
+no-op; strip during M6 polish if App Store Review flags anything.
+
+## Test targets
+
+`Scarf iOSTests/Scarf_iOSTests.swift` and
+`Scarf iOSUITests/Scarf_iOSUITests*.swift` are Xcode-scaffolded
+placeholders. Real iOS behavioural coverage lives in:
+
+- `Packages/ScarfCore/Tests/ScarfCoreTests/` — 96+ tests, all
+ runnable on Linux CI via `docker run --rm -v
+ $PWD/Packages/ScarfCore:/work -w /work swift:6.0 swift test`.
+- `Packages/ScarfIOS/Tests/ScarfIOSTests/` — Apple-only smoke tests
+ (Ed25519 keygen + OpenSSH wire format).
+
+## TestFlight upload
+
+1. Scheme: **scarf mobile**. Destination: **Any iOS Device (arm64)**
+ or a physical iPhone.
+2. **Product → Archive**.
+3. **Window → Organizer → Distribute App → App Store Connect →
+ Upload**.
+4. First upload creates the App Store Connect app record with
+ Bundle ID `com.scarf-mobile.app` under team `3Q6X2L86C4`.
+5. Invite testers.
+
+No network-usage `Info.plist` key needed — Citadel uses SwiftNIO
+sockets, not Apple's local-network discovery.
+
+## Milestone coverage
+
+- **M0–M1**: ScarfCore extraction + `ACPChannel` protocol + decoupled
+ `ACPClient`. All Mac-only code; iOS target didn't exist yet.
+- **M2**: Onboarding + SSH key generate/import + Keychain storage +
+ Citadel-backed "Test Connection" + Dashboard placeholder.
+- **M3**: Real iOS `CitadelServerTransport` + live Dashboard data.
+- **M4** *(in progress)*: iOS Chat via an `SSHExecACPChannel` built
+ on Citadel's raw exec channel. Plugs into `ACPClient.ChannelFactory`
+ (defined in M1), same JSON-RPC state machine as Mac.
+- **M5**: Memory editor, Cron, Skills, Settings on iOS.
+- **M6**: Polish, App Store submission.
+
+## Troubleshooting
+
+**Citadel fails to resolve.** Delete DerivedData
+(`~/Library/Developer/Xcode/DerivedData/scarf-*`) then **File →
+Packages → Reset Package Caches**; rebuild.
+
+**`Cannot find 'Process' in scope` when building scarf mobile.**
+`ServerTransport.makeProcess` is guarded with `#if !os(iOS)` as of
+M3. If this appears, grep the iOS target's membership for a stray
+file referencing `Process()` directly.
+
+**`SSHAuthenticationMethod` has no member `ed25519`.** Shouldn't
+happen against Citadel 0.12.x (verified against 0.12.1 source).
+If you bump the pin to 0.13+, check the current
+`Sources/Citadel/SSHAuthenticationMethod.swift` — one line to update
+in `ScarfIOS/CitadelSSHService.buildClientSettings(...)`.
+
+**Dashboard says "Couldn't read the Hermes database".** Expected on
+fresh Hermes installs where `~/.hermes/state.db` doesn't exist.
+Start a Hermes session on the host first, then pull-to-refresh.
+
+**Slow first-connect (10+ seconds).** Citadel's SSH handshake +
+SFTP open is the critical path. If it's consistently that slow,
+check that plain `ssh` works to the same host from a terminal with
+the same key; sometimes the issue is a restricted login shell that
+won't let `sqlite3` run.
+
+**Keychain blank after relaunch.** Verify `kSecAttrAccessible` is
+`AfterFirstUnlockThisDeviceOnly` (the default). Biometric-required
+accessibility values would block startup reads from background tasks.
+
+**Exported public key doesn't match what `ssh-keygen -y` produces
+from the stored private.** Correct — the **public** half is standard
+OpenSSH wire format (interop-safe with `authorized_keys`); the
+**private** half uses a Scarf-internal compact PEM (see
+`Packages/ScarfIOS/Sources/ScarfIOS/Ed25519KeyGenerator.swift`).
+Export to `~/.ssh/id_ed25519` format is planned for a future phase.
diff --git a/scarf/scarf-ios/SETUP.md b/scarf/scarf-ios/SETUP.md
deleted file mode 100644
index 69319f9..0000000
--- a/scarf/scarf-ios/SETUP.md
+++ /dev/null
@@ -1,195 +0,0 @@
-# scarf-ios — Xcode target setup
-
-This folder contains the source tree for the iOS app (`scarf-ios`).
-The Xcode target itself is added to the **existing `scarf.xcodeproj`**
-as a second target alongside the Mac `scarf` target — **not** a
-separate `.xcodeproj`. One project, two targets.
-
-Everything the app needs — SSH key generation, Keychain storage,
-onboarding state machine, Citadel-backed SSH client, SQLite-backed
-Dashboard — already lives in the shared SPM packages
-(`Packages/ScarfCore`, `Packages/ScarfIOS`) and is exercised by
-96 passing unit tests on Linux CI. The iOS target is mostly just a
-wrapper that assembles those packages behind a `@main` SwiftUI app.
-
-Creating the target is a one-time ~5-minute step in Xcode's UI.
-
-## One-time: add the iOS target to the existing project
-
-1. Open `scarf/scarf.xcodeproj` in **Xcode**.
-2. Select the project in the Project Navigator.
-3. **File → New → Target…** (or use the `+` button at the bottom of
- the targets list).
-4. Choose **iOS → App**. Click Next.
-5. Fill in:
- - **Product Name**: `scarf-ios`
- - **Team**: `3Q6X2L86C4` (the same team the Mac target uses)
- - **Organization Identifier**: `com.scarf`
- - **Bundle Identifier** will be `com.scarf.scarf-ios`
- - **Interface**: **SwiftUI**
- - **Language**: **Swift**
- - **Storage**: **None**
- - **Include Tests**: unchecked (SPM covers them)
-6. Click **Finish**. Xcode creates the target plus a default source
- tree under `scarf/scarf-ios/` (a folder you'll immediately throw
- away, since our real source lives there already).
-7. If Xcode asks about "Activate scheme": **yes**.
-
-## One-time: target settings
-
-With the `scarf-ios` target selected in the project editor:
-
-1. **General → Minimum Deployments → iPhone**: `iOS 18.0`.
-2. **General → Supported Destinations**: keep **iPhone** only. Remove
- iPad + Mac Catalyst + Vision.
-3. **Signing & Capabilities → Team**: `3Q6X2L86C4` (should have
- auto-filled from step 5 above).
-4. **Build Settings → Swift Language Version**: `Swift 5` (matches
- the Mac target + both SPM packages).
-
-## One-time: link the SPM packages to the iOS target
-
-`ScarfCore` and `ScarfIOS` are already in the project's package
-references (the Mac target already uses ScarfCore). You only need to
-add them to the NEW iOS target.
-
-1. Select the project in the navigator → select the `scarf-ios`
- target → **General → Frameworks, Libraries, and Embedded
- Content**.
-2. Click the `+` button.
-3. Select **ScarfCore** (library from ScarfCore local package). Add.
-4. Click `+` again. Select **ScarfIOS**. Add.
-5. Citadel is pulled in transitively by ScarfIOS — no need to add it
- explicitly. On first build Xcode resolves it from GitHub
- (~30s-1min).
-
-## One-time: replace the default source tree
-
-1. In Xcode's Project Navigator, find the `scarf-ios` group Xcode
- created. Delete:
- - `scarf_iosApp.swift` (or `scarf-iosApp.swift`)
- - `ContentView.swift`
- - **`Assets.xcassets`** — we ship our own pre-built one.
-2. In Finder, open `/scarf/scarf-ios/`. Drag these four folders
- onto the `scarf-ios` group in Xcode:
- - `App/`
- - `Onboarding/`
- - `Dashboard/`
- - `Assets.xcassets/`
-3. In the import sheet:
- - **Destination**: Copy items if needed — **unchecked** (they're
- already in place).
- - **Added folders**: **Create groups**.
- - **Add to targets**: **scarf-ios** only.
-4. Build (`⌘B`). Should compile cleanly against Citadel 0.12.1 —
- every API call in `CitadelSSHService` + `CitadelServerTransport`
- was cross-checked against the 0.12.1 tag. If you've bumped the
- pin to 0.13+ and something fails, check
- `Sources/Citadel/SSHAuthenticationMethod.swift` for the current
- `.ed25519(username:privateKey:)` spelling.
-
-## App icon + accent color
-
-Already in `Assets.xcassets/` so you don't configure anything:
-
-- **`AppIcon.appiconset/AppIcon-1024.png`** — the 1024×1024 Scarf
- icon copied from the Mac app's icon set. iOS 14+ renders all
- smaller sizes automatically from the single 1024 image.
-- **`AccentColor.colorset`** — custom Scarf teal (sRGB `0.227 /
- 0.525 / 0.722` light mode; `0.400 / 0.690 / 0.902` dark). Edit
- `Contents.json` or Xcode's color picker to change.
-
-## Info.plist for TestFlight
-
-Under the scarf-ios target → **Info → Custom iOS Target Properties**:
-
-- `LSRequiresIPhoneOS = YES` (usually defaulted)
-- `UIApplicationSceneManifest → UIApplicationSupportsMultipleScenes = NO`
- (iPhone single-window)
-- `UILaunchScreen` — empty dictionary is fine
-
-Citadel uses SwiftNIO, not Apple's local-network discovery, so no
-network-usage-description key is needed.
-
-## Smoke test
-
-1. Switch the run destination to an iPhone simulator (any iPhone
- running iOS 18+). Xcode's target switcher lets you toggle between
- scarf (macOS) and scarf-ios.
-2. ⌘R. Expect the onboarding flow:
- **Remote host** → **SSH key choice** → **Generate** → **Show
- public key** → **I've added this** → **Test connection** → ...
-3. On **Show public key**, the OpenSSH line is selectable + copyable
- (`ssh-ed25519 AAAA… scarf-iphone-XXXX`).
-4. Without a real SSH server, **Test connection** will fail with
- `.hostUnreachable` — that's expected. Land on the **Connection
- failed** screen with a **Retry** button.
-5. Real end-to-end: use a host you own. Copy the shown public key
- into `~/.ssh/authorized_keys` on that host. Tap **Retry**. You
- should reach **Connected** → **Dashboard**, which then does a
- Citadel SFTP snapshot of `~/.hermes/state.db` and renders
- session + token stats.
-
-## TestFlight upload
-
-1. Scheme selector top-left → **scarf-ios**. Destination: **Any iOS
- Device (arm64)** or a physical iPhone.
-2. **Product → Archive**.
-3. **Window → Organizer → Archives → Distribute App → App Store
- Connect → Upload**.
-4. First upload creates the App Store Connect app record with
- `com.scarf.scarf-ios`. Same team as the Mac app.
-5. Invite testers from App Store Connect.
-
-## What's in each milestone
-
-- **M2** — Onboarding (SSH key + Keychain), Citadel-based
- "Test Connection", Dashboard placeholder.
-- **M3** — Real Dashboard via `CitadelServerTransport` +
- `HermesDataService` (you're running the M3 PR now).
-- **M4** — Chat over an iOS `SSHExecACPChannel`.
-- **M5** — Memory editing, Cron, Skills, Settings.
-- **M6** — Polish + App Store submission.
-
-## Troubleshooting
-
-**Citadel fails to resolve.** Delete DerivedData
-(`~/Library/Developer/Xcode/DerivedData/scarf-*`) and **File →
-Packages → Reset Package Caches**, then rebuild.
-
-**`Cannot find 'Process' in scope` when building scarf-ios.** Should
-not happen post-M3 — the `makeProcess` protocol method is now
-`#if !os(iOS)`-guarded. If you see this: grep the scarf-ios target's
-source files for `Process()`, `process.isRunning`, or `terminationHandler`
-— something Mac-only leaked into the iOS target's membership.
-
-**`SSHAuthenticationMethod` has no member `ed25519`.** Shouldn't happen
-against Citadel 0.12.1 (verified), but historically the private-key
-variant names have changed between minor versions (0.7 → 0.9 → 0.12).
-See `CitadelSSHService.buildClientSettings(...)` in ScarfIOS — one
-line to update. Keep the protocol conformance intact.
-
-**Dashboard shows "Couldn't read the Hermes database".** Expected if
-the host's `~/.hermes/state.db` doesn't exist yet (fresh Hermes
-install). Start a Hermes session on the host first, then pull-to-
-refresh.
-
-**Dashboard spins forever on first connect.** Citadel connection
-hand-shake + SFTP open can take 5-10s on a cold network. If it's
-longer, check that the same SSH key works from a regular `ssh` client
-against the same host — sometimes the issue is an authorized_keys
-line with a trailing whitespace, or the host uses a restricted shell
-that blocks `sqlite3`.
-
-**Keychain reads empty after relaunch.** Check you haven't set
-`kSecAttrAccessible` to a biometric-required value. We use
-`AfterFirstUnlockThisDeviceOnly`, which is readable any time after
-the first post-boot unlock.
-
-**The public-key line doesn't match what `ssh-keygen` would produce
-from the same private key.** The **public** key is standard OpenSSH
-wire format (interop-safe with `authorized_keys`). The **private**
-key uses a compact Scarf-internal PEM (see
-`ScarfIOS/Ed25519KeyGenerator.swift`) — it's not directly exportable
-to `~/.ssh/id_ed25519`. A future phase adds an export flow that
-re-serializes to standard OpenSSH PEM.
diff --git a/scarf/scarf.xcodeproj/project.pbxproj b/scarf/scarf.xcodeproj/project.pbxproj
index eb33ee2..6a15517 100644
--- a/scarf/scarf.xcodeproj/project.pbxproj
+++ b/scarf/scarf.xcodeproj/project.pbxproj
@@ -9,10 +9,26 @@
/* Begin PBXBuildFile section */
53495AB62F7B992C00BD31AD /* SwiftTerm in Frameworks */ = {isa = PBXBuildFile; productRef = 53SWIFTTERM0001 /* SwiftTerm */; };
53SCARFCORE0010 /* ScarfCore in Frameworks */ = {isa = PBXBuildFile; productRef = 53SCARFCORE0001 /* ScarfCore */; };
+ 53SCARFCORE0011 /* ScarfCore in Frameworks (iOS) */ = {isa = PBXBuildFile; productRef = 53SCARFCORE0002 /* ScarfCore */; };
+ 53SCARFIOS0010 /* ScarfIOS in Frameworks */ = {isa = PBXBuildFile; productRef = 53SCARFIOS0001 /* ScarfIOS */; };
53SPARKLE00010 /* Sparkle in Frameworks */ = {isa = PBXBuildFile; productRef = 53SPARKLE00011 /* Sparkle */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
+ 4EAC233A2F99930100654F42 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 534959382F7B83B600BD31AD /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 4EAC23282F99930000654F42;
+ remoteInfo = "Scarf iOS";
+ };
+ 4EAC23442F99930100654F42 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 534959382F7B83B600BD31AD /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 4EAC23282F99930000654F42;
+ remoteInfo = "Scarf iOS";
+ };
534959502F7B83B700BD31AD /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 534959382F7B83B600BD31AD /* Project object */;
@@ -30,12 +46,22 @@
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
+ 4EAC23292F99930000654F42 /* scarf mobile.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "scarf mobile.app"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 4EAC23392F99930100654F42 /* Scarf iOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Scarf iOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 4EAC23432F99930100654F42 /* Scarf iOSUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Scarf iOSUITests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
534959402F7B83B600BD31AD /* scarf.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = scarf.app; sourceTree = BUILT_PRODUCTS_DIR; };
5349594F2F7B83B700BD31AD /* scarfTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = scarfTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
534959592F7B83B700BD31AD /* scarfUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = scarfUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */
+ 4EAC234B2F99930100654F42 /* Exceptions for "Scarf iOS" folder in "scarf mobile" target */ = {
+ isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
+ membershipExceptions = (
+ Info.plist,
+ );
+ target = 4EAC23282F99930000654F42 /* scarf mobile */;
+ };
534959AA2F7B83B600BD31AD /* Exceptions for "scarf" folder in "scarf" target */ = {
isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
membershipExceptions = (
@@ -46,6 +72,24 @@
/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */
/* Begin PBXFileSystemSynchronizedRootGroup section */
+ 4EAC232A2F99930000654F42 /* Scarf iOS */ = {
+ isa = PBXFileSystemSynchronizedRootGroup;
+ exceptions = (
+ 4EAC234B2F99930100654F42 /* Exceptions for "Scarf iOS" folder in "scarf mobile" target */,
+ );
+ path = "Scarf iOS";
+ sourceTree = "";
+ };
+ 4EAC233C2F99930100654F42 /* Scarf iOSTests */ = {
+ isa = PBXFileSystemSynchronizedRootGroup;
+ path = "Scarf iOSTests";
+ sourceTree = "";
+ };
+ 4EAC23462F99930100654F42 /* Scarf iOSUITests */ = {
+ isa = PBXFileSystemSynchronizedRootGroup;
+ path = "Scarf iOSUITests";
+ sourceTree = "";
+ };
534959422F7B83B600BD31AD /* scarf */ = {
isa = PBXFileSystemSynchronizedRootGroup;
exceptions = (
@@ -67,6 +111,29 @@
/* End PBXFileSystemSynchronizedRootGroup section */
/* Begin PBXFrameworksBuildPhase section */
+ 4EAC23262F99930000654F42 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 53SCARFCORE0011 /* ScarfCore in Frameworks (iOS) */,
+ 53SCARFIOS0010 /* ScarfIOS in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 4EAC23362F99930100654F42 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 4EAC23402F99930100654F42 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
5349593D2F7B83B600BD31AD /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
@@ -100,6 +167,9 @@
534959422F7B83B600BD31AD /* scarf */,
534959522F7B83B700BD31AD /* scarfTests */,
5349595C2F7B83B700BD31AD /* scarfUITests */,
+ 4EAC232A2F99930000654F42 /* Scarf iOS */,
+ 4EAC233C2F99930100654F42 /* Scarf iOSTests */,
+ 4EAC23462F99930100654F42 /* Scarf iOSUITests */,
534959412F7B83B600BD31AD /* Products */,
);
sourceTree = "";
@@ -110,6 +180,9 @@
534959402F7B83B600BD31AD /* scarf.app */,
5349594F2F7B83B700BD31AD /* scarfTests.xctest */,
534959592F7B83B700BD31AD /* scarfUITests.xctest */,
+ 4EAC23292F99930000654F42 /* scarf mobile.app */,
+ 4EAC23392F99930100654F42 /* Scarf iOSTests.xctest */,
+ 4EAC23432F99930100654F42 /* Scarf iOSUITests.xctest */,
);
name = Products;
sourceTree = "";
@@ -117,6 +190,76 @@
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
+ 4EAC23282F99930000654F42 /* scarf mobile */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 4EAC234C2F99930100654F42 /* Build configuration list for PBXNativeTarget "scarf mobile" */;
+ buildPhases = (
+ 4EAC23252F99930000654F42 /* Sources */,
+ 4EAC23262F99930000654F42 /* Frameworks */,
+ 4EAC23272F99930000654F42 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ fileSystemSynchronizedGroups = (
+ 4EAC232A2F99930000654F42 /* Scarf iOS */,
+ );
+ name = "scarf mobile";
+ packageProductDependencies = (
+ 53SCARFCORE0002 /* ScarfCore */,
+ 53SCARFIOS0001 /* ScarfIOS */,
+ );
+ productName = "Scarf iOS";
+ productReference = 4EAC23292F99930000654F42 /* scarf mobile.app */;
+ productType = "com.apple.product-type.application";
+ };
+ 4EAC23382F99930100654F42 /* Scarf iOSTests */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 4EAC234F2F99930100654F42 /* Build configuration list for PBXNativeTarget "Scarf iOSTests" */;
+ buildPhases = (
+ 4EAC23352F99930100654F42 /* Sources */,
+ 4EAC23362F99930100654F42 /* Frameworks */,
+ 4EAC23372F99930100654F42 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 4EAC233B2F99930100654F42 /* PBXTargetDependency */,
+ );
+ fileSystemSynchronizedGroups = (
+ 4EAC233C2F99930100654F42 /* Scarf iOSTests */,
+ );
+ name = "Scarf iOSTests";
+ packageProductDependencies = (
+ );
+ productName = "Scarf iOSTests";
+ productReference = 4EAC23392F99930100654F42 /* Scarf iOSTests.xctest */;
+ productType = "com.apple.product-type.bundle.unit-test";
+ };
+ 4EAC23422F99930100654F42 /* Scarf iOSUITests */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 4EAC23522F99930100654F42 /* Build configuration list for PBXNativeTarget "Scarf iOSUITests" */;
+ buildPhases = (
+ 4EAC233F2F99930100654F42 /* Sources */,
+ 4EAC23402F99930100654F42 /* Frameworks */,
+ 4EAC23412F99930100654F42 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 4EAC23452F99930100654F42 /* PBXTargetDependency */,
+ );
+ fileSystemSynchronizedGroups = (
+ 4EAC23462F99930100654F42 /* Scarf iOSUITests */,
+ );
+ name = "Scarf iOSUITests";
+ packageProductDependencies = (
+ );
+ productName = "Scarf iOSUITests";
+ productReference = 4EAC23432F99930100654F42 /* Scarf iOSUITests.xctest */;
+ productType = "com.apple.product-type.bundle.ui-testing";
+ };
5349593F2F7B83B600BD31AD /* scarf */ = {
isa = PBXNativeTarget;
buildConfigurationList = 534959632F7B83B700BD31AD /* Build configuration list for PBXNativeTarget "scarf" */;
@@ -195,9 +338,20 @@
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = 1;
- LastSwiftUpdateCheck = 2630;
+ LastSwiftUpdateCheck = 2620;
LastUpgradeCheck = 2630;
TargetAttributes = {
+ 4EAC23282F99930000654F42 = {
+ CreatedOnToolsVersion = 26.2;
+ };
+ 4EAC23382F99930100654F42 = {
+ CreatedOnToolsVersion = 26.2;
+ TestTargetID = 4EAC23282F99930000654F42;
+ };
+ 4EAC23422F99930100654F42 = {
+ CreatedOnToolsVersion = 26.2;
+ TestTargetID = 4EAC23282F99930000654F42;
+ };
5349593F2F7B83B600BD31AD = {
CreatedOnToolsVersion = 26.3;
};
@@ -229,6 +383,7 @@
packageReferences = (
53SWIFTTERM0002 /* XCRemoteSwiftPackageReference "SwiftTerm" */,
53SCARFCORE0020 /* XCLocalSwiftPackageReference "Packages/ScarfCore" */,
+ 53SCARFIOS0020 /* XCLocalSwiftPackageReference "Packages/ScarfIOS" */,
53SPARKLE00012 /* XCRemoteSwiftPackageReference "Sparkle" */,
);
preferredProjectObjectVersion = 77;
@@ -239,11 +394,35 @@
5349593F2F7B83B600BD31AD /* scarf */,
5349594E2F7B83B700BD31AD /* scarfTests */,
534959582F7B83B700BD31AD /* scarfUITests */,
+ 4EAC23282F99930000654F42 /* scarf mobile */,
+ 4EAC23382F99930100654F42 /* Scarf iOSTests */,
+ 4EAC23422F99930100654F42 /* Scarf iOSUITests */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
+ 4EAC23272F99930000654F42 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 4EAC23372F99930100654F42 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 4EAC23412F99930100654F42 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
5349593E2F7B83B600BD31AD /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
@@ -268,6 +447,27 @@
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
+ 4EAC23252F99930000654F42 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 4EAC23352F99930100654F42 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 4EAC233F2F99930100654F42 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
5349593C2F7B83B600BD31AD /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
@@ -292,6 +492,16 @@
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
+ 4EAC233B2F99930100654F42 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 4EAC23282F99930000654F42 /* scarf mobile */;
+ targetProxy = 4EAC233A2F99930100654F42 /* PBXContainerItemProxy */;
+ };
+ 4EAC23452F99930100654F42 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 4EAC23282F99930000654F42 /* scarf mobile */;
+ targetProxy = 4EAC23442F99930100654F42 /* PBXContainerItemProxy */;
+ };
534959512F7B83B700BD31AD /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 5349593F2F7B83B600BD31AD /* scarf */;
@@ -305,6 +515,175 @@
/* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */
+ 4EAC234D2F99930100654F42 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+ CODE_SIGN_ENTITLEMENTS = "Scarf iOS/Scarf_iOS.entitlements";
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ DEVELOPMENT_TEAM = 3Q6X2L86C4;
+ ENABLE_PREVIEWS = YES;
+ GENERATE_INFOPLIST_FILE = YES;
+ INFOPLIST_FILE = "Scarf iOS/Info.plist";
+ INFOPLIST_KEY_CFBundleDisplayName = "Scarf Mobile";
+ INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.developer-tools";
+ INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
+ INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
+ INFOPLIST_KEY_UILaunchScreen_Generation = YES;
+ INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
+ INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
+ IPHONEOS_DEPLOYMENT_TARGET = 18.6;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = "com.scarf-mobile.app";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SDKROOT = iphoneos;
+ STRING_CATALOG_GENERATE_SYMBOLS = YES;
+ SWIFT_APPROACHABLE_CONCURRENCY = YES;
+ SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor;
+ SWIFT_EMIT_LOC_STRINGS = YES;
+ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Debug;
+ };
+ 4EAC234E2F99930100654F42 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+ CODE_SIGN_ENTITLEMENTS = "Scarf iOS/Scarf_iOS.entitlements";
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ DEVELOPMENT_TEAM = 3Q6X2L86C4;
+ ENABLE_PREVIEWS = YES;
+ GENERATE_INFOPLIST_FILE = YES;
+ INFOPLIST_FILE = "Scarf iOS/Info.plist";
+ INFOPLIST_KEY_CFBundleDisplayName = "Scarf Mobile";
+ INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.developer-tools";
+ INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
+ INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
+ INFOPLIST_KEY_UILaunchScreen_Generation = YES;
+ INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
+ INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
+ IPHONEOS_DEPLOYMENT_TARGET = 18.6;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = "com.scarf-mobile.app";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SDKROOT = iphoneos;
+ STRING_CATALOG_GENERATE_SYMBOLS = YES;
+ SWIFT_APPROACHABLE_CONCURRENCY = YES;
+ SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor;
+ SWIFT_EMIT_LOC_STRINGS = YES;
+ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+ 4EAC23502F99930100654F42 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ DEVELOPMENT_TEAM = 3Q6X2L86C4;
+ GENERATE_INFOPLIST_FILE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 26.2;
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = "alanwizemann.Scarf-iOSTests";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SDKROOT = iphoneos;
+ STRING_CATALOG_GENERATE_SYMBOLS = NO;
+ SWIFT_APPROACHABLE_CONCURRENCY = YES;
+ SWIFT_EMIT_LOC_STRINGS = NO;
+ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Scarf iOS.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Scarf iOS";
+ };
+ name = Debug;
+ };
+ 4EAC23512F99930100654F42 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ DEVELOPMENT_TEAM = 3Q6X2L86C4;
+ GENERATE_INFOPLIST_FILE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 26.2;
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = "alanwizemann.Scarf-iOSTests";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SDKROOT = iphoneos;
+ STRING_CATALOG_GENERATE_SYMBOLS = NO;
+ SWIFT_APPROACHABLE_CONCURRENCY = YES;
+ SWIFT_EMIT_LOC_STRINGS = NO;
+ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Scarf iOS.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Scarf iOS";
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+ 4EAC23532F99930100654F42 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ DEVELOPMENT_TEAM = 3Q6X2L86C4;
+ GENERATE_INFOPLIST_FILE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 26.2;
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = "alanwizemann.Scarf-iOSUITests";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SDKROOT = iphoneos;
+ STRING_CATALOG_GENERATE_SYMBOLS = NO;
+ SWIFT_APPROACHABLE_CONCURRENCY = YES;
+ SWIFT_EMIT_LOC_STRINGS = NO;
+ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ TEST_TARGET_NAME = "Scarf iOS";
+ };
+ name = Debug;
+ };
+ 4EAC23542F99930100654F42 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ DEVELOPMENT_TEAM = 3Q6X2L86C4;
+ GENERATE_INFOPLIST_FILE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 26.2;
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = "alanwizemann.Scarf-iOSUITests";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SDKROOT = iphoneos;
+ STRING_CATALOG_GENERATE_SYMBOLS = NO;
+ SWIFT_APPROACHABLE_CONCURRENCY = YES;
+ SWIFT_EMIT_LOC_STRINGS = NO;
+ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ TEST_TARGET_NAME = "Scarf iOS";
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
534959612F7B83B700BD31AD /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -448,6 +827,7 @@
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = NO;
INFOPLIST_FILE = scarf/Info.plist;
+ INFOPLIST_KEY_CFBundleDisplayName = Scarf;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
@@ -483,6 +863,7 @@
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = NO;
INFOPLIST_FILE = scarf/Info.plist;
+ INFOPLIST_KEY_CFBundleDisplayName = Scarf;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
@@ -588,6 +969,33 @@
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
+ 4EAC234C2F99930100654F42 /* Build configuration list for PBXNativeTarget "scarf mobile" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 4EAC234D2F99930100654F42 /* Debug */,
+ 4EAC234E2F99930100654F42 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 4EAC234F2F99930100654F42 /* Build configuration list for PBXNativeTarget "Scarf iOSTests" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 4EAC23502F99930100654F42 /* Debug */,
+ 4EAC23512F99930100654F42 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 4EAC23522F99930100654F42 /* Build configuration list for PBXNativeTarget "Scarf iOSUITests" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 4EAC23532F99930100654F42 /* Debug */,
+ 4EAC23542F99930100654F42 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
5349593B2F7B83B600BD31AD /* Build configuration list for PBXProject "scarf" */ = {
isa = XCConfigurationList;
buildConfigurations = (
@@ -631,6 +1039,10 @@
isa = XCLocalSwiftPackageReference;
relativePath = Packages/ScarfCore;
};
+ 53SCARFIOS0020 /* XCLocalSwiftPackageReference "Packages/ScarfIOS" */ = {
+ isa = XCLocalSwiftPackageReference;
+ relativePath = Packages/ScarfIOS;
+ };
/* End XCLocalSwiftPackageReference section */
/* Begin XCRemoteSwiftPackageReference section */
@@ -657,6 +1069,14 @@
isa = XCSwiftPackageProductDependency;
productName = ScarfCore;
};
+ 53SCARFCORE0002 /* ScarfCore */ = {
+ isa = XCSwiftPackageProductDependency;
+ productName = ScarfCore;
+ };
+ 53SCARFIOS0001 /* ScarfIOS */ = {
+ isa = XCSwiftPackageProductDependency;
+ productName = ScarfIOS;
+ };
53SPARKLE00011 /* Sparkle */ = {
isa = XCSwiftPackageProductDependency;
package = 53SPARKLE00012 /* XCRemoteSwiftPackageReference "Sparkle" */;