diff --git a/README.md b/README.md index 86f926b..4e8b8bf 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ # Swift 5 Module Template Use this template as a starting point for any Swift 5 module that you want other people to include in their projects. -**STATUS: This template is ready and works in production code, compatible with Xcode 12.4 (12D4e)** +**STATUS: This template is ready and works in production code, compatible with Xcode 13.1 (13A1030d)** ![Swift 5 Module directory layout](https://user-images.githubusercontent.com/382183/66881876-63cca680-ef96-11e9-9dde-ae9d5c35350c.png) @@ -14,7 +14,7 @@ Your new Swift 5 module will immediately have working, compilable code, and all - Clean folder structure - MIT license - Testing as a standard -- Turnkey access to Travis CI +- Turnkey access to GitHub Actions testing - Semantic versioning and a CHANGELOG - Included example/demo app using SwiftUI diff --git a/Recipe.assets/bad.png b/Recipe.assets/bad.png deleted file mode 100644 index db562a2..0000000 Binary files a/Recipe.assets/bad.png and /dev/null differ diff --git a/Recipe.assets/good.png b/Recipe.assets/good.png deleted file mode 100644 index c9955be..0000000 Binary files a/Recipe.assets/good.png and /dev/null differ diff --git a/Recipe.md b/Recipe.md index 64c1142..1d84651 100644 --- a/Recipe.md +++ b/Recipe.md @@ -9,11 +9,11 @@ This recipe may also be useful for other scenarios, for example maybe you want t During the steps of this recipe we enter specific values where needed. These are chosen carefully so that the `./configure` script can later find and replace these values in the template to create your project. -Some variables have spaces in them. That is intentional because it causes Xcode to use double quotes around them in its project configuration files. +Some variables have spaces in them. That is intentional because Xcode only uses robust quoting in its project configuration files (which we want) if the variables have spaces in them. - `xxPROJECTxNAMExx` - This must be a valid C99 extended identifier (otherwise the Xcode check dependencies step fails). It cannot contain spaces. - - This must also be a Uniform Target Identifier (/^[a-zA-Z0-9-.]+$/). + - This must also be a Uniform Target Identifier (``/^[a-zA-Z0-9-.]+$/``). - If this contains the characters `-` or `.` then they will be transliterated to `_` for file names. - `__ORGANIZATION NAME__` @@ -35,13 +35,13 @@ Some variables have spaces in them. That is intentional because it causes Xcode Complete all these instructions on the same calendar day. -Use Xcode Version 12.4 (12D4e). *This is the latest publicly released or Gold Master version.* +Use Xcode Version 13.1 (13A1030d). *This is the latest publicly released or Gold Master version.* This recipe is also demonstrated in a YouTube flyover at https://youtu.be/ksYXtNn8lhE (15 minutes). ### I. Create a package for your module -1. In Xcode, choose File > New > Swift Package… +1. In Xcode, choose File > New > Package… 1. Navigate to your Desktop folder 2. Type the name `xxPROJECTxNAMExx` 3. Ensure "Create Git repository on my Mac" is unchecked @@ -68,11 +68,10 @@ This recipe is also demonstrated in a YouTube flyover at https://youtu.be/ksYXtN 2. *Set the project options* 1. Set Product Name to "iOS Example" - 2. Set Team to "NONE" + 2. Set Team to "None" 3. Set Organization Identifier to `com.AN.ORGANIZATION.IDENTIFIER` 4. Set User Interface to "SwiftUI" - 5. Set Life Cycle to "SwiftUI App" - 6. Set Language to "Swift" + 5. Set Language to "Swift" 7. Ensure “Use Core Data” and "Include Tests" are not selected 8. Click “Next" 3. *Create the project* @@ -85,18 +84,16 @@ This recipe is also demonstrated in a YouTube flyover at https://youtu.be/ksYXtN 1. *Move iOS Example source code to a folder named "Sources"* 1. Open the file iOS Example.xcodeproj in Xcode - 2. Enable the Project navigator on the left (folder icon) - 3. Use the Project navigator to select the "iOS Example" folder (yellow icon) + 2. Show the Project navigator on the left (folder icon) + 3. Use the Project navigator to select the "iOS Example" folder (gray icon) 4. From the Project navigator, rename this folder as "Sources" - * :information_source: The Alamofire project uses [the folder name "Source"](https://github.com/Alamofire/Alamofire/tree/master/Example/Source) but we choose "Sources" here to be consistent with [the default of Swift Package Manager](https://github.com/apple/swift-package-manager/blob/b1a6f45aa9daed0c8a609d34af8f71cf4282ddd4/Sources/Workspace/InitPackage.swift#L256) + * :information_source: The Alamofire project uses [the folder name "Source"](https://github.com/Alamofire/Alamofire/tree/master/Example/Source) but we choose "Sources" here to be consistent with [the default of Swift Package Manager](https://github.com/apple/swift-package-manager/blob/4fd4df4275627ebc91a0f288c38658738cd9fa0f/Sources/Workspace/InitPackage.swift#L275) 2. *Fix the Info.plist file configuration and preview content folder (Xcode makes renaming folders a pain)* 1. Click "iOS Example" on the left (the blue icon) 2. Click the target "iOS Example" in the middle (white app icon) 3. Click "Build Settings" on the top of the middle - 4. Enter "/Info" in the search box - 5. Edit the "Info.plist File" from "iOS Example/Info.plist" to be "Sources/Info.plist” 6. Enter "Development Assets" in the search box - 7. Edit the value from “iOS Example/Preview Content” to "Sources/Preview Content" + 7. In the "Deployment" section, edit the value from “iOS Example/Preview Content” to "Sources/Preview Content" ### V. Add some functionality to your iOS Example application @@ -110,28 +107,20 @@ This recipe is also demonstrated in a YouTube flyover at https://youtu.be/ksYXtN ### VI. Make your iOS Example application depend on your module 1. Open iOS Example.xcodeproj in Xcode +2. In Xcode, choose File > Add Packages... + 1. Click "Add Local..." + 2. Select the `xxPROJECTxNAMExx` folder on your desktop + 3. Click "Add Package" -3. Drag the `xxPROJECTxNAMExx` folder on your desktop into the Xcode Project navigator at the bottom, be sure it is subordinated under iOS Example - :x:: ![bad](Recipe.assets/bad.png) - - :white_check_mark:: ![good](Recipe.assets/good.png) - - 1. At the dialog "Do you want to save this project in a new workspace?" click "Save" - 2. Navigate inside the iOS Example folder, in the `xxPROJECTxNAMExx` folder on your desktop - 3. Set the name as "iOS Example" - 4. Click Save - - ⚠️ Xcode will also show the iOS Example folder inside the `xxPROJECTxNAMExx` module. Swift packages are unable to specify excluded files. You can safely ignore that folder. - - :warning: Xcode has an error where this added dependency will show as ".." instead of the correct name. This discrepency can be safely ignored and it will show correctly the next time you open "iOS Example.xcworkspace". - -4. *Add a build dependency* - - 1. Click "iOS Example" on the left (the blue icon) at the top-level (not subordinated to the `xxPROJECTxNAMExx` module) - 2. Click the target "iOS Example" in the middle (white app icon) - 3. Click "Build Phases" on the top - 4. Open the section Link Binary With Libraries - 5. Click the plus (+) button - 6. Select `xxPROJECTxNAMExx` (the building icon) - 7. Click "Add" +3. *Add a build dependency* + 1. :information_source: You may or may not need to quit and reopen Xcode to proceed and see the required library, this is a known Xcode issue + 1. Click "iOS Example" on the left (the blue icon) + 1. Click the target "iOS Example" in the middle (white app icon) + 1. Click "Build Phases" on the top + 1. Open the section Link Binary With Libraries + 1. Click the plus (+) button + 1. Select `xxPROJECTxNAMExx` (the building icon) + 1. Click "Add" ### VII. Add additional project management files to the module @@ -141,14 +130,15 @@ This recipe is also demonstrated in a YouTube flyover at https://youtu.be/ksYXtN ```sh cd ~/Desktop/xxPROJECTxNAMExx/ - curl 'https://raw.githubusercontent.com/github/gitignore/master/Swift.gitignore' -o .gitignore - curl 'https://raw.githubusercontent.com/fulldecent/swift5-module-template/master/xxPROJECTxNAMExx/.travis.yml' -o .travis.yml - curl 'https://raw.githubusercontent.com/fulldecent/swift5-module-template/master/xxPROJECTxNAMExx/LICENSE' -o LICENSE - curl 'https://raw.githubusercontent.com/fulldecent/swift5-module-template/master/xxPROJECTxNAMExx/README.md' -o README.md - curl 'https://raw.githubusercontent.com/fulldecent/swift5-module-template/master/xxPROJECTxNAMExx/CHANGELOG.md' -o CHANGELOG.md - curl 'https://raw.githubusercontent.com/fulldecent/swift5-module-template/master/xxPROJECTxNAMExx/CONTRIBUTING.md' -o CONTRIBUTING.md - echo 'xxPROJECTxNAMExx.framework.zip' >> .gitignore - curl 'https://raw.githubusercontent.com/fulldecent/swift5-module-template/master/xxPROJECTxNAMExx/Tests/CheckCocoaPodsQualityIndexes.rb' -o Tests/CheckCocoaPodsQualityIndexes.rb + curl 'https://raw.githubusercontent.com/github/gitignore/master/Swift.gitignore' -o .gitignore + mkdir -p .github/workflows + curl 'https://raw.githubusercontent.com/fulldecent/swift5-module-template/master/xxPROJECTxNAMExx/.github/workflows/ci.yml' -o .github/workflows/ci.yml + curl 'https://raw.githubusercontent.com/fulldecent/swift5-module-template/master/xxPROJECTxNAMExx/LICENSE' -o LICENSE + curl 'https://raw.githubusercontent.com/fulldecent/swift5-module-template/master/xxPROJECTxNAMExx/README.md' -o README.md + curl 'https://raw.githubusercontent.com/fulldecent/swift5-module-template/master/xxPROJECTxNAMExx/CHANGELOG.md' -o CHANGELOG.md + curl 'https://raw.githubusercontent.com/fulldecent/swift5-module-template/master/xxPROJECTxNAMExx/CONTRIBUTING.md' -o CONTRIBUTING.md + echo 'xxPROJECTxNAMExx.framework.zip' >> .gitignore + curl 'https://raw.githubusercontent.com/fulldecent/swift5-module-template/master/xxPROJECTxNAMExx/Tests/CheckCocoaPodsQualityIndexes.rb' -o Tests/CheckCocoaPodsQualityIndexes.rb ``` ### VIII. Remove identifying parts of your project @@ -164,14 +154,6 @@ This recipe is also demonstrated in a YouTube flyover at https://youtu.be/ksYXtN '{}' \; ``` -2. Use Terminal.app to remove all references to development team IDs - - ```sh - find ~/Desktop/xxPROJECTxNAMExx -name project.pbxproj \ - -exec sed -i '' -E -e '/DevelopmentTeam = /d - s/(DEVELOPMENT_TEAM = )[^;]+/\1""/' '{}' \; - ``` - ## Taste testing 1. Open iOS Example.xcworkspace in Xcode @@ -180,7 +162,7 @@ This recipe is also demonstrated in a YouTube flyover at https://youtu.be/ksYXtN 3. Choose Product > Run - * :white_check_mark: You should see a big white king (♔). That means it worked! + * :white_check_mark: You should see a big white king (♔) after a few moments. That means it worked! 4. *Compare with the distributed Swift 5 Module Template repository* @@ -199,6 +181,6 @@ This recipe is also demonstrated in a YouTube flyover at https://youtu.be/ksYXtN git diff ``` - * :white_check_mark: You should see an empty screen (press q to close) + * :white_check_mark: You should see an empty screen indicating no differences (press q to close) * :mega: If you see differences, please raise an issue in the project repository diff --git a/xxPROJECTxNAMExx/.github/workflows/ci.yml b/xxPROJECTxNAMExx/.github/workflows/ci.yml new file mode 100644 index 0000000..b982b34 --- /dev/null +++ b/xxPROJECTxNAMExx/.github/workflows/ci.yml @@ -0,0 +1,172 @@ +name: "xxPROJECTxNAMExx CI" + +on: + push: + branches: + - main + paths: + - 'Source/**' + - 'Tests/**' + - '.github/workflows/**' + - 'Package.swift' + pull_request: + paths: + - 'Source/**' + - 'Tests/**' + - '.github/workflows/**' + - 'Package.swift' + +concurrency: + group: ci + cancel-in-progress: true +# Keep this up to date with https://github.com/xxPROJECTxNAMExx/xxPROJECTxNAMExx/blob/master/.github/workflows/ci.yml +jobs: + macOS_5_3: + name: Test macOS 10.15 (5.3) + runs-on: macOS-10.15 + env: + DEVELOPER_DIR: /Applications/Xcode_12.4.app/Contents/Developer + timeout-minutes: 10 + steps: + - uses: actions/checkout@v2 + - name: macOS 10.15 (5.3) + run: set -o pipefail && env NSUnbufferedIO=YES xcodebuild -project "xxPROJECTxNAMExx.xcodeproj" -scheme "xxPROJECTxNAMExx macOS" -destination "platform=macOS" clean test | xcpretty + macOS_5_4: + name: Test macOS 11 (5.4) + runs-on: macOS-11 + env: + DEVELOPER_DIR: /Applications/Xcode_12.5.1.app/Contents/Developer + timeout-minutes: 10 + steps: + - uses: actions/checkout@v2 + - name: macOS 11 (5.4) + run: set -o pipefail && env NSUnbufferedIO=YES xcodebuild -project "xxPROJECTxNAMExx.xcodeproj" -scheme "xxPROJECTxNAMExx macOS" -destination "platform=macOS" clean test | xcpretty + macOS_5_5: + name: Test macOS 11 (5.5) + env: + DEVELOPER_DIR: /Applications/Xcode_13.1.app/Contents/Developer + timeout-minutes: 10 + steps: + - uses: actions/checkout@v2 + - name: macOS 11 (5.5) + run: set -o pipefail && arch -arch arm64e env NSUnbufferedIO=YES xcodebuild -project "xxPROJECTxNAMExx.xcodeproj" -scheme "xxPROJECTxNAMExx macOS" -destination "platform=macOS" clean test | xcpretty + Catalyst: + name: Test Catalyst + runs-on: macOS-11 + env: + DEVELOPER_DIR: /Applications/Xcode_13.1.app/Contents/Developer + timeout-minutes: 10 + steps: + - uses: actions/checkout@v2 + - name: Catalyst + run: set -o pipefail && env NSUnbufferedIO=YES xcodebuild -project "xxPROJECTxNAMExx.xcodeproj" -scheme "xxPROJECTxNAMExx iOS" -destination "platform=macOS" clean test | xcpretty + iOS: + name: Test iOS 15 + env: + DEVELOPER_DIR: /Applications/Xcode_13.1.app/Contents/Developer + timeout-minutes: 10 + strategy: + matrix: + destination: ["OS=15.0,name=iPhone 13 Pro"] + steps: + - uses: actions/checkout@v2 + - name: iOS - ${{ matrix.destination }} + run: set -o pipefail && arch -arch arm64e env NSUnbufferedIO=YES xcodebuild -project "xxPROJECTxNAMExx.xcodeproj" -scheme "xxPROJECTxNAMExx iOS" -destination "${{ matrix.destination }}" clean test | xcpretty + iOS_Concurrency: + name: Test Swift Concurrency + runs-on: macOS-11 + env: + DEVELOPER_DIR: /Applications/Xcode_13.2.app/Contents/Developer + timeout-minutes: 10 + strategy: + matrix: + destination: ["OS=15.2,name=iPhone 13 Pro"] + steps: + - uses: actions/checkout@v2 + - name: iOS - ${{ matrix.destination }} + run: set -o pipefail && env NSUnbufferedIO=YES xcodebuild -project "xxPROJECTxNAMExx.xcodeproj" -scheme "xxPROJECTxNAMExx iOS" -destination "${{ matrix.destination }}" -enableThreadSanitizer NO clean test | xcpretty + tvOS: + name: Test tvOS + env: + DEVELOPER_DIR: /Applications/Xcode_13.1.app/Contents/Developer + timeout-minutes: 10 + strategy: + matrix: + destination: ["OS=15.0,name=Apple TV"] + steps: + - uses: actions/checkout@v2 + - name: tvOS - ${{ matrix.destination }} + run: set -o pipefail && arch -arch arm64e env NSUnbufferedIO=YES xcodebuild -project "xxPROJECTxNAMExx.xcodeproj" -scheme "xxPROJECTxNAMExx tvOS" -destination "${{ matrix.destination }}" clean test | xcpretty + watchOS: + name: Test watchOS + env: + DEVELOPER_DIR: /Applications/Xcode_13.1.app/Contents/Developer + timeout-minutes: 10 + strategy: + matrix: + destination: ["OS=8.0,name=Apple Watch Series 7 - 45mm"] + steps: + - uses: actions/checkout@v2 + - name: watchOS - ${{ matrix.destination }} + run: set -o pipefail && arch -arch arm64e env NSUnbufferedIO=YES xcodebuild -project "xxPROJECTxNAMExx.xcodeproj" -scheme "xxPROJECTxNAMExx watchOS" -destination "${{ matrix.destination }}" clean test | xcpretty + SPM: + name: Test with SPM + env: + DEVELOPER_DIR: /Applications/Xcode_13.1.app/Contents/Developer + timeout-minutes: 10 + steps: + - uses: actions/checkout@v2 + - name: SPM Test + run: arch -arch arm64e swift test -c debug + Linux: + name: Linux + runs-on: ubuntu-20.04 + container: + image: swift:5.5.1-focal + timeout-minutes: 10 + steps: + - uses: actions/checkout@v2 + - name: SPM Linux build + run: swift build --build-tests -c debug + Linux_Nightly: + name: Linux Nightly + runs-on: ubuntu-20.04 + container: + image: swiftlang/swift:nightly-focal + timeout-minutes: 10 + steps: + - uses: actions/checkout@v2 + - name: SPM Linux build + run: swift build --build-tests -c debug + Windows: + name: Windows + runs-on: windows-2019 + timeout-minutes: 10 + steps: + - name: "Clone Project" + uses: actions/checkout@v2 + - uses: seanmiddleditch/gha-setup-vsdevenv@master + - name: Install Swift + run: | + Install-Binary -Url "https://swift.org/builds/swift-5.5.1-release/windows10/swift-5.5.1-RELEASE/swift-5.5.1-RELEASE-windows10.exe" -Name "installer.exe" -ArgumentList ("-q") + - name: Set Environment Variables + run: | + echo "SDKROOT=C:\Library\Developer\Platforms\Windows.platform\Developer\SDKs\Windows.sdk" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append + echo "DEVELOPER_DIR=C:\Library\Developer" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append + - name: Adjust Paths + run: | + echo "C:\Library\Swift-development\bin;C:\Library\icu-67\usr\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append + echo "C:\Library\Developer\Toolchains\unknown-Asserts-development.xctoolchain\usr\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append + - name: Install Supporting Files + run: | + Copy-Item "$env:SDKROOT\usr\share\ucrt.modulemap" -destination "$env:UniversalCRTSdkDir\Include\$env:UCRTVersion\ucrt\module.modulemap" + Copy-Item "$env:SDKROOT\usr\share\visualc.modulemap" -destination "$env:VCToolsInstallDir\include\module.modulemap" + Copy-Item "$env:SDKROOT\usr\share\visualc.apinotes" -destination "$env:VCToolsInstallDir\include\visualc.apinotes" + Copy-Item "$env:SDKROOT\usr\share\winsdk.modulemap" -destination "$env:UniversalCRTSdkDir\Include\$env:UCRTVersion\um\module.modulemap" + - name: SPM Windows build + shell: cmd + run: | + cd ${{ github.workspace}} + set SDKROOT=%SystemDrive%\Library\Developer\Platforms\Windows.platform\Developer\SDKs\Windows.sdk + %SystemDrive%\Library\Developer\Toolchains\unknown-Asserts-development.xctoolchain\usr\bin\swift-build.exe --build-tests -c debug -Xlinker /INCREMENTAL:NO -v + if not exist .build\x86_64-unknown-windows-msvc\debug\xxPROJECTxNAMExx.swiftmodule exit 1 diff --git a/xxPROJECTxNAMExx/.travis.yml b/xxPROJECTxNAMExx/.travis.yml deleted file mode 100644 index 68d67df..0000000 --- a/xxPROJECTxNAMExx/.travis.yml +++ /dev/null @@ -1,19 +0,0 @@ -os: osx -osx_image: xcode11.1 -env: - global: - - WORKSPACE="./iOS Example/iOS Example.xcworkspace" - - IOS_FRAMEWORK_SCHEME="iOS Example" - - EXAMPLE_SCHEME="iOS Example" - matrix: - - DESTINATION="OS=13.1,name=iPhone 11" - SCHEME="$IOS_FRAMEWORK_SCHEME" -script: - - set -o pipefail - - xcodebuild -version - - xcodebuild -showsdks - - xcodebuild -list - - xcodebuild -workspace "$WORKSPACE" -list - - # Build Example in Debug - - xcodebuild -workspace "$WORKSPACE" -scheme "$EXAMPLE_SCHEME" -destination "$DESTINATION" -configuration Debug ONLY_ACTIVE_ARCH=NO build | xcpretty -c diff --git a/xxPROJECTxNAMExx/Tests/LinuxMain.swift b/xxPROJECTxNAMExx/Tests/LinuxMain.swift deleted file mode 100644 index a6ca3fa..0000000 --- a/xxPROJECTxNAMExx/Tests/LinuxMain.swift +++ /dev/null @@ -1,7 +0,0 @@ -import XCTest - -import xxPROJECTxNAMExxTests - -var tests = [XCTestCaseEntry]() -tests += xxPROJECTxNAMExxTests.allTests() -XCTMain(tests) diff --git a/xxPROJECTxNAMExx/Tests/xxPROJECTxNAMExxTests/XCTestManifests.swift b/xxPROJECTxNAMExx/Tests/xxPROJECTxNAMExxTests/XCTestManifests.swift deleted file mode 100644 index 9861a34..0000000 --- a/xxPROJECTxNAMExx/Tests/xxPROJECTxNAMExxTests/XCTestManifests.swift +++ /dev/null @@ -1,9 +0,0 @@ -import XCTest - -#if !canImport(ObjectiveC) -public func allTests() -> [XCTestCaseEntry] { - return [ - testCase(xxPROJECTxNAMExxTests.allTests), - ] -} -#endif diff --git a/xxPROJECTxNAMExx/Tests/xxPROJECTxNAMExxTests/xxPROJECTxNAMExxTests.swift b/xxPROJECTxNAMExx/Tests/xxPROJECTxNAMExxTests/xxPROJECTxNAMExxTests.swift index 8b01d0f..89266df 100644 --- a/xxPROJECTxNAMExx/Tests/xxPROJECTxNAMExxTests/xxPROJECTxNAMExxTests.swift +++ b/xxPROJECTxNAMExx/Tests/xxPROJECTxNAMExxTests/xxPROJECTxNAMExxTests.swift @@ -2,14 +2,10 @@ import XCTest @testable import xxPROJECTxNAMExx final class xxPROJECTxNAMExxTests: XCTestCase { - func testExample() { + func testExample() throws { // This is an example of a functional test case. // Use XCTAssert and related functions to verify your tests produce the correct // results. XCTAssertEqual(xxPROJECTxNAMExx().text, "Hello, World!") } - - static var allTests = [ - ("testExample", testExample), - ] } diff --git a/xxPROJECTxNAMExx/iOS Example/Sources/Info.plist b/xxPROJECTxNAMExx/iOS Example/Sources/Info.plist deleted file mode 100644 index efc211a..0000000 --- a/xxPROJECTxNAMExx/iOS Example/Sources/Info.plist +++ /dev/null @@ -1,50 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - $(PRODUCT_BUNDLE_PACKAGE_TYPE) - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UIApplicationSceneManifest - - UIApplicationSupportsMultipleScenes - - - UIApplicationSupportsIndirectInputEvents - - UILaunchScreen - - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/xxPROJECTxNAMExx/iOS Example/iOS Example.xcodeproj/project.pbxproj b/xxPROJECTxNAMExx/iOS Example/iOS Example.xcodeproj/project.pbxproj index 29efa21..c79b1b8 100644 --- a/xxPROJECTxNAMExx/iOS Example/iOS Example.xcodeproj/project.pbxproj +++ b/xxPROJECTxNAMExx/iOS Example/iOS Example.xcodeproj/project.pbxproj @@ -3,76 +3,84 @@ archiveVersion = 1; classes = { }; - objectVersion = 52; + objectVersion = 55; objects = { /* Begin PBXBuildFile section */ - D94502F9261F98A400F6BF2E /* iOS_ExampleApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = D94502F8261F98A400F6BF2E /* iOS_ExampleApp.swift */; }; - D94502FB261F98A400F6BF2E /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D94502FA261F98A400F6BF2E /* ContentView.swift */; }; - D94502FD261F98A500F6BF2E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D94502FC261F98A500F6BF2E /* Assets.xcassets */; }; - D9450300261F98A500F6BF2E /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D94502FF261F98A500F6BF2E /* Preview Assets.xcassets */; }; - D945030C261F99CC00F6BF2E /* xxPROJECTxNAMExx in Frameworks */ = {isa = PBXBuildFile; productRef = D945030B261F99CC00F6BF2E /* xxPROJECTxNAMExx */; }; + D95C08B8277D8AA00016A10F /* iOS_ExampleApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = D95C08B7277D8AA00016A10F /* iOS_ExampleApp.swift */; }; + D95C08BA277D8AA00016A10F /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D95C08B9277D8AA00016A10F /* ContentView.swift */; }; + D95C08BC277D8AA20016A10F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D95C08BB277D8AA20016A10F /* Assets.xcassets */; }; + D95C08BF277D8AA20016A10F /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D95C08BE277D8AA20016A10F /* Preview Assets.xcassets */; }; + D95C08CA277D91270016A10F /* xxPROJECTxNAMExx in Frameworks */ = {isa = PBXBuildFile; productRef = D95C08C9277D91270016A10F /* xxPROJECTxNAMExx */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ - D94502F5261F98A400F6BF2E /* iOS Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "iOS Example.app"; sourceTree = BUILT_PRODUCTS_DIR; }; - D94502F8261F98A400F6BF2E /* iOS_ExampleApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = iOS_ExampleApp.swift; sourceTree = ""; }; - D94502FA261F98A400F6BF2E /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; - D94502FC261F98A500F6BF2E /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - D94502FF261F98A500F6BF2E /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; - D9450301261F98A500F6BF2E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D95C08B4277D8AA00016A10F /* iOS Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "iOS Example.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + D95C08B7277D8AA00016A10F /* iOS_ExampleApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = iOS_ExampleApp.swift; sourceTree = ""; }; + D95C08B9277D8AA00016A10F /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; + D95C08BB277D8AA20016A10F /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + D95C08BE277D8AA20016A10F /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; + D95C08C6277D8D140016A10F /* xxPROJECTxNAMExx */ = {isa = PBXFileReference; lastKnownFileType = folder; name = xxPROJECTxNAMExx; path = ..; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - D94502F2261F98A400F6BF2E /* Frameworks */ = { + D95C08B1277D8AA00016A10F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D945030C261F99CC00F6BF2E /* xxPROJECTxNAMExx in Frameworks */, + D95C08CA277D91270016A10F /* xxPROJECTxNAMExx in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - D94502EC261F98A400F6BF2E = { + D95C08AB277D8AA00016A10F = { isa = PBXGroup; children = ( - D94502F7261F98A400F6BF2E /* Sources */, - D94502F6261F98A400F6BF2E /* Products */, - D945030A261F99CC00F6BF2E /* Frameworks */, + D95C08C5277D8D140016A10F /* Packages */, + D95C08B6277D8AA00016A10F /* Sources */, + D95C08B5277D8AA00016A10F /* Products */, + D95C08C8277D91270016A10F /* Frameworks */, ); sourceTree = ""; }; - D94502F6261F98A400F6BF2E /* Products */ = { + D95C08B5277D8AA00016A10F /* Products */ = { isa = PBXGroup; children = ( - D94502F5261F98A400F6BF2E /* iOS Example.app */, + D95C08B4277D8AA00016A10F /* iOS Example.app */, ); name = Products; sourceTree = ""; }; - D94502F7261F98A400F6BF2E /* Sources */ = { + D95C08B6277D8AA00016A10F /* Sources */ = { isa = PBXGroup; children = ( - D94502F8261F98A400F6BF2E /* iOS_ExampleApp.swift */, - D94502FA261F98A400F6BF2E /* ContentView.swift */, - D94502FC261F98A500F6BF2E /* Assets.xcassets */, - D9450301261F98A500F6BF2E /* Info.plist */, - D94502FE261F98A500F6BF2E /* Preview Content */, + D95C08B7277D8AA00016A10F /* iOS_ExampleApp.swift */, + D95C08B9277D8AA00016A10F /* ContentView.swift */, + D95C08BB277D8AA20016A10F /* Assets.xcassets */, + D95C08BD277D8AA20016A10F /* Preview Content */, ); path = Sources; sourceTree = ""; }; - D94502FE261F98A500F6BF2E /* Preview Content */ = { + D95C08BD277D8AA20016A10F /* Preview Content */ = { isa = PBXGroup; children = ( - D94502FF261F98A500F6BF2E /* Preview Assets.xcassets */, + D95C08BE277D8AA20016A10F /* Preview Assets.xcassets */, ); path = "Preview Content"; sourceTree = ""; }; - D945030A261F99CC00F6BF2E /* Frameworks */ = { + D95C08C5277D8D140016A10F /* Packages */ = { + isa = PBXGroup; + children = ( + D95C08C6277D8D140016A10F /* xxPROJECTxNAMExx */, + ); + name = Packages; + sourceTree = ""; + }; + D95C08C8277D91270016A10F /* Frameworks */ = { isa = PBXGroup; children = ( ); @@ -82,13 +90,13 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - D94502F4261F98A400F6BF2E /* iOS Example */ = { + D95C08B3277D8AA00016A10F /* iOS Example */ = { isa = PBXNativeTarget; - buildConfigurationList = D9450304261F98A500F6BF2E /* Build configuration list for PBXNativeTarget "iOS Example" */; + buildConfigurationList = D95C08C2277D8AA20016A10F /* Build configuration list for PBXNativeTarget "iOS Example" */; buildPhases = ( - D94502F1261F98A400F6BF2E /* Sources */, - D94502F2261F98A400F6BF2E /* Frameworks */, - D94502F3261F98A400F6BF2E /* Resources */, + D95C08B0277D8AA00016A10F /* Sources */, + D95C08B1277D8AA00016A10F /* Frameworks */, + D95C08B2277D8AA00016A10F /* Resources */, ); buildRules = ( ); @@ -96,76 +104,77 @@ ); name = "iOS Example"; packageProductDependencies = ( - D945030B261F99CC00F6BF2E /* xxPROJECTxNAMExx */, + D95C08C9277D91270016A10F /* xxPROJECTxNAMExx */, ); productName = "iOS Example"; - productReference = D94502F5261F98A400F6BF2E /* iOS Example.app */; + productReference = D95C08B4277D8AA00016A10F /* iOS Example.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ - D94502ED261F98A400F6BF2E /* Project object */ = { + D95C08AC277D8AA00016A10F /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 1240; - LastUpgradeCheck = 1240; + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1310; + LastUpgradeCheck = 1310; TargetAttributes = { - D94502F4261F98A400F6BF2E = { - CreatedOnToolsVersion = 12.4; + D95C08B3277D8AA00016A10F = { + CreatedOnToolsVersion = 13.1; }; }; }; - buildConfigurationList = D94502F0261F98A400F6BF2E /* Build configuration list for PBXProject "iOS Example" */; - compatibilityVersion = "Xcode 9.3"; + buildConfigurationList = D95C08AF277D8AA00016A10F /* Build configuration list for PBXProject "iOS Example" */; + compatibilityVersion = "Xcode 13.0"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, Base, ); - mainGroup = D94502EC261F98A400F6BF2E; - productRefGroup = D94502F6261F98A400F6BF2E /* Products */; + mainGroup = D95C08AB277D8AA00016A10F; + productRefGroup = D95C08B5277D8AA00016A10F /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - D94502F4261F98A400F6BF2E /* iOS Example */, + D95C08B3277D8AA00016A10F /* iOS Example */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - D94502F3261F98A400F6BF2E /* Resources */ = { + D95C08B2277D8AA00016A10F /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - D9450300261F98A500F6BF2E /* Preview Assets.xcassets in Resources */, - D94502FD261F98A500F6BF2E /* Assets.xcassets in Resources */, + D95C08BF277D8AA20016A10F /* Preview Assets.xcassets in Resources */, + D95C08BC277D8AA20016A10F /* Assets.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - D94502F1261F98A400F6BF2E /* Sources */ = { + D95C08B0277D8AA00016A10F /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - D94502FB261F98A400F6BF2E /* ContentView.swift in Sources */, - D94502F9261F98A400F6BF2E /* iOS_ExampleApp.swift in Sources */, + D95C08BA277D8AA00016A10F /* ContentView.swift in Sources */, + D95C08B8277D8AA00016A10F /* iOS_ExampleApp.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ - D9450302261F98A500F6BF2E /* Debug */ = { + D95C08C0277D8AA20016A10F /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; @@ -210,7 +219,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 14.4; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; @@ -220,13 +229,13 @@ }; name = Debug; }; - D9450303261F98A500F6BF2E /* Release */ = { + D95C08C1277D8AA20016A10F /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; @@ -265,7 +274,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 14.4; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; SDKROOT = iphoneos; @@ -275,43 +284,57 @@ }; name = Release; }; - D9450305261F98A500F6BF2E /* Debug */ = { + D95C08C3277D8AA20016A10F /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_ASSET_PATHS = "\"Sources/Preview Content\""; ENABLE_PREVIEWS = YES; - INFOPLIST_FILE = Sources/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 14.0; + GENERATE_INFOPLIST_FILE = YES; + 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"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); + MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = "com.AN.ORGANIZATION.IDENTIFIER.iOS-Example"; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; - D9450306261F98A500F6BF2E /* Release */ = { + D95C08C4277D8AA20016A10F /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_ASSET_PATHS = "\"Sources/Preview Content\""; ENABLE_PREVIEWS = YES; - INFOPLIST_FILE = Sources/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 14.0; + GENERATE_INFOPLIST_FILE = YES; + 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"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); + MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = "com.AN.ORGANIZATION.IDENTIFIER.iOS-Example"; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; @@ -320,20 +343,20 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - D94502F0261F98A400F6BF2E /* Build configuration list for PBXProject "iOS Example" */ = { + D95C08AF277D8AA00016A10F /* Build configuration list for PBXProject "iOS Example" */ = { isa = XCConfigurationList; buildConfigurations = ( - D9450302261F98A500F6BF2E /* Debug */, - D9450303261F98A500F6BF2E /* Release */, + D95C08C0277D8AA20016A10F /* Debug */, + D95C08C1277D8AA20016A10F /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - D9450304261F98A500F6BF2E /* Build configuration list for PBXNativeTarget "iOS Example" */ = { + D95C08C2277D8AA20016A10F /* Build configuration list for PBXNativeTarget "iOS Example" */ = { isa = XCConfigurationList; buildConfigurations = ( - D9450305261F98A500F6BF2E /* Debug */, - D9450306261F98A500F6BF2E /* Release */, + D95C08C3277D8AA20016A10F /* Debug */, + D95C08C4277D8AA20016A10F /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -341,11 +364,11 @@ /* End XCConfigurationList section */ /* Begin XCSwiftPackageProductDependency section */ - D945030B261F99CC00F6BF2E /* xxPROJECTxNAMExx */ = { + D95C08C9277D91270016A10F /* xxPROJECTxNAMExx */ = { isa = XCSwiftPackageProductDependency; productName = xxPROJECTxNAMExx; }; /* End XCSwiftPackageProductDependency section */ }; - rootObject = D94502ED261F98A400F6BF2E /* Project object */; + rootObject = D95C08AC277D8AA00016A10F /* Project object */; } diff --git a/xxPROJECTxNAMExx/iOS Example/iOS Example.xcworkspace/contents.xcworkspacedata b/xxPROJECTxNAMExx/iOS Example/iOS Example.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index b59d032..0000000 --- a/xxPROJECTxNAMExx/iOS Example/iOS Example.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/xxPROJECTxNAMExx/iOS Example/iOS Example.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/xxPROJECTxNAMExx/iOS Example/iOS Example.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d9810..0000000 --- a/xxPROJECTxNAMExx/iOS Example/iOS Example.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - -