From 086f57459b35cc7bdb7b03a75585fdfa540ef654 Mon Sep 17 00:00:00 2001 From: Vladimir Kaltyrin Date: Tue, 2 Apr 2024 19:48:18 +0300 Subject: [PATCH] feat(sdds-icore): added workflows to release icons --- .../actions/install-certficates/action.yml | 32 ++ .github/workflows/release_icons.yml | 71 +++ .github/workflows/update_icons.yml | 109 +++++ .../contents.xcworkspacedata | 7 + LICENCE.txt | 21 + SDDSCore/LICENCE.txt | 21 + SDDSDemoApp/LICENCE.txt | 21 + .../SDDSDemoApp.xcodeproj/project.pbxproj | 4 + .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../testIcon.imageset/AppleOutline@1x.png | Bin 0 -> 2953 bytes .../testIcon.imageset/AppleOutline@2x.png | Bin 0 -> 3438 bytes .../testIcon.imageset/AppleOutline@3x.png | Bin 0 -> 3906 bytes .../testIcon.imageset/Contents.json | 23 + .../testIcon2.imageset/Accessibility@1x.png | Bin 0 -> 285 bytes .../testIcon2.imageset/Accessibility@2x.png | Bin 0 -> 478 bytes .../testIcon2.imageset/Accessibility@3x.png | Bin 0 -> 757 bytes .../testIcon2.imageset/Contents.json | 23 + SDDSDemoApp/SDDSDemoApp/ContentView.swift | 24 +- SDDSDemoApp/SDDSDemoApp/SDDSDemoApp.swift | 2 +- SDDSIcons.podspec | 13 + SDDSIcons/Generated/Assets.swift | 118 +++++ SDDSIcons/LICENCE.txt | 21 + SDDSIcons/SDDSIcons.xcodeproj/project.pbxproj | 139 +++++- .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../Apple.imageset/AppleFill@1x.png | Bin 0 -> 2843 bytes .../Apple.imageset/AppleFill@2x.png | Bin 0 -> 3192 bytes .../Apple.imageset/AppleFill@3x.png | Bin 0 -> 3552 bytes .../Apple.imageset/Contents.json | 23 + .../SDDSIcons/Assets.xcassets/Contents.json | 6 + .../Google 1.imageset/AppleFill@1x.png | Bin 0 -> 2843 bytes .../Google 1.imageset/AppleFill@2x.png | Bin 0 -> 3192 bytes .../Google 1.imageset/AppleFill@3x.png | Bin 0 -> 3552 bytes .../Google 1.imageset/Contents.json | 23 + .../Google.imageset/AppleFill@1x.png | Bin 0 -> 2843 bytes .../Google.imageset/AppleFill@2x.png | Bin 0 -> 3192 bytes .../Google.imageset/AppleFill@3x.png | Bin 0 -> 3552 bytes .../Google.imageset/Contents.json | 23 + .../Meta 1.imageset/AppleFill@1x.png | Bin 0 -> 2843 bytes .../Meta 1.imageset/AppleFill@2x.png | Bin 0 -> 3192 bytes .../Meta 1.imageset/AppleFill@3x.png | Bin 0 -> 3552 bytes .../Meta 1.imageset/Contents.json | 23 + .../Meta.imageset/AppleFill@1x.png | Bin 0 -> 2843 bytes .../Meta.imageset/AppleFill@2x.png | Bin 0 -> 3192 bytes .../Meta.imageset/AppleFill@3x.png | Bin 0 -> 3552 bytes .../Meta.imageset/Contents.json | 23 + .../Microsoft 1.imageset/AppleFill@1x.png | Bin 0 -> 2843 bytes .../Microsoft 1.imageset/AppleFill@2x.png | Bin 0 -> 3192 bytes .../Microsoft 1.imageset/AppleFill@3x.png | Bin 0 -> 3552 bytes .../Microsoft 1.imageset/Contents.json | 23 + .../Microsoft.imageset/AppleFill@1x.png | Bin 0 -> 2843 bytes .../Microsoft.imageset/AppleFill@2x.png | Bin 0 -> 3192 bytes .../Microsoft.imageset/AppleFill@3x.png | Bin 0 -> 3552 bytes .../Microsoft.imageset/Contents.json | 23 + SDDSIcons/SDDSIcons/SDDSIcons.swift | 5 + SDDSIcons/Scripts/build_xcframework.sh | 45 ++ SDDSIcons/Templates/assets.stencil | 424 ++++++++++++++++++ SDDSIcons/info.plist | 24 + SDDSIcons/swiftgen.yml | 57 +++ SDDSSwiftUI/LICENCE.txt | 21 + SDDSUIKit/LICENCE.txt | 21 + SddsIcons/Package.swift | 23 - scripts/build.sh | 6 +- 63 files changed, 1427 insertions(+), 38 deletions(-) create mode 100644 .github/actions/install-certficates/action.yml create mode 100644 .github/workflows/release_icons.yml create mode 100644 .github/workflows/update_icons.yml create mode 100644 .swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata create mode 100644 LICENCE.txt create mode 100644 SDDSCore/LICENCE.txt create mode 100644 SDDSDemoApp/LICENCE.txt create mode 100644 SDDSDemoApp/SDDSDemoApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 SDDSDemoApp/SDDSDemoApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 SDDSDemoApp/SDDSDemoApp/Assets.xcassets/testIcon.imageset/AppleOutline@1x.png create mode 100644 SDDSDemoApp/SDDSDemoApp/Assets.xcassets/testIcon.imageset/AppleOutline@2x.png create mode 100644 SDDSDemoApp/SDDSDemoApp/Assets.xcassets/testIcon.imageset/AppleOutline@3x.png create mode 100644 SDDSDemoApp/SDDSDemoApp/Assets.xcassets/testIcon.imageset/Contents.json create mode 100644 SDDSDemoApp/SDDSDemoApp/Assets.xcassets/testIcon2.imageset/Accessibility@1x.png create mode 100644 SDDSDemoApp/SDDSDemoApp/Assets.xcassets/testIcon2.imageset/Accessibility@2x.png create mode 100644 SDDSDemoApp/SDDSDemoApp/Assets.xcassets/testIcon2.imageset/Accessibility@3x.png create mode 100644 SDDSDemoApp/SDDSDemoApp/Assets.xcassets/testIcon2.imageset/Contents.json create mode 100644 SDDSIcons.podspec create mode 100644 SDDSIcons/Generated/Assets.swift create mode 100644 SDDSIcons/LICENCE.txt create mode 100644 SDDSIcons/SDDSIcons.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 SDDSIcons/SDDSIcons/Assets.xcassets/Apple.imageset/AppleFill@1x.png create mode 100644 SDDSIcons/SDDSIcons/Assets.xcassets/Apple.imageset/AppleFill@2x.png create mode 100644 SDDSIcons/SDDSIcons/Assets.xcassets/Apple.imageset/AppleFill@3x.png create mode 100644 SDDSIcons/SDDSIcons/Assets.xcassets/Apple.imageset/Contents.json create mode 100644 SDDSIcons/SDDSIcons/Assets.xcassets/Contents.json create mode 100644 SDDSIcons/SDDSIcons/Assets.xcassets/Google 1.imageset/AppleFill@1x.png create mode 100644 SDDSIcons/SDDSIcons/Assets.xcassets/Google 1.imageset/AppleFill@2x.png create mode 100644 SDDSIcons/SDDSIcons/Assets.xcassets/Google 1.imageset/AppleFill@3x.png create mode 100644 SDDSIcons/SDDSIcons/Assets.xcassets/Google 1.imageset/Contents.json create mode 100644 SDDSIcons/SDDSIcons/Assets.xcassets/Google.imageset/AppleFill@1x.png create mode 100644 SDDSIcons/SDDSIcons/Assets.xcassets/Google.imageset/AppleFill@2x.png create mode 100644 SDDSIcons/SDDSIcons/Assets.xcassets/Google.imageset/AppleFill@3x.png create mode 100644 SDDSIcons/SDDSIcons/Assets.xcassets/Google.imageset/Contents.json create mode 100644 SDDSIcons/SDDSIcons/Assets.xcassets/Meta 1.imageset/AppleFill@1x.png create mode 100644 SDDSIcons/SDDSIcons/Assets.xcassets/Meta 1.imageset/AppleFill@2x.png create mode 100644 SDDSIcons/SDDSIcons/Assets.xcassets/Meta 1.imageset/AppleFill@3x.png create mode 100644 SDDSIcons/SDDSIcons/Assets.xcassets/Meta 1.imageset/Contents.json create mode 100644 SDDSIcons/SDDSIcons/Assets.xcassets/Meta.imageset/AppleFill@1x.png create mode 100644 SDDSIcons/SDDSIcons/Assets.xcassets/Meta.imageset/AppleFill@2x.png create mode 100644 SDDSIcons/SDDSIcons/Assets.xcassets/Meta.imageset/AppleFill@3x.png create mode 100644 SDDSIcons/SDDSIcons/Assets.xcassets/Meta.imageset/Contents.json create mode 100644 SDDSIcons/SDDSIcons/Assets.xcassets/Microsoft 1.imageset/AppleFill@1x.png create mode 100644 SDDSIcons/SDDSIcons/Assets.xcassets/Microsoft 1.imageset/AppleFill@2x.png create mode 100644 SDDSIcons/SDDSIcons/Assets.xcassets/Microsoft 1.imageset/AppleFill@3x.png create mode 100644 SDDSIcons/SDDSIcons/Assets.xcassets/Microsoft 1.imageset/Contents.json create mode 100644 SDDSIcons/SDDSIcons/Assets.xcassets/Microsoft.imageset/AppleFill@1x.png create mode 100644 SDDSIcons/SDDSIcons/Assets.xcassets/Microsoft.imageset/AppleFill@2x.png create mode 100644 SDDSIcons/SDDSIcons/Assets.xcassets/Microsoft.imageset/AppleFill@3x.png create mode 100644 SDDSIcons/SDDSIcons/Assets.xcassets/Microsoft.imageset/Contents.json create mode 100644 SDDSIcons/SDDSIcons/SDDSIcons.swift create mode 100755 SDDSIcons/Scripts/build_xcframework.sh create mode 100644 SDDSIcons/Templates/assets.stencil create mode 100644 SDDSIcons/info.plist create mode 100644 SDDSIcons/swiftgen.yml create mode 100644 SDDSSwiftUI/LICENCE.txt create mode 100644 SDDSUIKit/LICENCE.txt delete mode 100644 SddsIcons/Package.swift diff --git a/.github/actions/install-certficates/action.yml b/.github/actions/install-certficates/action.yml new file mode 100644 index 000000000..4b1e2efc9 --- /dev/null +++ b/.github/actions/install-certficates/action.yml @@ -0,0 +1,32 @@ +name: 'Install iOS Certificates' + +description: 'Install the Apple certificate and provisioning profile' + +runs: + using: "composite" + steps: + - name: Install certificates + shell: bash + env: + BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }} + P12_PASSWORD: ${{ secrets.P12_PASSWORD }} + BUILD_PROVISION_PROFILE_BASE64: ${{ secrets.BUILD_PROVISION_PROFILE_BASE64 }} + KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }} + run: | + # create variables + CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12 + PP_PATH=$RUNNER_TEMP/build_pp.mobileprovision + KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db + + # import certificate and provisioning profile from secrets + echo -n "$BUILD_CERTIFICATE_BASE64" | base64 --decode -o $CERTIFICATE_PATH + + # create temporary keychain + security create-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH + security set-keychain-settings -lut 21600 $KEYCHAIN_PATH + security unlock-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH + + # import certificate to keychain + security import $CERTIFICATE_PATH -P "$P12_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH + security set-key-partition-list -S apple-tool:,apple: -k "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH + security list-keychain -d user -s $KEYCHAIN_PATH diff --git a/.github/workflows/release_icons.yml b/.github/workflows/release_icons.yml new file mode 100644 index 000000000..420f0d41e --- /dev/null +++ b/.github/workflows/release_icons.yml @@ -0,0 +1,71 @@ +name: 'Publish icons Release' + +on: + pull_request: + push: + tags: + - "SDDSIcons-v[0-9]+.[0-9]+.[0-9]+" + +concurrency: + # New commit on branch cancels running workflows of the same branch + group: ${{ github.workflow }}-${{ github.head_ref }} + cancel-in-progress: true + +jobs: + generate-distribution: + name: Generate icons distribution zip + runs-on: macos-latest + environment: sdds + steps: + - name: Checkout the code + uses: actions/checkout@v4 + + - name: Set up Xcode + uses: maxim-lobanov/setup-xcode@v1 + with: + xcode-version: 'latest' + + - name: Install the Apple certificate and provisioning profile + env: + BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }} + P12_PASSWORD: ${{ secrets.P12_PASSWORD }} + BUILD_PROVISION_PROFILE_BASE64: ${{ secrets.BUILD_PROVISION_PROFILE_BASE64 }} + KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }} + run: | + # create variables + CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12 + PP_PATH=$RUNNER_TEMP/build_pp.mobileprovision + KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db + + # import certificate and provisioning profile from secrets + echo -n "$BUILD_CERTIFICATE_BASE64" | base64 --decode -o $CERTIFICATE_PATH + + # create temporary keychain + security create-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH + security set-keychain-settings -lut 21600 $KEYCHAIN_PATH + security unlock-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH + + # import certificate to keychain + security import $CERTIFICATE_PATH -P "$P12_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH + security set-key-partition-list -S apple-tool:,apple: -k "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH + security list-keychain -d user -s $KEYCHAIN_PATH + + - name: Build SDDSIcons + run: | + xcodebuild -project SDDSIcons/SDDSIcons.xcodeproj -scheme "Build XCFramework" BUILD_DIR=./build + + - name: Generate distribution zip + id: zip_artifact + run: | + #TAG_NAME=${GITHUB_REF#refs/tags/} + TAG_NAME="SDDSIcons-v0.0.1" + echo "Tag name: $TAG_NAME" + zip -r "${TAG_NAME}.zip" ./SDDSIcons/build/SDDSIcons.xcframework + echo "::set-output name=zip_path::${TAG_NAME}.zip" + + - name: Release + uses: softprops/action-gh-release@v2 + with: + files: ${{ steps.zip_artifact.outputs.zip_path }} + tag_name: "0.0.1" #github.ref + token: ${{ secrets.GH_TOKEN }} diff --git a/.github/workflows/update_icons.yml b/.github/workflows/update_icons.yml new file mode 100644 index 000000000..02ac0c7a9 --- /dev/null +++ b/.github/workflows/update_icons.yml @@ -0,0 +1,109 @@ +name: Update Icons Pack + +on: + workflow_dispatch: + inputs: + plasma-ref: + required: true + default: master + plasma-version: + required: true + repository_dispatch: + types: [ build-icons ] + +jobs: + icons: + runs-on: macos-latest + environment: sdds + env: + lerna-scope: '--scope="@salutejs/plasma-icons"' + + steps: + # делаем сheckout в текущем репозитория + - name: Checkout + uses: actions/checkout@v4 + with: + show-progress: false + fetch-depth: 0 + path: current + + # делаем сheckout репозитория plasma + - name: Checkout to Plasma Web + uses: actions/checkout@v4 + with: + repository: salute-developers/plasma + #ref: ${{ github.event.client_payload.ref || github.event.inputs.plasma-ref }} + ref: feat-icons-png-generator + show-progress: false + path: plasma + + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version-file: 'plasma/.nvmrc' + + - name: Install plasma web project deps + working-directory: ./plasma + run: npm ci + + - name: Install plasma-icons + working-directory: ./plasma + run: | + npx lerna bootstrap ${{ env.lerna-scope }} + + - name: Generate iOS icons + working-directory: ./plasma + run: | + npx lerna ${{ env.lerna-scope }} run generate:ios + + - name: Extract current version + id: extract_version + working-directory: ./current + shell: bash + run: | + VER=$(grep -A1 'CFBundleShortVersionString' ./SDDSIcons/info.plist | awk -F'[<>]' '/string/{print $3; exit}') + echo "CFBundleVersion is $VER" + echo "tag=SDDSIcons-v$VER" >> $GITHUB_OUTPUT + + - name: Verify release branch not exists + working-directory: ./current + shell: bash + run: | + git fetch --all + if git branch -a | grep -q release/${{ steps.extract_version.outputs.tag }}; then exit 1; else exit 0; fi + + - name: Create release branch + working-directory: ./current + shell: bash + run: | + git fetch --all + git checkout -b release/${{steps.extract_version.outputs.tag}} + + - name: Move generated icons to XCAssets + run: cp -rf plasma/packages/plasma-icons/icons-ios/. current/SDDSIcons/SDDSIcons/Assets.xcassets + + - name: Install SwiftGen + run: | + brew install swiftgen + + - name: Run SwiftGen + working-directory: ./current + run: | + cd SDDSIcons + swiftgen + + - name: Create tag and release pull request + working-directory: ./current + shell: bash + env: + GH_TOKEN: ${{ secrets.GH_TOKEN }} + run: | + TAG=${{steps.extract_version.outputs.tag}} + PLASMA_VER=${{ github.event.client_payload.version || github.event.inputs.plasma-version }} + git config --local user.email "salutedevs@gmail.com" + git config --local user.name "Salute iOS Team" + git add ./SDDSIcons/SDDSIcons/Assets.xcassets/ + git add ./SDDSIcons/Generated/Assets.swift + git commit -m "feat(sdds-acore/icons): New icons were added from plasma v$PLASMA_VER" + git push --set-upstream origin release/$TAG + gh pr create --base main --head release/$TAG --title "Release $TAG" --body "Icons were updated to v$PLASMA_VER" diff --git a/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata b/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..919434a62 --- /dev/null +++ b/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/LICENCE.txt b/LICENCE.txt new file mode 100644 index 000000000..4ac192b87 --- /dev/null +++ b/LICENCE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Salute Devices + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/SDDSCore/LICENCE.txt b/SDDSCore/LICENCE.txt new file mode 100644 index 000000000..4ac192b87 --- /dev/null +++ b/SDDSCore/LICENCE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Salute Devices + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/SDDSDemoApp/LICENCE.txt b/SDDSDemoApp/LICENCE.txt new file mode 100644 index 000000000..4ac192b87 --- /dev/null +++ b/SDDSDemoApp/LICENCE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Salute Devices + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/SDDSDemoApp/SDDSDemoApp.xcodeproj/project.pbxproj b/SDDSDemoApp/SDDSDemoApp.xcodeproj/project.pbxproj index ed7d75b51..f65902556 100644 --- a/SDDSDemoApp/SDDSDemoApp.xcodeproj/project.pbxproj +++ b/SDDSDemoApp/SDDSDemoApp.xcodeproj/project.pbxproj @@ -7,6 +7,8 @@ objects = { /* Begin PBXBuildFile section */ + 242BF2452BBC616400E4D112 /* SDDSCore.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2430DEDA2BB5CE5100277123 /* SDDSCore.xcframework */; }; + 242BF2462BBC616400E4D112 /* SDDSCore.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 2430DEDA2BB5CE5100277123 /* SDDSCore.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 2430DEE02BB5CE5100277123 /* SDDSIcons.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2430DEDB2BB5CE5100277123 /* SDDSIcons.xcframework */; }; 2430DEE12BB5CE5100277123 /* SDDSIcons.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 2430DEDB2BB5CE5100277123 /* SDDSIcons.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 2430DEE22BB5CE5100277123 /* SDDSSwiftUI.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2430DEDC2BB5CE5100277123 /* SDDSSwiftUI.xcframework */; }; @@ -48,6 +50,7 @@ files = ( 2430DEE52BB5CE5100277123 /* SDDSUIKit.xcframework in Embed Frameworks */, 2430DEE12BB5CE5100277123 /* SDDSIcons.xcframework in Embed Frameworks */, + 242BF2462BBC616400E4D112 /* SDDSCore.xcframework in Embed Frameworks */, 2430DEE32BB5CE5100277123 /* SDDSSwiftUI.xcframework in Embed Frameworks */, ); name = "Embed Frameworks"; @@ -79,6 +82,7 @@ files = ( 2430DEE42BB5CE5100277123 /* SDDSUIKit.xcframework in Frameworks */, 2430DEE02BB5CE5100277123 /* SDDSIcons.xcframework in Frameworks */, + 242BF2452BBC616400E4D112 /* SDDSCore.xcframework in Frameworks */, 2430DEE22BB5CE5100277123 /* SDDSSwiftUI.xcframework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/SDDSDemoApp/SDDSDemoApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/SDDSDemoApp/SDDSDemoApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..919434a62 --- /dev/null +++ b/SDDSDemoApp/SDDSDemoApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/SDDSDemoApp/SDDSDemoApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/SDDSDemoApp/SDDSDemoApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/SDDSDemoApp/SDDSDemoApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/SDDSDemoApp/SDDSDemoApp/Assets.xcassets/testIcon.imageset/AppleOutline@1x.png b/SDDSDemoApp/SDDSDemoApp/Assets.xcassets/testIcon.imageset/AppleOutline@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..8c0dcbaf6f1eb95d17417b26c77b6e197377c36e GIT binary patch literal 2953 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 literal 0 HcmV?d00001 diff --git a/SDDSDemoApp/SDDSDemoApp/Assets.xcassets/testIcon.imageset/AppleOutline@2x.png b/SDDSDemoApp/SDDSDemoApp/Assets.xcassets/testIcon.imageset/AppleOutline@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b5a27884babdda6717ea993187375d64606d3c11 GIT binary patch literal 3438 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 QkN^Mx07*qoM6N<$f{izHVE_OC literal 0 HcmV?d00001 diff --git a/SDDSDemoApp/SDDSDemoApp/Assets.xcassets/testIcon.imageset/AppleOutline@3x.png b/SDDSDemoApp/SDDSDemoApp/Assets.xcassets/testIcon.imageset/AppleOutline@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..993a0ad717d4301508e69dc3901153015a9830b6 GIT binary patch literal 3906 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 literal 0 HcmV?d00001 diff --git a/SDDSDemoApp/SDDSDemoApp/Assets.xcassets/testIcon.imageset/Contents.json b/SDDSDemoApp/SDDSDemoApp/Assets.xcassets/testIcon.imageset/Contents.json new file mode 100644 index 000000000..b64f48cc1 --- /dev/null +++ b/SDDSDemoApp/SDDSDemoApp/Assets.xcassets/testIcon.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "info": { + "version": 1, + "author": "xcode" + }, + "images": [ + { + "scale": "1x", + "idiom": "universal", + "filename": "AppleOutline@1x.png" + }, + { + "scale": "2x", + "idiom": "universal", + "filename": "AppleOutline@2x.png" + }, + { + "scale": "3x", + "idiom": "universal", + "filename": "AppleOutline@3x.png" + } + ] +} \ No newline at end of file diff --git a/SDDSDemoApp/SDDSDemoApp/Assets.xcassets/testIcon2.imageset/Accessibility@1x.png b/SDDSDemoApp/SDDSDemoApp/Assets.xcassets/testIcon2.imageset/Accessibility@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..974005a9c3952373649d3e30d61ebd30f4aade40 GIT binary patch literal 285 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjoCO|{#S9GG!XV7ZFl!D-#d%K` z$B>FSZ!Z{TF(nGLJ=EQ1bggWXk=aL;ms=vN{U7oc@j3qzS=KX`J%C@Kf|>cyHU9{S zMCNx*iQ-2rJ{&w_Z+!o^vFE3JCdsmeYcfB}?VH%%wdcA@LWGh1%blJMU7;uUoVdJS zqW5ECxX+{Kb6?mdNLlSIO-d88KKgD2--ohiB9?qNlACj%w0GUClwHs*e&$1;X`iTD z<(F%Q*4=mCElroc!Z1(IXm#V0=T|x^1&zqWU~R;oe*Z$+%LJ!Ugpj@oXjl27)4R$4zLeA z0v}Qjz@AA1Kn3^)ej*h-J25^3&6Hc{3ph551lR_yfKy--$i!T?3*3j^19!kq%(WTWE7I|5KednkF*JuK+(F9xryoFNeCha>1I24gx;2>#VQ50jvFFm!$ Uh$CCu$N&HU07*qoM6N<$f@T-Iv;Y7A literal 0 HcmV?d00001 diff --git a/SDDSDemoApp/SDDSDemoApp/Assets.xcassets/testIcon2.imageset/Accessibility@3x.png b/SDDSDemoApp/SDDSDemoApp/Assets.xcassets/testIcon2.imageset/Accessibility@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..0dc5c8eb82418be2c7ae2286ebf63e8dc8e27026 GIT binary patch literal 757 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!oCO|{#S9FJ79h;%I?XVFfq`kc zr;B4q#hkaZZ8Jn1CEC<4#t6EaOi)^MLxaoltrJT(N7T*EC7y}N*~$_Z&mCFfx$uF% zp!Y$CRW~$}-tuSa^e9Mu+}_#h()(5UaBca#=XcNEeaBI5{+?N0=k%R3=I3j7Tkk$? zrQRao)X~FW-EjIq@PpMyg&zoQxVx06faeF(pH;&18x5x`9T0pF&1|_eg1v9o6oy|7 z(|u299_0!sSjjLa&(TlQZ)XTYUb;ZZ>7`5?rZ`@h09>?EYHnqmBQb~XIaqshO zDXh{>pI;q+@82t4Bd$HGXB|k6|961JU{0x#gMERJMf$_-zl;BL9-el2&eMpW>_04f zQeIk{yvUmT-B-VXHR04G8OFAx5U0?mypi{X&8{`|?!D(SFMm;(P=Utb)SXsl4c`xJ znj8MCQTl+6L2moy%5Klw=GnRLZsbo}+uzIaQ>I5VL;QoWQ_x$XIz8*foTm!^Us+dp z`Dojt!g{fakmsu|zuTC$^S5PAm)?qVsl|8B3G+Al=PE1|v7635?RLeQRL{Hy#_FI7 zwi%3Kjp6?Tk974KCMW;e$R4wtQHEijyU1sr8}D~bJj_gcm( zC9YS6cR41q?95~3%<5rbov?sGNW`Iu$s>S)lS{#oQAMKxSWx=1x#J)l_y}V2gW`2KTKf=L=?>i*#PhzkcZ7 z-<>QMf9STdC_3)cauRJ}`P-_6YJP*&eB(X6SNA<$_@mPCYs>Pat?#GhA6d56C@gok j!0NpMP8^Cctos>%2g_QpzpS1IOvenKu6{1-oD!M 'MIT', :file => 'LICENSE' } +s.author = { 'username' => 'vkasci@gmail.com' } +s.platform = :ios, "14.0" +s.source = { :http => 'https://github.com/salute-developers/plasma-ios/releases/download/0.0.1/SDDSIcons-v0.0.1.zip'} +s.ios.deployment_target = '14.0' +s.vendored_frameworks = 'SDDSIcons.xcframework' +end diff --git a/SDDSIcons/Generated/Assets.swift b/SDDSIcons/Generated/Assets.swift new file mode 100644 index 000000000..d548c81a0 --- /dev/null +++ b/SDDSIcons/Generated/Assets.swift @@ -0,0 +1,118 @@ +// swiftlint:disable all +// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen + + +#if os(iOS) + import UIKit +#elseif os(tvOS) || os(watchOS) + import UIKit +#endif +#if canImport(SwiftUI) + import SwiftUI +#endif + +// Deprecated typealiases +@available(*, deprecated, renamed: "ImageAsset.Image", message: "This typealias will be removed in SwiftGen 7.0") +public typealias AssetImageTypeAlias = ImageAsset.Image + +// swiftlint:disable superfluous_disable_command file_length implicit_return + +// MARK: - Asset Catalogs + +// swiftlint:disable identifier_name line_length nesting type_body_length type_name +public enum Asset { + public static let apple = ImageAsset(name: "Apple") + public static let google = ImageAsset(name: "Google") + public static let meta = ImageAsset(name: "Meta") + public static let microsoft = ImageAsset(name: "Microsoft") +} +// swiftlint:enable identifier_name line_length nesting type_body_length type_name + +// MARK: - Implementation Details + +public struct ImageAsset { + public fileprivate(set) var name: String + + #if os(iOS) || os(tvOS) || os(watchOS) + public typealias Image = UIImage + #endif + + @available(iOS 8.0, tvOS 9.0, watchOS 2.0, macOS 10.7, *) + public var uiImage: Image { + let bundle = BundleToken.bundle + #if os(iOS) || os(tvOS) + let image = Image(named: name, in: bundle, compatibleWith: nil) + #elseif os(watchOS) + let image = Image(named: name) + #endif + guard let result = image else { + fatalError("Unable to load image asset named \(name).") + } + return result + } + + #if os(iOS) || os(tvOS) + @available(iOS 8.0, tvOS 9.0, *) + public func image(compatibleWith traitCollection: UITraitCollection) -> Image { + let bundle = BundleToken.bundle + guard let result = Image(named: name, in: bundle, compatibleWith: traitCollection) else { + fatalError("Unable to load image asset named \(name).") + } + return result + } + #endif + + #if canImport(SwiftUI) + @available(iOS 13.0, tvOS 13.0, watchOS 6.0, *) + public var image: SwiftUI.Image { + SwiftUI.Image(asset: self) + } + #endif +} + +public extension ImageAsset.Image { + @available(iOS 8.0, tvOS 9.0, watchOS 2.0, *) + @available(macOS, deprecated, + message: "This initializer is unsafe on macOS, please use the ImageAsset.image property") + convenience init?(asset: ImageAsset) { + #if os(iOS) || os(tvOS) + let bundle = BundleToken.bundle + self.init(named: asset.name, in: bundle, compatibleWith: nil) + #elseif os(watchOS) + self.init(named: asset.name) + #endif + } +} + +#if canImport(SwiftUI) +@available(iOS 13.0, tvOS 13.0, watchOS 6.0, *) +public extension SwiftUI.Image { + init(asset: ImageAsset) { + let bundle = BundleToken.bundle + self.init(asset.name, bundle: bundle) + } + + init(asset: ImageAsset, label: Text) { + let bundle = BundleToken.bundle + self.init(asset.name, bundle: bundle, label: label) + } + + init(decorative asset: ImageAsset) { + let bundle = BundleToken.bundle + self.init(decorative: asset.name, bundle: bundle) + } +} +#endif + +// swiftlint:disable convenience_type +private final class BundleToken { + static let bundle: Bundle = { + #if SWIFT_PACKAGE + return Bundle.module + #else + return Bundle(for: BundleToken.self) + #endif + }() +} +// swiftlint:enable convenience_type + diff --git a/SDDSIcons/LICENCE.txt b/SDDSIcons/LICENCE.txt new file mode 100644 index 000000000..4ac192b87 --- /dev/null +++ b/SDDSIcons/LICENCE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Salute Devices + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/SDDSIcons/SDDSIcons.xcodeproj/project.pbxproj b/SDDSIcons/SDDSIcons.xcodeproj/project.pbxproj index 1ce4dc747..cefb2f4ff 100644 --- a/SDDSIcons/SDDSIcons.xcodeproj/project.pbxproj +++ b/SDDSIcons/SDDSIcons.xcodeproj/project.pbxproj @@ -6,7 +6,24 @@ objectVersion = 56; objects = { +/* Begin PBXAggregateTarget section */ + 242BF25E2BBDA0C300E4D112 /* Build XCFramework */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 242BF2612BBDA0C400E4D112 /* Build configuration list for PBXAggregateTarget "Build XCFramework" */; + buildPhases = ( + 242BF2622BBDA0CC00E4D112 /* Run Script */, + ); + dependencies = ( + ); + name = "Build XCFramework"; + productName = "Build XCFramework"; + }; +/* End PBXAggregateTarget section */ + /* Begin PBXBuildFile section */ + 242BF2422BBC600D00E4D112 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 242BF2412BBC600D00E4D112 /* Assets.xcassets */; }; + 242BF2442BBC610200E4D112 /* SDDSIcons.swift in Sources */ = {isa = PBXBuildFile; fileRef = 242BF2432BBC610200E4D112 /* SDDSIcons.swift */; }; + 242BF24F2BBC687700E4D112 /* Assets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 242BF24E2BBC687700E4D112 /* Assets.swift */; }; 2430DEA02BB5B53B00277123 /* SDDSIcons.docc in Sources */ = {isa = PBXBuildFile; fileRef = 2430DE9F2BB5B53B00277123 /* SDDSIcons.docc */; }; 2430DEA62BB5B53B00277123 /* SDDSIcons.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2430DE9B2BB5B53B00277123 /* SDDSIcons.framework */; }; 2430DEAB2BB5B53B00277123 /* SDDSIconsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2430DEAA2BB5B53B00277123 /* SDDSIconsTests.swift */; }; @@ -24,11 +41,20 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 242BF2412BBC600D00E4D112 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 242BF2432BBC610200E4D112 /* SDDSIcons.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SDDSIcons.swift; sourceTree = ""; }; + 242BF2472BBC673300E4D112 /* swiftgen.yml */ = {isa = PBXFileReference; lastKnownFileType = text.yaml; path = swiftgen.yml; sourceTree = ""; }; + 242BF24E2BBC687700E4D112 /* Assets.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Assets.swift; sourceTree = ""; }; + 242BF2552BBD8AB000E4D112 /* assets.stencil */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = assets.stencil; sourceTree = ""; }; + 242BF2582BBD941D00E4D112 /* build_xcframework.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = build_xcframework.sh; sourceTree = ""; }; + 242BF26B2BBDA47A00E4D112 /* SDDSIcons.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; path = SDDSIcons.xcframework; sourceTree = ""; }; + 242BF26E2BBDAE4A00E4D112 /* Package.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Package.swift; sourceTree = ""; }; 2430DE9B2BB5B53B00277123 /* SDDSIcons.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SDDSIcons.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 2430DE9E2BB5B53B00277123 /* SDDSIcons.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDDSIcons.h; sourceTree = ""; }; 2430DE9F2BB5B53B00277123 /* SDDSIcons.docc */ = {isa = PBXFileReference; lastKnownFileType = folder.documentationcatalog; path = SDDSIcons.docc; sourceTree = ""; }; 2430DEA52BB5B53B00277123 /* SDDSIconsTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SDDSIconsTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 2430DEAA2BB5B53B00277123 /* SDDSIconsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SDDSIconsTests.swift; sourceTree = ""; }; + 243C6C462BBF14E900525EAD /* info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = info.plist; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -50,9 +76,48 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 242BF24D2BBC687700E4D112 /* Generated */ = { + isa = PBXGroup; + children = ( + 242BF24E2BBC687700E4D112 /* Assets.swift */, + ); + path = Generated; + sourceTree = ""; + }; + 242BF2542BBD8AB000E4D112 /* Templates */ = { + isa = PBXGroup; + children = ( + 242BF2552BBD8AB000E4D112 /* assets.stencil */, + ); + path = Templates; + sourceTree = ""; + }; + 242BF2572BBD940700E4D112 /* Scripts */ = { + isa = PBXGroup; + children = ( + 242BF2582BBD941D00E4D112 /* build_xcframework.sh */, + ); + path = Scripts; + sourceTree = ""; + }; + 242BF26A2BBDA47A00E4D112 /* build */ = { + isa = PBXGroup; + children = ( + 242BF26B2BBDA47A00E4D112 /* SDDSIcons.xcframework */, + ); + path = build; + sourceTree = ""; + }; 2430DE912BB5B53B00277123 = { isa = PBXGroup; children = ( + 243C6C462BBF14E900525EAD /* info.plist */, + 242BF26E2BBDAE4A00E4D112 /* Package.swift */, + 242BF2472BBC673300E4D112 /* swiftgen.yml */, + 242BF26A2BBDA47A00E4D112 /* build */, + 242BF24D2BBC687700E4D112 /* Generated */, + 242BF2572BBD940700E4D112 /* Scripts */, + 242BF2542BBD8AB000E4D112 /* Templates */, 2430DE9D2BB5B53B00277123 /* SDDSIcons */, 2430DEA92BB5B53B00277123 /* SDDSIconsTests */, 2430DE9C2BB5B53B00277123 /* Products */, @@ -73,6 +138,8 @@ children = ( 2430DE9E2BB5B53B00277123 /* SDDSIcons.h */, 2430DE9F2BB5B53B00277123 /* SDDSIcons.docc */, + 242BF2412BBC600D00E4D112 /* Assets.xcassets */, + 242BF2432BBC610200E4D112 /* SDDSIcons.swift */, ); path = SDDSIcons; sourceTree = ""; @@ -146,6 +213,9 @@ LastSwiftUpdateCheck = 1520; LastUpgradeCheck = 1520; TargetAttributes = { + 242BF25E2BBDA0C300E4D112 = { + CreatedOnToolsVersion = 15.2; + }; 2430DE9A2BB5B53B00277123 = { CreatedOnToolsVersion = 15.2; }; @@ -169,6 +239,7 @@ targets = ( 2430DE9A2BB5B53B00277123 /* SDDSIcons */, 2430DEA42BB5B53B00277123 /* SDDSIconsTests */, + 242BF25E2BBDA0C300E4D112 /* Build XCFramework */, ); }; /* End PBXProject section */ @@ -178,6 +249,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 242BF2422BBC600D00E4D112 /* Assets.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -191,8 +263,28 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 242BF2622BBDA0CC00E4D112 /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"${SRCROOT}/Scripts/build_xcframework.sh\"\n"; + }; 2430DEE72BB6B30700277123 /* Lint */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -216,7 +308,9 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 242BF2442BBC610200E4D112 /* SDDSIcons.swift in Sources */, 2430DEA02BB5B53B00277123 /* SDDSIcons.docc in Sources */, + 242BF24F2BBC687700E4D112 /* Assets.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -239,6 +333,24 @@ /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ + 242BF25F2BBDA0C400E4D112 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = KDMYYG676V; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 242BF2602BBDA0C400E4D112 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = KDMYYG676V; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; 2430DEAD2BB5B53B00277123 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -278,7 +390,7 @@ DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu17; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -345,7 +457,7 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu17; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -378,15 +490,17 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_MODULE_VERIFIER = YES; ENABLE_USER_SCRIPT_SANDBOXING = NO; - GENERATE_INFOPLIST_FILE = YES; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = "${SRCROOT}/info.plist"; INFOPLIST_KEY_NSHumanReadableCopyright = ""; + INFOPLIST_PREPROCESS = NO; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MARKETING_VERSION = 1.0; + MARKETING_VERSION = 1.0.0; MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; PRODUCT_BUNDLE_IDENTIFIER = com.sd.SDDSIcons; @@ -414,15 +528,17 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_MODULE_VERIFIER = YES; ENABLE_USER_SCRIPT_SANDBOXING = NO; - GENERATE_INFOPLIST_FILE = YES; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = "${SRCROOT}/info.plist"; INFOPLIST_KEY_NSHumanReadableCopyright = ""; + INFOPLIST_PREPROCESS = NO; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MARKETING_VERSION = 1.0; + MARKETING_VERSION = 1.0.0; MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; PRODUCT_BUNDLE_IDENTIFIER = com.sd.SDDSIcons; @@ -441,6 +557,7 @@ 2430DEB32BB5B53B00277123 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = KDMYYG676V; @@ -461,6 +578,7 @@ 2430DEB42BB5B53B00277123 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = KDMYYG676V; @@ -481,6 +599,15 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 242BF2612BBDA0C400E4D112 /* Build configuration list for PBXAggregateTarget "Build XCFramework" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 242BF25F2BBDA0C400E4D112 /* Debug */, + 242BF2602BBDA0C400E4D112 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 2430DE952BB5B53B00277123 /* Build configuration list for PBXProject "SDDSIcons" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/SDDSIcons/SDDSIcons.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/SDDSIcons/SDDSIcons.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/SDDSIcons/SDDSIcons.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/SDDSIcons/SDDSIcons/Assets.xcassets/Apple.imageset/AppleFill@1x.png b/SDDSIcons/SDDSIcons/Assets.xcassets/Apple.imageset/AppleFill@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..7b2412f66d7f40ba22a4e531408ca25bd7261754 GIT binary patch literal 2843 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 1 or param.forceFileNameEnum %} + {% for catalog in catalogs %} + {{accessModifier}} enum {{catalog.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { + {% if catalog.assets %} + {% filter indent:2," ",true %}{% call enumBlock catalog.assets %}{% endfilter %} + {% endif %} + } + {% endfor %} + {% else %} + {% call enumBlock catalogs.first.assets %} + {% endif %} +} +// swiftlint:enable identifier_name line_length nesting type_body_length type_name + +// MARK: - Implementation Details +{% if hasARResourceGroup %} + +{{accessModifier}} struct {{arResourceGroupType}} { + {{accessModifier}} fileprivate(set) var name: String + + #if os(iOS) + @available(iOS 11.3, *) + {{accessModifier}} var referenceImages: Set { + return ARReferenceImage.referenceImages(in: self) + } + + @available(iOS 12.0, *) + {{accessModifier}} var referenceObjects: Set { + return ARReferenceObject.referenceObjects(in: self) + } + #endif +} + +#if os(iOS) +@available(iOS 11.3, *) +{{accessModifier}} extension ARReferenceImage { + static func referenceImages(in asset: {{arResourceGroupType}}) -> Set { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + return referenceImages(inGroupNamed: asset.name, bundle: bundle) ?? Set() + } +} + +@available(iOS 12.0, *) +{{accessModifier}} extension ARReferenceObject { + static func referenceObjects(in asset: {{arResourceGroupType}}) -> Set { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + return referenceObjects(inGroupNamed: asset.name, bundle: bundle) ?? Set() + } +} +#endif +{% endif %} +{% if hasColor %} + +{{accessModifier}} final class {{colorType}} { + {{accessModifier}} fileprivate(set) var name: String + + #if os(iOS) || os(tvOS) || os(watchOS) + {{accessModifier}} typealias Color = UIColor + #endif + + @available(iOS 11.0, tvOS 11.0, watchOS 4.0, macOS 10.13, *) + {{accessModifier}} private(set) lazy var color: Color = { + guard let color = Color(asset: self) else { + fatalError("Unable to load color asset named \(name).") + } + return color + }() + + #if os(iOS) || os(tvOS) + @available(iOS 11.0, tvOS 11.0, *) + {{accessModifier}} func color(compatibleWith traitCollection: UITraitCollection) -> Color { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + guard let color = Color(named: name, in: bundle, compatibleWith: traitCollection) else { + fatalError("Unable to load color asset named \(name).") + } + return color + } + #endif + + #if canImport(SwiftUI) + @available(iOS 13.0, tvOS 13.0, watchOS 6.0, *) + {{accessModifier}} private(set) lazy var swiftUIColor: SwiftUI.Color = { + SwiftUI.Color(asset: self) + }() + #endif + + fileprivate init(name: String) { + self.name = name + } +} + +{{accessModifier}} extension {{colorType}}.Color { + @available(iOS 11.0, tvOS 11.0, watchOS 4.0, macOS 10.13, *) + convenience init?(asset: {{colorType}}) { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + #if os(iOS) || os(tvOS) + self.init(named: asset.name, in: bundle, compatibleWith: nil) + #elseif os(watchOS) + self.init(named: asset.name) + #endif + } +} + +#if canImport(SwiftUI) +@available(iOS 13.0, tvOS 13.0, watchOS 6.0, *) +{{accessModifier}} extension SwiftUI.Color { + init(asset: {{colorType}}) { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + self.init(asset.name, bundle: bundle) + } +} +#endif +{% endif %} +{% if hasData %} + +{{accessModifier}} struct {{dataType}} { + {{accessModifier}} fileprivate(set) var name: String + + @available(iOS 9.0, tvOS 9.0, watchOS 6.0, macOS 10.11, *) + {{accessModifier}} var data: NSDataAsset { + guard let data = NSDataAsset(asset: self) else { + fatalError("Unable to load data asset named \(name).") + } + return data + } +} + +@available(iOS 9.0, tvOS 9.0, watchOS 6.0, macOS 10.11, *) +{{accessModifier}} extension NSDataAsset { + convenience init?(asset: {{dataType}}) { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + #if os(iOS) || os(tvOS) || os(watchOS) + self.init(name: asset.name, bundle: bundle) + #endif + } +} +{% endif %} +{% if hasImage %} + +{{accessModifier}} struct {{imageType}} { + {{accessModifier}} fileprivate(set) var name: String + + #if os(iOS) || os(tvOS) || os(watchOS) + {{accessModifier}} typealias Image = UIImage + #endif + + @available(iOS 8.0, tvOS 9.0, watchOS 2.0, macOS 10.7, *) + {{accessModifier}} var uiImage: Image { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + #if os(iOS) || os(tvOS) + let image = Image(named: name, in: bundle, compatibleWith: nil) + #elseif os(watchOS) + let image = Image(named: name) + #endif + guard let result = image else { + fatalError("Unable to load image asset named \(name).") + } + return result + } + + #if os(iOS) || os(tvOS) + @available(iOS 8.0, tvOS 9.0, *) + {{accessModifier}} func image(compatibleWith traitCollection: UITraitCollection) -> Image { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + guard let result = Image(named: name, in: bundle, compatibleWith: traitCollection) else { + fatalError("Unable to load image asset named \(name).") + } + return result + } + #endif + + #if canImport(SwiftUI) + @available(iOS 13.0, tvOS 13.0, watchOS 6.0, *) + {{accessModifier}} var image: SwiftUI.Image { + SwiftUI.Image(asset: self) + } + #endif +} + +{{accessModifier}} extension {{imageType}}.Image { + @available(iOS 8.0, tvOS 9.0, watchOS 2.0, *) + @available(macOS, deprecated, + message: "This initializer is unsafe on macOS, please use the {{imageType}}.image property") + convenience init?(asset: {{imageType}}) { + #if os(iOS) || os(tvOS) + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + self.init(named: asset.name, in: bundle, compatibleWith: nil) + #elseif os(watchOS) + self.init(named: asset.name) + #endif + } +} + +#if canImport(SwiftUI) +@available(iOS 13.0, tvOS 13.0, watchOS 6.0, *) +{{accessModifier}} extension SwiftUI.Image { + init(asset: {{imageType}}) { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + self.init(asset.name, bundle: bundle) + } + + init(asset: {{imageType}}, label: Text) { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + self.init(asset.name, bundle: bundle, label: label) + } + + init(decorative asset: {{imageType}}) { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + self.init(decorative: asset.name, bundle: bundle) + } +} +#endif +{% endif %} +{% if hasSymbol %} + +{{accessModifier}} struct {{symbolType}} { + {{accessModifier}} fileprivate(set) var name: String + + #if os(iOS) || os(tvOS) || os(watchOS) + @available(iOS 13.0, tvOS 13.0, watchOS 6.0, *) + {{accessModifier}} typealias Configuration = UIImage.SymbolConfiguration + {{accessModifier}} typealias Image = UIImage + + @available(iOS 12.0, tvOS 12.0, watchOS 5.0, *) + {{accessModifier}} var image: Image { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + #if os(iOS) || os(tvOS) + let image = Image(named: name, in: bundle, compatibleWith: nil) + #elseif os(watchOS) + let image = Image(named: name) + #endif + guard let result = image else { + fatalError("Unable to load symbol asset named \(name).") + } + return result + } + + @available(iOS 13.0, tvOS 13.0, watchOS 6.0, *) + {{accessModifier}} func image(with configuration: Configuration) -> Image { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + guard let result = Image(named: name, in: bundle, with: configuration) else { + fatalError("Unable to load symbol asset named \(name).") + } + return result + } + #endif + + #if canImport(SwiftUI) + @available(iOS 13.0, tvOS 13.0, watchOS 6.0, *) + {{accessModifier}} var swiftUIImage: SwiftUI.Image { + SwiftUI.Image(asset: self) + } + #endif +} + +#if canImport(SwiftUI) +@available(iOS 13.0, tvOS 13.0, watchOS 6.0, *) +{{accessModifier}} extension SwiftUI.Image { + init(asset: {{symbolType}}) { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + self.init(asset.name, bundle: bundle) + } + + init(asset: {{symbolType}}, label: Text) { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + self.init(asset.name, bundle: bundle, label: label) + } + + init(decorative asset: {{symbolType}}) { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + self.init(decorative: asset.name, bundle: bundle) + } +} +#endif +{% endif %} +{% if not param.bundle %} + +// swiftlint:disable convenience_type +private final class BundleToken { + static let bundle: Bundle = { + #if SWIFT_PACKAGE + return Bundle.module + #else + return Bundle(for: BundleToken.self) + #endif + }() +} +// swiftlint:enable convenience_type +{% endif %} +{% else %} +// No assets found +{% endif %} + diff --git a/SDDSIcons/info.plist b/SDDSIcons/info.plist new file mode 100644 index 000000000..a32053afc --- /dev/null +++ b/SDDSIcons/info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleShortVersionString + 1.0.0 + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleName + $(PRODUCT_NAME) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + NSHumanReadableCopyright + + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + + diff --git a/SDDSIcons/swiftgen.yml b/SDDSIcons/swiftgen.yml new file mode 100644 index 000000000..8aad4360b --- /dev/null +++ b/SDDSIcons/swiftgen.yml @@ -0,0 +1,57 @@ +## Note: all of the config entries below are just examples with placeholders. Be sure to edit and adjust to your needs when uncommenting. + +## In case your config entries all use a common input/output parent directory, you can specify those here. +## Every input/output paths in the rest of the config will then be expressed relative to these. +## Those two top-level keys are optional and default to "." (the directory of the config file). +# input_dir: MyLib/Sources/ +# output_dir: MyLib/Generated/ + + +## Generate constants for your localized strings. +## Be sure that SwiftGen only parses ONE locale (typically Base.lproj, or en.lproj, or whichever your development region is); otherwise it will generate the same keys multiple times. +## SwiftGen will parse all `.strings` files found in that folder. +# strings: +# inputs: +# - Resources/Base.lproj +# outputs: +# - templateName: structured-swift5 +# output: Strings+Generated.swift + + +## Generate constants for your Assets Catalogs, including constants for images, colors, ARKit resources, etc. +## This example also shows how to provide additional parameters to your template to customize the output. +## - Especially the `forceProvidesNamespaces: true` param forces to create sub-namespace for each folder/group used in your Asset Catalogs, even the ones without "Provides Namespace". Without this param, SwiftGen only generates sub-namespaces for folders/groups which have the "Provides Namespace" box checked in the Inspector pane. +## - To know which params are supported for a template, use `swiftgen template doc xcassets swift5` to open the template documentation on GitHub. + xcassets: + inputs: + - SDDSIcons/Assets.xcassets + outputs: + - templatePath: Templates/assets.stencil + params: + forceProvidesNamespaces: true + publicAccess: true + output: Generated/Assets.swift + +## Generate constants for your storyboards and XIBs. +## This one generates 2 output files, one containing the storyboard scenes, and another for the segues. +## (You can remove the segues entry if you don't use segues in your IB files). +## For `inputs` we can use "." here (aka "current directory", at least relative to `input_dir` = "MyLib/Sources"), +## and SwiftGen will recursively find all `*.storyboard` and `*.xib` files in there. +# ib: +# inputs: +# - . +# outputs: +# - templateName: scenes-swift5 +# output: IB-Scenes+Generated.swift +# - templateName: segues-swift5 +# output: IB-Segues+Generated.swift + + +## There are other parsers available for you to use depending on your needs, for example: +## - `fonts` (if you have custom ttf/ttc font files) +## - `coredata` (for CoreData models) +## - `json`, `yaml` and `plist` (to parse custom JSON/YAML/Plist files and generate code from their content) +## … +## +## For more info, use `swiftgen config doc` to open the full documentation on GitHub. +## https://github.com/SwiftGen/SwiftGen/tree/6.6.3/Documentation/ diff --git a/SDDSSwiftUI/LICENCE.txt b/SDDSSwiftUI/LICENCE.txt new file mode 100644 index 000000000..4ac192b87 --- /dev/null +++ b/SDDSSwiftUI/LICENCE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Salute Devices + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/SDDSUIKit/LICENCE.txt b/SDDSUIKit/LICENCE.txt new file mode 100644 index 000000000..4ac192b87 --- /dev/null +++ b/SDDSUIKit/LICENCE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Salute Devices + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/SddsIcons/Package.swift b/SddsIcons/Package.swift deleted file mode 100644 index 9ca52c8dd..000000000 --- a/SddsIcons/Package.swift +++ /dev/null @@ -1,23 +0,0 @@ -// swift-tools-version: 5.9 -// The swift-tools-version declares the minimum version of Swift required to build this package. - -import PackageDescription - -let package = Package( - name: "SddsIcons", - products: [ - // Products define the executables and libraries a package produces, making them visible to other packages. - .library( - name: "SddsIcons", - targets: ["SddsIcons"]), - ], - targets: [ - // Targets are the basic building blocks of a package, defining a module or a test suite. - // Targets can depend on other targets in this package and products from dependencies. - .target( - name: "SddsIcons"), - .testTarget( - name: "SddsIconsTests", - dependencies: ["SddsIcons"]), - ] -) diff --git a/scripts/build.sh b/scripts/build.sh index 4d6fc81dd..a01733e35 100644 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -28,14 +28,14 @@ for MODULE in "${!modules[@]}"; do print_info "Making an archive for iOS device..." iOS_ARCHIVE_PATH="${BUILD_PATH}/${SCHEME}-iphoneos.xcarchive" - SKIP_LINT=YES xcodebuild archive -project ${XCODE_PROJECT_PATH} -scheme ${SCHEME} -archivePath "${iOS_ARCHIVE_PATH}" -sdk iphoneos SKIP_INSTALL=NO BUILD_LIBRARIES_FOR_DISTRIBUTION=YES + SKIP_LINT=YES BUILD_ALL=YES xcodebuild archive -project ${XCODE_PROJECT_PATH} -scheme ${SCHEME} -archivePath "${iOS_ARCHIVE_PATH}" -sdk iphoneos SKIP_INSTALL=NO BUILD_LIBRARIES_FOR_DISTRIBUTION=YES print_info "Making an archive for iOS simulator..." iOS_SIMULATOR_ARCHIVE_PATH="${BUILD_PATH}/${SCHEME}-iossimulator.xcarchive" - SKIP_LINT=YES xcodebuild archive -project ${XCODE_PROJECT_PATH} -scheme ${SCHEME} -archivePath "${iOS_SIMULATOR_ARCHIVE_PATH}" -sdk iphonesimulator SKIP_INSTALL=NO BUILD_LIBRARIES_FOR_DISTRIBUTION=YES + SKIP_LINT=YES BUILD_ALL=YES xcodebuild archive -project ${XCODE_PROJECT_PATH} -scheme ${SCHEME} -archivePath "${iOS_SIMULATOR_ARCHIVE_PATH}" -sdk iphonesimulator SKIP_INSTALL=NO BUILD_LIBRARIES_FOR_DISTRIBUTION=YES print_info "Making XCFramework..." - SKIP_LINT=YES xcodebuild -create-xcframework -framework "${BUILD_PATH}/${SCHEME}-iphoneos.xcarchive/Products/Library/Frameworks/${SCHEME}.framework" -framework "${BUILD_PATH}/${SCHEME}-iossimulator.xcarchive/Products/Library/Frameworks/${SCHEME}.framework" -output "${BUILD_PATH}/${SCHEME}.xcframework" + SKIP_LINT=YES BUILD_ALL=YES xcodebuild -create-xcframework -framework "${BUILD_PATH}/${SCHEME}-iphoneos.xcarchive/Products/Library/Frameworks/${SCHEME}.framework" -framework "${BUILD_PATH}/${SCHEME}-iossimulator.xcarchive/Products/Library/Frameworks/${SCHEME}.framework" -output "${BUILD_PATH}/${SCHEME}.xcframework" if [ $? -ne 0 ]; then print_error "Build failed for the scheme $SCHEME."