iOS target reconciliation: integrate Xcode-created scarf mobile target

Three-way reconciliation of:
  - my M2/M3 source tree at scarf/scarf-ios/
  - Alan's Xcode-created target with folder scarf/Scarf iOS/ and
    target name `scarf mobile` (bundle com.scarf-mobile.app)
  - the Mac `scarf` target that already had ScarfCore wired in

Alan created the iOS target on the unrelated `template-configuration`
branch (commit b289a83). I pulled only the iOS-specific bits
(Scarf iOS/ folder, Scarf iOS{Tests,UITests}/, and the pbxproj
additions), leaving the template-config work alone.

## Source tree: one folder, no duplicates

Before:
  - scarf/scarf-ios/{App,Onboarding,Dashboard,Assets.xcassets,SETUP.md}
  - scarf/Scarf iOS/{ContentView,Item,Scarf_iOSApp}.swift  (Xcode defaults)
  - scarf/Scarf iOS/Assets.xcassets/                        (empty stubs)

After:
  - scarf/Scarf iOS/{App,Onboarding,Dashboard,Assets.xcassets,
                     Info.plist,Scarf_iOS.entitlements}
  - scarf/Scarf iOSTests/Scarf_iOSTests.swift               (placeholder)
  - scarf/Scarf iOSUITests/Scarf_iOSUITests*.swift          (placeholder)

Deleted:
  - scarf/Scarf iOS/ContentView.swift        (my App/ScarfIOSApp supersedes)
  - scarf/Scarf iOS/Item.swift               (Xcode's SwiftData boilerplate,
                                              unused)
  - scarf/Scarf iOS/Scarf_iOSApp.swift       (my App/ScarfIOSApp supersedes)
  - scarf/Scarf iOS/Assets.xcassets/         (replaced with pre-built
                                              1024 icon + Scarf-teal accent)
  - scarf/scarf-ios/                         (emptied + removed)

Moved:
  - scarf/scarf-ios/SETUP.md → scarf/docs/iOS-SETUP.md
    Docs belong in docs/ now that the target exists; the old
    walkthrough is rewritten as a "project layout reference"
    post-setup — the step-by-step target-creation instructions
    are moot.

## pbxproj: three-way merge, no conflicts

Used git merge-file between:
  base = main's pbxproj (before M0a + b289a83)
  ours = M3 branch's pbxproj (has ScarfCore wired to Mac target)
  theirs = b289a83 (has iOS target additions)

Merge produced zero conflict markers (658 → 1074 lines, +~416
from Alan's target additions and my M0a ScarfCore wiring). Hand-
added on top:

  - 53SCARFIOS0020: new XCLocalSwiftPackageReference pointing at
    Packages/ScarfIOS
  - 53SCARFIOS0001: XCSwiftPackageProductDependency for ScarfIOS
    product
  - 53SCARFCORE0002: second XCSwiftPackageProductDependency for
    ScarfCore (separate nav reference from the Mac target's so
    Xcode can track per-target memberships cleanly)
  - 53SCARFCORE0011 + 53SCARFIOS0010: PBXBuildFile entries linking
    both frameworks into the iOS target's Frameworks build phase
  - packageReferences on the project: added 53SCARFIOS0020
  - scarf mobile target's packageProductDependencies: added
    53SCARFCORE0002 + 53SCARFIOS0001
  - scarf mobile target's Frameworks build phase files: added
    53SCARFCORE0011 + 53SCARFIOS0010

Mac target (scarf) is unchanged structurally — still wires
53SCARFCORE0001 as before.

## docs/iOS-SETUP.md rewrite

Rewrote from "how to create the target" to "project layout
reference + troubleshooting". Key sections:

  - Target settings (name, bundle ID, deployment, team, Swift
    language version)
  - SPM dependency map (ScarfCore on both; ScarfIOS on iOS only)
  - Entitlements audit: called out that Xcode defaults set
    CloudKit + APNs entitlements that we don't actually use in
    M2-M4. Keeping them for now since they're no-ops; flagged
    for M6 polish.
  - Milestone coverage table
  - Troubleshooting entries for the 4 most likely build failures
    (Citadel resolution, `Cannot find Process`, stale auth variant
    name, Keychain access)

## Sanity check

Linux `swift test` on ScarfCore still 96/96 passing. The Xcode
build will need Mac verification.

https://claude.ai/code/session_019yMRP6mwZWfzVrPTqevx2y
This commit is contained in:
Claude
2026-04-22 23:50:43 +00:00
parent 92ac102f46
commit 110611549e
15 changed files with 716 additions and 196 deletions

Before

Width:  |  Height:  |  Size: 4.4 MiB

After

Width:  |  Height:  |  Size: 4.4 MiB

+10
View File
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>UIBackgroundModes</key>
<array>
<string>remote-notification</string>
</array>
</dict>
</plist>
+14
View File
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>aps-environment</key>
<string>development</string>
<key>com.apple.developer.icloud-container-identifiers</key>
<array/>
<key>com.apple.developer.icloud-services</key>
<array>
<string>CloudKit</string>
</array>
</dict>
</plist>
+17
View File
@@ -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.
}
}
@@ -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 its 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()
}
}
}
@@ -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)
}
}
+180
View File
@@ -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.
M2M4 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
- **M0M1**: 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.
-195
View File
@@ -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 `<repo>/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.
+421 -1
View File
@@ -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 = "<group>";
};
4EAC233C2F99930100654F42 /* Scarf iOSTests */ = {
isa = PBXFileSystemSynchronizedRootGroup;
path = "Scarf iOSTests";
sourceTree = "<group>";
};
4EAC23462F99930100654F42 /* Scarf iOSUITests */ = {
isa = PBXFileSystemSynchronizedRootGroup;
path = "Scarf iOSUITests";
sourceTree = "<group>";
};
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 = "<group>";
@@ -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 = "<group>";
@@ -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" */;