diff --git a/.github/workflows/Build and Test (SwiftPM).yml b/.github/workflows/Build and Test (Package).yml
similarity index 98%
rename from .github/workflows/Build and Test (SwiftPM).yml
rename to .github/workflows/Build and Test (Package).yml
index 04ee802..64304c4 100644
--- a/.github/workflows/Build and Test (SwiftPM).yml
+++ b/.github/workflows/Build and Test (Package).yml
@@ -1,4 +1,4 @@
-# Build and Test
+# Build and Test the top-level package
name: Build and Test (SwiftPM)
on:
diff --git a/.github/workflows/Build and Test (Xcode).yml b/.github/workflows/Build and Test (Xcode App).yml
similarity index 71%
rename from .github/workflows/Build and Test (Xcode).yml
rename to .github/workflows/Build and Test (Xcode App).yml
index 07a1f5b..d3f346f 100644
--- a/.github/workflows/Build and Test (Xcode).yml
+++ b/.github/workflows/Build and Test (Xcode App).yml
@@ -1,4 +1,5 @@
-# Build and Test
+# Build and Test the Xcode App
+# This tests the `SwiftProjectTemplateAppPackage` as well as the `SwiftProjectTemplateApp` Xcode project.
name: Build and Test (Xcode)
on:
@@ -39,17 +40,28 @@ jobs:
- name: Build
run: |
xcrun xcodebuild clean build \
- -workspace Xcode/SwiftProjectTemplateApp.xcworkspace \
+ -workspace .xcode/SwiftProjectTemplate.xcworkspace \
-scheme SwiftProjectTemplateApp \
-derivedDataPath ".build/Xcode.noindex/DerivedData" \
-configuration "${{ matrix.swift-configuration }}" \
-sdk "${{ matrix.xcode-configuration.sdk }}" \
-destination "${{ matrix.xcode-configuration.destination }}"
- - name: Test
+ - name: SwiftPM Tests
+ if: matrix.swift-configuration == 'debug'
run: |
xcrun xcodebuild test \
- -workspace Xcode/SwiftProjectTemplateApp.xcworkspace \
+ -workspace .xcode/SwiftProjectTemplate.xcworkspace \
+ -scheme SwiftProjectTemplateAppPackage \
+ -derivedDataPath ".build/Xcode.noindex/DerivedData" \
+ -configuration "${{ matrix.swift-configuration }}" \
+ -sdk "${{ matrix.xcode-configuration.sdk }}" \
+ -destination "${{ matrix.xcode-configuration.destination }}"
+
+ - name: UI Tests
+ run: |
+ xcrun xcodebuild test \
+ -workspace .xcode/SwiftProjectTemplate.xcworkspace \
-scheme SwiftProjectTemplateAppUITests \
-derivedDataPath ".build/Xcode.noindex/DerivedData" \
-configuration "${{ matrix.swift-configuration }}" \
diff --git a/.xcode/Readme.md b/.xcode/Readme.md
new file mode 100644
index 0000000..fedddde
--- /dev/null
+++ b/.xcode/Readme.md
@@ -0,0 +1,4 @@
+# Xcode App
+
+This folder contains an Xcode project and Swift Package that together define a multiplatform application built using Xcode.
+It is hidden because we includes the top-level package and otherwise there would be an unfortunately recursive folder tree in the Xcode UI.
diff --git a/.xcode/SwiftProjectTemplate b/.xcode/SwiftProjectTemplate
new file mode 120000
index 0000000..a96aa0e
--- /dev/null
+++ b/.xcode/SwiftProjectTemplate
@@ -0,0 +1 @@
+..
\ No newline at end of file
diff --git a/Xcode/SwiftProjectTemplateApp.xcworkspace/contents.xcworkspacedata b/.xcode/SwiftProjectTemplate.xcworkspace/contents.xcworkspacedata
similarity index 75%
rename from Xcode/SwiftProjectTemplateApp.xcworkspace/contents.xcworkspacedata
rename to .xcode/SwiftProjectTemplate.xcworkspace/contents.xcworkspacedata
index 382e077..a6aaf57 100644
--- a/Xcode/SwiftProjectTemplateApp.xcworkspace/contents.xcworkspacedata
+++ b/.xcode/SwiftProjectTemplate.xcworkspace/contents.xcworkspacedata
@@ -1,10 +1,13 @@
+
+
-
+
\ No newline at end of file
diff --git a/Xcode/SwiftProjectTemplateApp.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/.xcode/SwiftProjectTemplate.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
similarity index 100%
rename from Xcode/SwiftProjectTemplateApp.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
rename to .xcode/SwiftProjectTemplate.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
diff --git a/Xcode/SwiftProjectTemplateApp/SwiftProjectTemplateApp.xcodeproj/project.pbxproj b/.xcode/SwiftProjectTemplateApp/SwiftProjectTemplateApp.xcodeproj/project.pbxproj
similarity index 100%
rename from Xcode/SwiftProjectTemplateApp/SwiftProjectTemplateApp.xcodeproj/project.pbxproj
rename to .xcode/SwiftProjectTemplateApp/SwiftProjectTemplateApp.xcodeproj/project.pbxproj
diff --git a/Xcode/SwiftProjectTemplateApp/SwiftProjectTemplateApp/Assets.xcassets/AccentColor.colorset/Contents.json b/.xcode/SwiftProjectTemplateApp/SwiftProjectTemplateApp/Assets.xcassets/AccentColor.colorset/Contents.json
similarity index 100%
rename from Xcode/SwiftProjectTemplateApp/SwiftProjectTemplateApp/Assets.xcassets/AccentColor.colorset/Contents.json
rename to .xcode/SwiftProjectTemplateApp/SwiftProjectTemplateApp/Assets.xcassets/AccentColor.colorset/Contents.json
diff --git a/Xcode/SwiftProjectTemplateApp/SwiftProjectTemplateApp/Assets.xcassets/AppIcon.appiconset/Contents.json b/.xcode/SwiftProjectTemplateApp/SwiftProjectTemplateApp/Assets.xcassets/AppIcon.appiconset/Contents.json
similarity index 100%
rename from Xcode/SwiftProjectTemplateApp/SwiftProjectTemplateApp/Assets.xcassets/AppIcon.appiconset/Contents.json
rename to .xcode/SwiftProjectTemplateApp/SwiftProjectTemplateApp/Assets.xcassets/AppIcon.appiconset/Contents.json
diff --git a/Xcode/SwiftProjectTemplateApp/SwiftProjectTemplateApp/Assets.xcassets/Contents.json b/.xcode/SwiftProjectTemplateApp/SwiftProjectTemplateApp/Assets.xcassets/Contents.json
similarity index 100%
rename from Xcode/SwiftProjectTemplateApp/SwiftProjectTemplateApp/Assets.xcassets/Contents.json
rename to .xcode/SwiftProjectTemplateApp/SwiftProjectTemplateApp/Assets.xcassets/Contents.json
diff --git a/Xcode/SwiftProjectTemplateApp/SwiftProjectTemplateApp/Placeholder.swift b/.xcode/SwiftProjectTemplateApp/SwiftProjectTemplateApp/Placeholder.swift
similarity index 100%
rename from Xcode/SwiftProjectTemplateApp/SwiftProjectTemplateApp/Placeholder.swift
rename to .xcode/SwiftProjectTemplateApp/SwiftProjectTemplateApp/Placeholder.swift
diff --git a/Xcode/SwiftProjectTemplateApp/SwiftProjectTemplateApp/Preview Content/Preview Assets.xcassets/Contents.json b/.xcode/SwiftProjectTemplateApp/SwiftProjectTemplateApp/Preview Content/Preview Assets.xcassets/Contents.json
similarity index 100%
rename from Xcode/SwiftProjectTemplateApp/SwiftProjectTemplateApp/Preview Content/Preview Assets.xcassets/Contents.json
rename to .xcode/SwiftProjectTemplateApp/SwiftProjectTemplateApp/Preview Content/Preview Assets.xcassets/Contents.json
diff --git a/Xcode/SwiftProjectTemplateApp/SwiftProjectTemplateApp/SwiftProjectTemplateApp.entitlements b/.xcode/SwiftProjectTemplateApp/SwiftProjectTemplateApp/SwiftProjectTemplateApp.entitlements
similarity index 100%
rename from Xcode/SwiftProjectTemplateApp/SwiftProjectTemplateApp/SwiftProjectTemplateApp.entitlements
rename to .xcode/SwiftProjectTemplateApp/SwiftProjectTemplateApp/SwiftProjectTemplateApp.entitlements
diff --git a/Xcode/SwiftProjectTemplateApp/SwiftProjectTemplateAppUITests/SwiftProjectTemplateAppUITests.swift b/.xcode/SwiftProjectTemplateApp/SwiftProjectTemplateAppUITests/SwiftProjectTemplateAppUITests.swift
similarity index 100%
rename from Xcode/SwiftProjectTemplateApp/SwiftProjectTemplateAppUITests/SwiftProjectTemplateAppUITests.swift
rename to .xcode/SwiftProjectTemplateApp/SwiftProjectTemplateAppUITests/SwiftProjectTemplateAppUITests.swift
diff --git a/Xcode/SwiftProjectTemplateApp/SwiftProjectTemplateAppUITests/SwiftProjectTemplateAppUITestsLaunchTests.swift b/.xcode/SwiftProjectTemplateApp/SwiftProjectTemplateAppUITests/SwiftProjectTemplateAppUITestsLaunchTests.swift
similarity index 100%
rename from Xcode/SwiftProjectTemplateApp/SwiftProjectTemplateAppUITests/SwiftProjectTemplateAppUITestsLaunchTests.swift
rename to .xcode/SwiftProjectTemplateApp/SwiftProjectTemplateAppUITests/SwiftProjectTemplateAppUITestsLaunchTests.swift
diff --git a/Xcode/SwiftProjectTemplateAppPackage/.gitignore b/.xcode/SwiftProjectTemplateAppPackage/.gitignore
similarity index 100%
rename from Xcode/SwiftProjectTemplateAppPackage/.gitignore
rename to .xcode/SwiftProjectTemplateAppPackage/.gitignore
diff --git a/.xcode/SwiftProjectTemplateAppPackage/.swiftpm/xcode/xcshareddata/xcschemes/SwiftProjectTemplateAppPackage.xcscheme b/.xcode/SwiftProjectTemplateAppPackage/.swiftpm/xcode/xcshareddata/xcschemes/SwiftProjectTemplateAppPackage.xcscheme
new file mode 100644
index 0000000..fa6b525
--- /dev/null
+++ b/.xcode/SwiftProjectTemplateAppPackage/.swiftpm/xcode/xcshareddata/xcschemes/SwiftProjectTemplateAppPackage.xcscheme
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Xcode/SwiftProjectTemplateAppPackage/Package.swift b/.xcode/SwiftProjectTemplateAppPackage/Package.swift
similarity index 88%
rename from Xcode/SwiftProjectTemplateAppPackage/Package.swift
rename to .xcode/SwiftProjectTemplateAppPackage/Package.swift
index 166c95c..43a6433 100644
--- a/Xcode/SwiftProjectTemplateAppPackage/Package.swift
+++ b/.xcode/SwiftProjectTemplateAppPackage/Package.swift
@@ -15,7 +15,7 @@ let package = Package(
)
],
dependencies: [
- .package(name: "SwiftProjectTemplate", path: "../..")
+ .package(name: "SwiftProjectTemplate", path: "../SwiftProjectTemplate")
],
targets: [
.target(
diff --git a/Xcode/SwiftProjectTemplateAppPackage/Sources/SwiftProjectTemplateAppPackage/App.swift b/.xcode/SwiftProjectTemplateAppPackage/Sources/SwiftProjectTemplateAppPackage/App.swift
similarity index 100%
rename from Xcode/SwiftProjectTemplateAppPackage/Sources/SwiftProjectTemplateAppPackage/App.swift
rename to .xcode/SwiftProjectTemplateAppPackage/Sources/SwiftProjectTemplateAppPackage/App.swift
diff --git a/Xcode/SwiftProjectTemplateAppPackage/Sources/SwiftProjectTemplateAppPackage/Content View.swift b/.xcode/SwiftProjectTemplateAppPackage/Sources/SwiftProjectTemplateAppPackage/Content View.swift
similarity index 100%
rename from Xcode/SwiftProjectTemplateAppPackage/Sources/SwiftProjectTemplateAppPackage/Content View.swift
rename to .xcode/SwiftProjectTemplateAppPackage/Sources/SwiftProjectTemplateAppPackage/Content View.swift
diff --git a/Xcode/SwiftProjectTemplateAppPackage/Tests/SwiftProjectTemplatePackageTests/SwiftProjectTemplatePackageTests.swift b/.xcode/SwiftProjectTemplateAppPackage/Tests/SwiftProjectTemplatePackageTests/SwiftProjectTemplatePackageTests.swift
similarity index 100%
rename from Xcode/SwiftProjectTemplateAppPackage/Tests/SwiftProjectTemplatePackageTests/SwiftProjectTemplatePackageTests.swift
rename to .xcode/SwiftProjectTemplateAppPackage/Tests/SwiftProjectTemplatePackageTests/SwiftProjectTemplatePackageTests.swift
diff --git a/SwiftProjectTemplate.xcworkspace b/SwiftProjectTemplate.xcworkspace
new file mode 120000
index 0000000..efdea11
--- /dev/null
+++ b/SwiftProjectTemplate.xcworkspace
@@ -0,0 +1 @@
+.xcode/SwiftProjectTemplate.xcworkspace
\ No newline at end of file
diff --git a/specialize-template.sh b/specialize-template.sh
index d6aec92..ce6c6bb 100755
--- a/specialize-template.sh
+++ b/specialize-template.sh
@@ -14,6 +14,9 @@ if [[ -z "${NEW_PROJECT_NAME}" ]]; then
exit 1
fi
+# Remove symlinks, as they can't be modified using `sed`
+rm SwiftProjectTemplate.xcworkspace .xcode/SwiftProjectTemplate
+
# `find` returns folders before their children, so this will always rename the parent folder first.
# We re-run `find` every iteration so that the path is correct after renaming a parent folder.
echo "Moving files..."
@@ -33,6 +36,10 @@ echo "Replacing bundle identifier..."
git ls-files --cached --modified --others --exclude-standard -z |
xargs -0 -I {} sed -i.template-specialization-backup "s/com.github.georgelyon/$NEW_PROJECT_BUNDLE_ID_PREFIX/g" {}
+# Re-add symlinks
+ln -s ".xcode/${NEW_PROJECT_NAME}.xcworkspace" "${NEW_PROJECT_NAME}.xcworkspace"
+(cd .xcode; ln -s .. "${NEW_PROJECT_NAME}")
+
echo "Removing backup files..."
find . -name '*.template-specialization-backup' -exec rm {} \;
git add -A