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