diff --git a/.circleci/config.yml b/.circleci/config.yml index 95631e6b..20758b50 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,115 +1,90 @@ version: 2.1 -jobs: - danger: - executor: xcode-12 - steps: - - setup - - run: - name: Install xchtmlreport - command: | - curl -O https://raw.githubusercontent.com/TitouanVanBelle/XCTestHTMLReport/develop/xchtmlreport.rb - brew install --HEAD --build-from-source xchtmlreport.rb - - run: - name: Install xcparse - when: always - command: | - brew install chargepoint/xcparse/xcparse - - run: - name: Tests & Code Coverage - when: always - command: | - bundle exec fastlane coverage_all - # Store xcov Code Coverage HTML report artifact - - store_artifacts: - path: build/BonMot-iOS/xcov - destination: xcov - - store_artifacts: - path: build/BonMot-iOS/slather - destination: slather - - store_artifacts: - path: build/BonMot-iOS/scan - destination: scan - - run: - name: Rename CircleCI JUnit XML - when: always - command: | - mkdir -p build/test-results/danger - cp build/BonMot-iOS/scan/BonMot-iOS.xcresult/report.junit build/test-results/danger/results.xml - - store_test_results: - path: build/test-results - # Install SwiftLint only before Danger because otherwise it fails the build - - run: - name: Install SwiftLint - when: always - command: | - brew install swiftlint - - run: - name: Danger - when: always - command: | - if [ -n "$DANGER_GITHUB_API_TOKEN" ]; then bundle exec danger; else echo "Skipping Danger for forked pull request."; fi - - run: - name: Upload to Codecov - when: always - command: bash <(curl -s https://codecov.io/bash) -f build/BonMot-iOS/slather/cobertura.xml -X coveragepy -X gcov -X xcode +orbs: + macos: circleci/macos@2 +jobs: swift-package: - executor: xcode-12 + executor: xcode-16 steps: - setup + - run: mkdir test-results-swift - run: swift build - run: swift test + - store_test_results: + path: test-results-swift lint-pod: - executor: xcode-12 + executor: xcode-16 steps: - setup - lint-pod - fastlane-tests: - executor: xcode-12 - steps: - - setup - - run: bundle exec fastlane test_all + # Docs for store_test_results: https://circleci.com/docs/configuration-reference/#storetestresults - fastlane-tests-xcode-13: - executor: xcode-13 + tests-xcode-16: + executor: xcode-16 steps: - setup - - run: bundle exec fastlane test_all + - run: mkdir test-results-macos + - run: make test_macos + - store_test_results: + path: test-results-macos + - run: mkdir test-results-ios + - run: make test_ios + - store_test_results: + path: test-results-ios + - run: mkdir test-results-tvos + - run: make test_tvos + - store_test_results: + path: test-results-tvos + - run: mkdir test-results-watchos + - run: make test_watchos + - store_test_results: + path: test-results-watchos - carthage-build: - executor: xcode-12 + tests-xcode-15: + executor: xcode-15 steps: - - checkout - - run: - name: Update homebrew dependencies - command: brew update 1> /dev/null 2> /dev/null - - run: - name: Update Carthage - command: brew outdated carthage || (brew uninstall carthage --force; brew install carthage --force-bottle) - # Carthage does not work on Xcode 12 https://github.com/Carthage/Carthage/issues/3019 - # - run: carthage build --no-skip-current && for platform in Mac iOS tvOS watchOS; do test -d Carthage/Build/${platform}/BonMot.framework || exit 1; done + - setup + - run: mkdir test-results-macos + - run: make test_macos + - run: mkdir test-results-macos + - store_test_results: + path: test-results-macos + - run: mkdir test-results-ios + - run: make test_ios + - store_test_results: + path: test-results-ios + - run: mkdir test-results-tvos + - run: make test_tvos + - store_test_results: + path: test-results-tvos + - run: mkdir test-results-watchos + - run: make test_watchos + - store_test_results: + path: test-results-watchos deploy-to-cocoapods: - executor: xcode-12 + executor: xcode-15 steps: - setup - run: bundle exec pod trunk push executors: - xcode-12: + xcode-16: macos: - xcode: "12.5.1" + xcode: "16.0.0" + resource_class: macos.m1.large.gen1 environment: LC_ALL: en_US.UTF-8 LANG: en_US.UTF-8 HOMEBREW_NO_AUTO_UPDATE: 1 shell: /bin/bash --login -eo pipefail - xcode-13: + xcode-15: macos: - xcode: "13.0.0" + xcode: "15.4.0" + resource_class: macos.m1.large.gen1 environment: LC_ALL: en_US.UTF-8 LANG: en_US.UTF-8 @@ -121,28 +96,21 @@ commands: description: "Shared setup" steps: - checkout - - restore-gems + - switch-ruby - restore-gems: - description: "Restore Ruby Gems" + switch-ruby: + description: "Switch Ruby" steps: - - run: - name: Set Ruby Version - command: echo "ruby-2.5" > ~/.ruby-version - - restore_cache: - key: 1-gems-{{ checksum "Gemfile.lock" }} - - run: bundle check || bundle install --path vendor/bundle - - save_cache: - key: 1-gems-{{ checksum "Gemfile.lock" }} - paths: - - vendor/bundle + - macos/switch-ruby: + version: "3.1.4" # must match version in .ruby-version + - run: bundle install lint-pod: description: "Lints podspec with specified Swift version" parameters: swift-version: type: string - default: "5.0" + default: "5.8" steps: - run: bundle exec pod lib lint --swift-version=<< parameters.swift-version >> @@ -150,19 +118,15 @@ workflows: version: 2 build-test-deploy: jobs: - - danger: - filters: - tags: - only: /.*/ - - swift-package: + # - swift-package: + # filters: + # tags: + # only: /.*/ + - tests-xcode-16: filters: tags: only: /.*/ - - fastlane-tests: - filters: - tags: - only: /.*/ - - fastlane-tests-xcode-13: + - tests-xcode-15: filters: tags: only: /.*/ @@ -170,19 +134,13 @@ workflows: filters: tags: only: /.*/ - - carthage-build: - filters: - tags: - only: /.*/ - deploy-to-cocoapods: context: CocoaPods requires: - - danger - - swift-package - - fastlane-tests - - fastlane-tests-xcode-13 + # - swift-package + - tests-xcode-16 + - tests-xcode-15 - lint-pod - - carthage-build filters: tags: only: /\d+(\.\d+)*(-.*)*/ diff --git a/.github/workflows/swift.yml b/.github/workflows/swift.yml new file mode 100644 index 00000000..70a41ffd --- /dev/null +++ b/.github/workflows/swift.yml @@ -0,0 +1,30 @@ +# This workflow will build a Swift project +# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-swift + +name: Swift + +on: + push: + branches: ["master"] + pull_request: + branches: ["master"] + +jobs: + build: + runs-on: macos-latest + + steps: + - uses: actions/checkout@v4 + - uses: maxim-lobanov/setup-xcode@v1 + with: + xcode-version: 15.4 + - name: Bundle + run: bundle install + - name: Run all tests + run: make test_all + - name: Artifacts + if: always() + uses: actions/upload-artifact@v4 + with: + name: results + path: "./test-results-*" diff --git a/.gitignore b/.gitignore index 291f0f2d..e4835c2e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +test-results-* + # Created by https://www.gitignore.io/api/swift,macos,swiftpm,swiftpackagemanager # Edit at https://www.gitignore.io/?templates=swift,macos,swiftpm,swiftpackagemanager diff --git a/.ruby-version b/.ruby-version new file mode 100644 index 00000000..0aec50e6 --- /dev/null +++ b/.ruby-version @@ -0,0 +1 @@ +3.1.4 diff --git a/.swiftlint.yml b/.swiftlint.yml index 38fc812d..e492845e 100644 --- a/.swiftlint.yml +++ b/.swiftlint.yml @@ -3,7 +3,6 @@ disabled_rules: # rule identifiers to exclude from running - file_length - function_body_length - identifier_name - - implicit_return # Re-enable when we drop support for Swift 4.2 - large_tuple - line_length - nesting @@ -13,7 +12,6 @@ statement_position: statement_mode: uncuddled_else opt_in_rules: - - anyobject_protocol - identical_operands - implicit_return - last_where diff --git a/BonMot.xcodeproj/xcshareddata/xcschemes/AllTheThings.xcscheme b/.swiftpm/xcode/xcshareddata/xcschemes/BonMot.xcscheme similarity index 58% rename from BonMot.xcodeproj/xcshareddata/xcschemes/AllTheThings.xcscheme rename to .swiftpm/xcode/xcshareddata/xcschemes/BonMot.xcscheme index 6b59f3c4..c344e125 100644 --- a/BonMot.xcodeproj/xcshareddata/xcschemes/AllTheThings.xcscheme +++ b/.swiftpm/xcode/xcshareddata/xcschemes/BonMot.xcscheme @@ -1,7 +1,7 @@ + LastUpgradeVersion = "1510" + version = "1.7"> @@ -14,10 +14,24 @@ buildForAnalyzing = "YES"> + BlueprintIdentifier = "BonMot" + BuildableName = "BonMot" + BlueprintName = "BonMot" + ReferencedContainer = "container:"> + + + + @@ -27,8 +41,18 @@ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" shouldUseLaunchSchemeArgsEnv = "YES" - codeCoverageEnabled = "YES"> + shouldAutocreateTestPlan = "YES"> + + + + - - - - + BlueprintIdentifier = "BonMot" + BuildableName = "BonMot" + BlueprintName = "BonMot" + ReferencedContainer = "container:"> diff --git a/BonMot.podspec b/BonMot.podspec index f1f18ad2..a03dc573 100644 --- a/BonMot.podspec +++ b/BonMot.podspec @@ -2,7 +2,7 @@ Pod::Spec.new do |s| s.name = "BonMot" s.version = "6.1.3" s.summary = "Beautiful, easy attributed strings in Swift" - s.swift_versions = ["5.0"] + s.swift_versions = ["5.8", "5.9", "5.10"] s.description = <<-DESC BonMot removes all the mystery from creating beautiful, powerful attributed strings in Swift. DESC @@ -14,16 +14,16 @@ Pod::Spec.new do |s| # s.social_media_url = 'https://twitter.com/ZevEisenberg' s.requires_arc = true - s.ios.deployment_target = '11.0' + s.ios.deployment_target = '12.0' s.ios.source_files = 'Sources/**/*.swift' - s.tvos.deployment_target = '11.0' + s.tvos.deployment_target = '12.0' s.tvos.source_files = 'Sources/**/*.swift' - s.osx.deployment_target = '10.11' + s.osx.deployment_target = '10.15' s.osx.source_files = 'Sources/*.swift' - s.watchos.deployment_target = '2.2' + s.watchos.deployment_target = '4.0' s.watchos.source_files = 'Sources/*.swift' end diff --git a/BonMot.xcodeproj/project.pbxproj b/BonMot.xcodeproj/project.pbxproj deleted file mode 100644 index cec10636..00000000 --- a/BonMot.xcodeproj/project.pbxproj +++ /dev/null @@ -1,1936 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 52; - objects = { - -/* Begin PBXAggregateTarget section */ - AB8497DA1DA45B9C00FE3414 /* AllTheThings */ = { - isa = PBXAggregateTarget; - buildConfigurationList = AB8497DD1DA45B9C00FE3414 /* Build configuration list for PBXAggregateTarget "AllTheThings" */; - buildPhases = ( - ABBD124E1DA469BB0084FBCC /* Build and test macOS */, - CD15C4071DBE660700B6FF7A /* Build and test iOS */, - CDC513361F36B1FA00EA1712 /* Build iOS example project */, - CD15C4081DBE660800B6FF7A /* Build and test tvOS */, - CD15C4091DBE660A00B6FF7A /* Build watchOS */, - ); - dependencies = ( - ); - name = AllTheThings; - productName = AllTheThings; - }; -/* End PBXAggregateTarget section */ - -/* Begin PBXBuildFile section */ - 1E7B10EC1DA41F9300C668A4 /* TextAlignmentConstraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E7B10EB1DA41F9300C668A4 /* TextAlignmentConstraint.swift */; }; - 1E7B10ED1DA41F9300C668A4 /* TextAlignmentConstraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E7B10EB1DA41F9300C668A4 /* TextAlignmentConstraint.swift */; }; - 1E7B10EE1DA41F9300C668A4 /* TextAlignmentConstraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E7B10EB1DA41F9300C668A4 /* TextAlignmentConstraint.swift */; }; - 1E902AB41DA6915F00BD154D /* TextAlignmentConstraintTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E902AB31DA6915F00BD154D /* TextAlignmentConstraintTests.swift */; }; - 1E902AB51DA6915F00BD154D /* TextAlignmentConstraintTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E902AB31DA6915F00BD154D /* TextAlignmentConstraintTests.swift */; }; - 1E902AB61DA6915F00BD154D /* TextAlignmentConstraintTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E902AB31DA6915F00BD154D /* TextAlignmentConstraintTests.swift */; }; - 526C7050268BCC61002C0C71 /* EBGaramond12-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = 526C704D268BCC61002C0C71 /* EBGaramond12-Regular.otf */; }; - 526C7051268BCC61002C0C71 /* EBGaramond12-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = 526C704D268BCC61002C0C71 /* EBGaramond12-Regular.otf */; }; - 526C7052268BCC61002C0C71 /* EBGaramond12-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = 526C704D268BCC61002C0C71 /* EBGaramond12-Regular.otf */; }; - 526C7053268BCC61002C0C71 /* rz-logo-black.png in Resources */ = {isa = PBXBuildFile; fileRef = 526C704E268BCC61002C0C71 /* rz-logo-black.png */; }; - 526C7054268BCC61002C0C71 /* rz-logo-black.png in Resources */ = {isa = PBXBuildFile; fileRef = 526C704E268BCC61002C0C71 /* rz-logo-black.png */; }; - 526C7055268BCC61002C0C71 /* rz-logo-black.png in Resources */ = {isa = PBXBuildFile; fileRef = 526C704E268BCC61002C0C71 /* rz-logo-black.png */; }; - 526C7056268BCC61002C0C71 /* rz-logo-red.png in Resources */ = {isa = PBXBuildFile; fileRef = 526C704F268BCC61002C0C71 /* rz-logo-red.png */; }; - 526C7057268BCC61002C0C71 /* rz-logo-red.png in Resources */ = {isa = PBXBuildFile; fileRef = 526C704F268BCC61002C0C71 /* rz-logo-red.png */; }; - 526C7058268BCC61002C0C71 /* rz-logo-red.png in Resources */ = {isa = PBXBuildFile; fileRef = 526C704F268BCC61002C0C71 /* rz-logo-red.png */; }; - 526C7059268BCC86002C0C71 /* EBGaramond12-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = 526C704D268BCC61002C0C71 /* EBGaramond12-Regular.otf */; }; - AB30D4FF1D9C1EEC006ADC9D /* Composable.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB30D4FE1D9C1EEC006ADC9D /* Composable.swift */; }; - AB30D50C1D9CB4FE006ADC9D /* Tab.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB30D50B1D9CB4FE006ADC9D /* Tab.swift */; }; - AB30D50D1D9CB4FE006ADC9D /* Tab.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB30D50B1D9CB4FE006ADC9D /* Tab.swift */; }; - AB30D50E1D9CB4FE006ADC9D /* Tab.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB30D50B1D9CB4FE006ADC9D /* Tab.swift */; }; - AB30D50F1D9CB4FE006ADC9D /* Tab.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB30D50B1D9CB4FE006ADC9D /* Tab.swift */; }; - AB30D5101D9D9438006ADC9D /* Composable.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB30D4FE1D9C1EEC006ADC9D /* Composable.swift */; }; - AB30D5111D9D9438006ADC9D /* Composable.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB30D4FE1D9C1EEC006ADC9D /* Composable.swift */; }; - AB30D5121D9D9439006ADC9D /* Composable.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB30D4FE1D9C1EEC006ADC9D /* Composable.swift */; }; - AB30D51D1D9D95F5006ADC9D /* EmbeddedTransformation.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB30D51C1D9D95F5006ADC9D /* EmbeddedTransformation.swift */; }; - AB560A061D9F692000100D15 /* AttributedStringTransformation.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB560A051D9F692000100D15 /* AttributedStringTransformation.swift */; }; - AB560A081DA0C14000100D15 /* Tab+Adaptive.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB560A071DA0C14000100D15 /* Tab+Adaptive.swift */; }; - AB560A0A1DA0C17800100D15 /* Tracking+Adaptive.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB560A091DA0C17800100D15 /* Tracking+Adaptive.swift */; }; - AB6633091DA5C5F90007F301 /* BONFontBehaviorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3DAC1D96F06800273936 /* BONFontBehaviorTests.swift */; }; - AB8497B01DA16DAE00FE3414 /* NSAttributedString+Adaptive.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D651D96F02F00273936 /* NSAttributedString+Adaptive.swift */; }; - AB8497B11DA16DAE00FE3414 /* AdaptiveStyleTransformation.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D631D96F02F00273936 /* AdaptiveStyleTransformation.swift */; }; - AB8497B21DA16DAE00FE3414 /* AttributedStringTransformation.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB560A051D9F692000100D15 /* AttributedStringTransformation.swift */; }; - AB8497B31DA16DAE00FE3414 /* EmbeddedTransformation.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB30D51C1D9D95F5006ADC9D /* EmbeddedTransformation.swift */; }; - AB8497B41DA16DAE00FE3414 /* AdaptiveStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D621D96F02F00273936 /* AdaptiveStyle.swift */; }; - AB8497B51DA16DAE00FE3414 /* Tab+Adaptive.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB560A071DA0C14000100D15 /* Tab+Adaptive.swift */; }; - AB8497B61DA16DAE00FE3414 /* Tracking+Adaptive.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB560A091DA0C17800100D15 /* Tracking+Adaptive.swift */; }; - AB86628E1D9B060D00DEE3E3 /* FontFeatures.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D561D96F02F00273936 /* FontFeatures.swift */; }; - AB9C18D91D9975FD00A54787 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AB9C18D51D9975EE00A54787 /* Images.xcassets */; }; - AB9C18DB1D9975FD00A54787 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AB9C18D51D9975EE00A54787 /* Images.xcassets */; }; - AB9C18DD1D9975FE00A54787 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AB9C18D51D9975EE00A54787 /* Images.xcassets */; }; - ABA75DD21D99E10400B64705 /* Platform.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D581D96F02F00273936 /* Platform.swift */; }; - ABA75DD61D99E10400B64705 /* StringStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D521D96F02F00273936 /* StringStyle.swift */; }; - ABA75DD81D99E10400B64705 /* Special.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D5B1D96F02F00273936 /* Special.swift */; }; - ABA75DD91D99E10400B64705 /* NamedStyles.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D5E1D96F02F00273936 /* NamedStyles.swift */; }; - ABA75DDB1D99E10400B64705 /* StringStyle+Part.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D531D96F02F00273936 /* StringStyle+Part.swift */; }; - ABA75DDD1D99E10400B64705 /* XMLBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D6A1D96F02F00273936 /* XMLBuilder.swift */; }; - ABA75DDE1D99E10400B64705 /* NSAttributedString+BonMot.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D571D96F02F00273936 /* NSAttributedString+BonMot.swift */; }; - ABA75DDF1D99E10400B64705 /* Compatibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D551D96F02F00273936 /* Compatibility.swift */; }; - ABA75DE41D99E10400B64705 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABCBFD9F1D96E7F300FAD37A /* UIKit.framework */; }; - ABA75E0A1D99E43300B64705 /* Tracking.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABA75E091D99E43300B64705 /* Tracking.swift */; }; - ABA75E0B1D99E45C00B64705 /* Tracking.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABA75E091D99E43300B64705 /* Tracking.swift */; }; - ABA75E0D1D99E45E00B64705 /* Tracking.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABA75E091D99E43300B64705 /* Tracking.swift */; }; - ABA75E0E1D99F9D500B64705 /* Tracking.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABA75E091D99E43300B64705 /* Tracking.swift */; }; - ABC7774E1DC29F3000815FB9 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABC7774D1DC29F3000815FB9 /* AppDelegate.swift */; }; - ABC777661DC29F7700815FB9 /* CatalogViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABC7775D1DC29F7700815FB9 /* CatalogViewController.swift */; }; - ABC777671DC29F7700815FB9 /* DemoStrings.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABC7775E1DC29F7700815FB9 /* DemoStrings.swift */; }; - ABC777691DC29F7700815FB9 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = ABC777611DC29F7700815FB9 /* InfoPlist.strings */; }; - ABC7776C1DC29F7700815FB9 /* StyleViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABC777651DC29F7700815FB9 /* StyleViewController.swift */; }; - ABC7776F1DC2A02B00815FB9 /* Launch Screen.xib in Resources */ = {isa = PBXBuildFile; fileRef = ABC7776D1DC2A02B00815FB9 /* Launch Screen.xib */; }; - ABC777701DC2A02B00815FB9 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = ABC7776E1DC2A02B00815FB9 /* Main.storyboard */; }; - ABC777711DC2A07400815FB9 /* BonMot.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABCBFD571D96E61000FAD37A /* BonMot.framework */; }; - ABC777731DC2A0AB00815FB9 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABC777721DC2A0AB00815FB9 /* UIKit.framework */; }; - ABC777741DC2A12600815FB9 /* Compatibility+Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3DA41D96F06800273936 /* Compatibility+Tests.swift */; }; - ABC777761DC2A16E00815FB9 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AB9C18D51D9975EE00A54787 /* Images.xcassets */; }; - ABCBFD601D96E61100FAD37A /* BonMot.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABCBFD571D96E61000FAD37A /* BonMot.framework */; }; - ABCBFDA01D96E7F300FAD37A /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABCBFD9F1D96E7F300FAD37A /* UIKit.framework */; }; - ABCD3D6B1D96F02F00273936 /* StringStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D521D96F02F00273936 /* StringStyle.swift */; }; - ABCD3D6C1D96F02F00273936 /* StringStyle+Part.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D531D96F02F00273936 /* StringStyle+Part.swift */; }; - ABCD3D6E1D96F02F00273936 /* Compatibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D551D96F02F00273936 /* Compatibility.swift */; }; - ABCD3D6F1D96F02F00273936 /* FontFeatures.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D561D96F02F00273936 /* FontFeatures.swift */; }; - ABCD3D701D96F02F00273936 /* NSAttributedString+BonMot.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D571D96F02F00273936 /* NSAttributedString+BonMot.swift */; }; - ABCD3D711D96F02F00273936 /* Platform.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D581D96F02F00273936 /* Platform.swift */; }; - ABCD3D731D96F02F00273936 /* Special.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D5B1D96F02F00273936 /* Special.swift */; }; - ABCD3D761D96F02F00273936 /* NamedStyles.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D5E1D96F02F00273936 /* NamedStyles.swift */; }; - ABCD3D771D96F02F00273936 /* AdaptableTextContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D601D96F02F00273936 /* AdaptableTextContainer.swift */; }; - ABCD3D791D96F02F00273936 /* AdaptiveStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D621D96F02F00273936 /* AdaptiveStyle.swift */; }; - ABCD3D7A1D96F02F00273936 /* AdaptiveStyleTransformation.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D631D96F02F00273936 /* AdaptiveStyleTransformation.swift */; }; - ABCD3D7C1D96F02F00273936 /* NSAttributedString+Adaptive.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D651D96F02F00273936 /* NSAttributedString+Adaptive.swift */; }; - ABCD3D7D1D96F02F00273936 /* StyleableUIElement.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D661D96F02F00273936 /* StyleableUIElement.swift */; }; - ABCD3D7F1D96F02F00273936 /* UIKit+AdaptableTextContainerSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D681D96F02F00273936 /* UIKit+AdaptableTextContainerSupport.swift */; }; - ABCD3D801D96F02F00273936 /* UIKit+Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D691D96F02F00273936 /* UIKit+Helpers.swift */; }; - ABCD3D811D96F02F00273936 /* XMLBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D6A1D96F02F00273936 /* XMLBuilder.swift */; }; - ABCD3DB01D96F06800273936 /* AdaptiveStyleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3DA11D96F06800273936 /* AdaptiveStyleTests.swift */; }; - ABCD3DB11D96F06800273936 /* AssertHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3DA21D96F06800273936 /* AssertHelpers.swift */; }; - ABCD3DB21D96F06800273936 /* AttributedStringStyleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3DA31D96F06800273936 /* AttributedStringStyleTests.swift */; }; - ABCD3DB31D96F06800273936 /* Compatibility+Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3DA41D96F06800273936 /* Compatibility+Tests.swift */; }; - ABCD3DB41D96F06800273936 /* Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3DA51D96F06800273936 /* Helpers.swift */; }; - ABCD3DB51D96F06800273936 /* ComposableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3DA61D96F06800273936 /* ComposableTests.swift */; }; - ABCD3DB61D96F06800273936 /* NSAttributedStringDebugTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3DA71D96F06800273936 /* NSAttributedStringDebugTests.swift */; }; - ABCD3DBA1D96F06800273936 /* BONFontBehaviorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3DAC1D96F06800273936 /* BONFontBehaviorTests.swift */; }; - ABCD3DBB1D96F06800273936 /* UIKitBehaviorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3DAD1D96F06800273936 /* UIKitBehaviorTests.swift */; }; - ABCD3DBC1D96F06800273936 /* UIKitBonMotTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3DAE1D96F06800273936 /* UIKitBonMotTests.swift */; }; - ABCD3DBD1D96F06800273936 /* XMLTagStyleBuilderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3DAF1D96F06800273936 /* XMLTagStyleBuilderTests.swift */; }; - ABCD3DCE1D96F6A500273936 /* UIKit+AdaptableTextContainerSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D681D96F02F00273936 /* UIKit+AdaptableTextContainerSupport.swift */; }; - ABCD3DD11D96F6A500273936 /* Platform.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D581D96F02F00273936 /* Platform.swift */; }; - ABCD3DD31D96F6A500273936 /* StyleableUIElement.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D661D96F02F00273936 /* StyleableUIElement.swift */; }; - ABCD3DD41D96F6A500273936 /* AdaptableTextContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D601D96F02F00273936 /* AdaptableTextContainer.swift */; }; - ABCD3DD51D96F6A500273936 /* StringStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D521D96F02F00273936 /* StringStyle.swift */; }; - ABCD3DD71D96F6A500273936 /* Special.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D5B1D96F02F00273936 /* Special.swift */; }; - ABCD3DD81D96F6A500273936 /* NamedStyles.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D5E1D96F02F00273936 /* NamedStyles.swift */; }; - ABCD3DDA1D96F6A500273936 /* StringStyle+Part.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D531D96F02F00273936 /* StringStyle+Part.swift */; }; - ABCD3DDB1D96F6A500273936 /* UIKit+Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D691D96F02F00273936 /* UIKit+Helpers.swift */; }; - ABCD3DDC1D96F6A500273936 /* XMLBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D6A1D96F02F00273936 /* XMLBuilder.swift */; }; - ABCD3DDD1D96F6A500273936 /* NSAttributedString+BonMot.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D571D96F02F00273936 /* NSAttributedString+BonMot.swift */; }; - ABCD3DDE1D96F6A500273936 /* Compatibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D551D96F02F00273936 /* Compatibility.swift */; }; - ABCD3DE21D96F6A500273936 /* FontFeatures.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D561D96F02F00273936 /* FontFeatures.swift */; }; - ABCD3DE41D96F6A500273936 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABCBFD9F1D96E7F300FAD37A /* UIKit.framework */; }; - ABCD3DF21D96F6E200273936 /* Compatibility+Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3DA41D96F06800273936 /* Compatibility+Tests.swift */; }; - ABCD3DF31D96F6E200273936 /* UIKitBehaviorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3DAD1D96F06800273936 /* UIKitBehaviorTests.swift */; }; - ABCD3DF41D96F6E200273936 /* AdaptiveStyleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3DA11D96F06800273936 /* AdaptiveStyleTests.swift */; }; - ABCD3DF51D96F6E200273936 /* XMLTagStyleBuilderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3DAF1D96F06800273936 /* XMLTagStyleBuilderTests.swift */; }; - ABCD3DF61D96F6E200273936 /* NSAttributedStringDebugTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3DA71D96F06800273936 /* NSAttributedStringDebugTests.swift */; }; - ABCD3DF71D96F6E200273936 /* AssertHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3DA21D96F06800273936 /* AssertHelpers.swift */; }; - ABCD3DF81D96F6E200273936 /* BONFontBehaviorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3DAC1D96F06800273936 /* BONFontBehaviorTests.swift */; }; - ABCD3DF91D96F6E200273936 /* ComposableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3DA61D96F06800273936 /* ComposableTests.swift */; }; - ABCD3DFA1D96F6E200273936 /* UIKitBonMotTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3DAE1D96F06800273936 /* UIKitBonMotTests.swift */; }; - ABCD3DFB1D96F6E200273936 /* Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3DA51D96F06800273936 /* Helpers.swift */; }; - ABCD3DFC1D96F6E200273936 /* AttributedStringStyleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3DA31D96F06800273936 /* AttributedStringStyleTests.swift */; }; - ABCD3DFE1D96F6E200273936 /* BonMot.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABCBFD571D96E61000FAD37A /* BonMot.framework */; }; - ABCD3E0D1D980E4900273936 /* Platform.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D581D96F02F00273936 /* Platform.swift */; }; - ABCD3E111D980E4900273936 /* StringStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D521D96F02F00273936 /* StringStyle.swift */; }; - ABCD3E131D980E4900273936 /* Special.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D5B1D96F02F00273936 /* Special.swift */; }; - ABCD3E141D980E4900273936 /* NamedStyles.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D5E1D96F02F00273936 /* NamedStyles.swift */; }; - ABCD3E161D980E4900273936 /* StringStyle+Part.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D531D96F02F00273936 /* StringStyle+Part.swift */; }; - ABCD3E181D980E4900273936 /* XMLBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D6A1D96F02F00273936 /* XMLBuilder.swift */; }; - ABCD3E191D980E4900273936 /* NSAttributedString+BonMot.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D571D96F02F00273936 /* NSAttributedString+BonMot.swift */; }; - ABCD3E1A1D980E4900273936 /* Compatibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D551D96F02F00273936 /* Compatibility.swift */; }; - ABCD3E1D1D980E4900273936 /* FontFeatures.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3D561D96F02F00273936 /* FontFeatures.swift */; }; - ABCD3E2B1D980E5500273936 /* Compatibility+Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3DA41D96F06800273936 /* Compatibility+Tests.swift */; }; - ABCD3E2E1D980E5500273936 /* XMLTagStyleBuilderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3DAF1D96F06800273936 /* XMLTagStyleBuilderTests.swift */; }; - ABCD3E2F1D980E5500273936 /* NSAttributedStringDebugTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3DA71D96F06800273936 /* NSAttributedStringDebugTests.swift */; }; - ABCD3E301D980E5500273936 /* AssertHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3DA21D96F06800273936 /* AssertHelpers.swift */; }; - ABCD3E321D980E5500273936 /* ComposableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3DA61D96F06800273936 /* ComposableTests.swift */; }; - ABCD3E341D980E5500273936 /* Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3DA51D96F06800273936 /* Helpers.swift */; }; - ABCD3E351D980E5500273936 /* AttributedStringStyleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABCD3DA31D96F06800273936 /* AttributedStringStyleTests.swift */; }; - ABCD3E371D980E5500273936 /* BonMot.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABCBFD571D96E61000FAD37A /* BonMot.framework */; }; - CD3EEE681DC92CF6002C41BB /* Ligatures.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD3EEE661DC92CF0002C41BB /* Ligatures.swift */; }; - CD3EEE691DC92CF6002C41BB /* Ligatures.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD3EEE661DC92CF0002C41BB /* Ligatures.swift */; }; - CD3EEE6A1DC92CF7002C41BB /* Ligatures.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD3EEE661DC92CF0002C41BB /* Ligatures.swift */; }; - CD3EEE6B1DC92CF8002C41BB /* Ligatures.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD3EEE661DC92CF0002C41BB /* Ligatures.swift */; }; - CD3EEE6E1DCA68ED002C41BB /* FontInspector.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD3EEE6C1DCA68E1002C41BB /* FontInspector.swift */; }; - CD3EEE6F1DCA68ED002C41BB /* FontInspector.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD3EEE6C1DCA68E1002C41BB /* FontInspector.swift */; }; - CD3EEE701DCA68EF002C41BB /* FontInspector.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD3EEE6C1DCA68E1002C41BB /* FontInspector.swift */; }; - CD3EEE711DCA68FB002C41BB /* FontInspector.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD3EEE6C1DCA68E1002C41BB /* FontInspector.swift */; }; - CD3EEE731DCA6BCB002C41BB /* FontInspectorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD3EEE721DCA6BCB002C41BB /* FontInspectorTests.swift */; }; - CD3EEE741DCA6BCB002C41BB /* FontInspectorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD3EEE721DCA6BCB002C41BB /* FontInspectorTests.swift */; }; - CD3EEE751DCA6BCB002C41BB /* FontInspectorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD3EEE721DCA6BCB002C41BB /* FontInspectorTests.swift */; }; - CD6BE30A1E8590F900FB308F /* Transform.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD6BE3081E8590E900FB308F /* Transform.swift */; }; - CD6BE30B1E8590FA00FB308F /* Transform.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD6BE3081E8590E900FB308F /* Transform.swift */; }; - CD6BE30C1E8590FA00FB308F /* Transform.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD6BE3081E8590E900FB308F /* Transform.swift */; }; - CD6BE30D1E8590FB00FB308F /* Transform.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD6BE3081E8590E900FB308F /* Transform.swift */; }; - CD6BE30F1E85924800FB308F /* TransformTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD6BE30E1E85924800FB308F /* TransformTests.swift */; }; - CD6BE3101E85924800FB308F /* TransformTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD6BE30E1E85924800FB308F /* TransformTests.swift */; }; - CD6BE3111E85924800FB308F /* TransformTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD6BE30E1E85924800FB308F /* TransformTests.swift */; }; - CD70C54E1DCD22A7003C063A /* StylisticAlternates.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD70C54C1DCD22A1003C063A /* StylisticAlternates.swift */; }; - CD70C54F1DCD22A8003C063A /* StylisticAlternates.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD70C54C1DCD22A1003C063A /* StylisticAlternates.swift */; }; - CD70C5501DCD22A8003C063A /* StylisticAlternates.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD70C54C1DCD22A1003C063A /* StylisticAlternates.swift */; }; - CD70C5511DCD22A9003C063A /* StylisticAlternates.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD70C54C1DCD22A1003C063A /* StylisticAlternates.swift */; }; - CDB366BC20325AE1002C256E /* Emphasis.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDB366BB20325AE1002C256E /* Emphasis.swift */; }; - CDB366BD20325AE1002C256E /* Emphasis.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDB366BB20325AE1002C256E /* Emphasis.swift */; }; - CDB366C1203264DE002C256E /* Emphasis.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDB366BB20325AE1002C256E /* Emphasis.swift */; }; - CDB366C2203264DF002C256E /* Emphasis.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDB366BB20325AE1002C256E /* Emphasis.swift */; }; - CDB366C620326FCD002C256E /* EmphasisTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDB366C320326FC9002C256E /* EmphasisTests.swift */; }; - CDB366C720326FCE002C256E /* EmphasisTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDB366C320326FC9002C256E /* EmphasisTests.swift */; }; - CDB366C820326FCE002C256E /* EmphasisTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDB366C320326FC9002C256E /* EmphasisTests.swift */; }; - CDC0CE361F90730700E144F7 /* AccessTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDC0CE351F90730700E144F7 /* AccessTests.swift */; }; - CDC0CE371F90730700E144F7 /* AccessTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDC0CE351F90730700E144F7 /* AccessTests.swift */; }; - CDC0CE381F90730700E144F7 /* AccessTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDC0CE351F90730700E144F7 /* AccessTests.swift */; }; - CDC49D8D1F74AD8F0067FC86 /* AccessibilityHeadingLevel.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDC49D8C1F74AD8F0067FC86 /* AccessibilityHeadingLevel.swift */; }; - CDC49D8E1F74AD8F0067FC86 /* AccessibilityHeadingLevel.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDC49D8C1F74AD8F0067FC86 /* AccessibilityHeadingLevel.swift */; }; - CDC49D8F1F74AD8F0067FC86 /* AccessibilityHeadingLevel.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDC49D8C1F74AD8F0067FC86 /* AccessibilityHeadingLevel.swift */; }; - CDCF0F1F1DCE5B9B00727AAE /* ContextualAlternates.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDCF0F1E1DCE5B9B00727AAE /* ContextualAlternates.swift */; }; - CDCF0F201DCE5B9B00727AAE /* ContextualAlternates.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDCF0F1E1DCE5B9B00727AAE /* ContextualAlternates.swift */; }; - CDCF0F211DCE5B9B00727AAE /* ContextualAlternates.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDCF0F1E1DCE5B9B00727AAE /* ContextualAlternates.swift */; }; - CDCF0F221DCE5B9B00727AAE /* ContextualAlternates.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDCF0F1E1DCE5B9B00727AAE /* ContextualAlternates.swift */; }; - CDE292971E15D55600EA4A32 /* BonMot.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = ABCBFD571D96E61000FAD37A /* BonMot.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - CDEA84311D9EEC390099BD73 /* Image+Tinting.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDEA84301D9EEC390099BD73 /* Image+Tinting.swift */; }; - CDEA84321D9EEC390099BD73 /* Image+Tinting.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDEA84301D9EEC390099BD73 /* Image+Tinting.swift */; }; - CDEA84331D9EEC390099BD73 /* Image+Tinting.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDEA84301D9EEC390099BD73 /* Image+Tinting.swift */; }; - CDEA84341D9EEC390099BD73 /* Image+Tinting.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDEA84301D9EEC390099BD73 /* Image+Tinting.swift */; }; - CDEA84361D9EEC490099BD73 /* ImageTintingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDEA84351D9EEC490099BD73 /* ImageTintingTests.swift */; }; - CDEA84371D9EEC490099BD73 /* ImageTintingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDEA84351D9EEC490099BD73 /* ImageTintingTests.swift */; }; - CDEA84381D9EEC490099BD73 /* ImageTintingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDEA84351D9EEC490099BD73 /* ImageTintingTests.swift */; }; - CDF7E97F1D9C612800FF46BF /* MutableCopying.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDF7E97E1D9C612800FF46BF /* MutableCopying.swift */; }; - CDF7E9801D9C613100FF46BF /* MutableCopying.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDF7E97E1D9C612800FF46BF /* MutableCopying.swift */; }; - CDF7E9811D9C613400FF46BF /* MutableCopying.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDF7E97E1D9C612800FF46BF /* MutableCopying.swift */; }; - CDF7E9821D9C613500FF46BF /* MutableCopying.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDF7E97E1D9C612800FF46BF /* MutableCopying.swift */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - AB9C18CD1D9965A900A54787 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = ABCBFD2F1D96E41D00FAD37A /* Project object */; - proxyType = 1; - remoteGlobalIDString = ABCD3E071D980E4900273936; - remoteInfo = "BonMot-OSX"; - }; - AB9C18CF1D9965B100A54787 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = ABCBFD2F1D96E41D00FAD37A /* Project object */; - proxyType = 1; - remoteGlobalIDString = ABCD3DCB1D96F6A500273936; - remoteInfo = "BonMot-tvOS"; - }; - ABCBFD611D96E61100FAD37A /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = ABCBFD2F1D96E41D00FAD37A /* Project object */; - proxyType = 1; - remoteGlobalIDString = ABCBFD561D96E61000FAD37A; - remoteInfo = "BonMot-iOS"; - }; - CDE292981E15D55600EA4A32 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = ABCBFD2F1D96E41D00FAD37A /* Project object */; - proxyType = 1; - remoteGlobalIDString = ABCBFD561D96E61000FAD37A; - remoteInfo = "BonMot-iOS"; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXCopyFilesBuildPhase section */ - CDE2929A1E15D55600EA4A32 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - CDE292971E15D55600EA4A32 /* BonMot.framework in Embed Frameworks */, - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 1E7B10EB1DA41F9300C668A4 /* TextAlignmentConstraint.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TextAlignmentConstraint.swift; sourceTree = ""; }; - 1E902AB31DA6915F00BD154D /* TextAlignmentConstraintTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TextAlignmentConstraintTests.swift; sourceTree = ""; }; - 526C704D268BCC61002C0C71 /* EBGaramond12-Regular.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "EBGaramond12-Regular.otf"; sourceTree = ""; }; - 526C704E268BCC61002C0C71 /* rz-logo-black.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "rz-logo-black.png"; sourceTree = ""; }; - 526C704F268BCC61002C0C71 /* rz-logo-red.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "rz-logo-red.png"; sourceTree = ""; }; - 5B8FFE322326F79900372DC0 /* Package.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Package.swift; sourceTree = ""; }; - AB167C8F1D997A2C0084808D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AB30D4FE1D9C1EEC006ADC9D /* Composable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Composable.swift; sourceTree = ""; }; - AB30D50B1D9CB4FE006ADC9D /* Tab.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Tab.swift; sourceTree = ""; }; - AB30D51C1D9D95F5006ADC9D /* EmbeddedTransformation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = EmbeddedTransformation.swift; path = UIKit/EmbeddedTransformation.swift; sourceTree = ""; }; - AB560A051D9F692000100D15 /* AttributedStringTransformation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = AttributedStringTransformation.swift; path = UIKit/AttributedStringTransformation.swift; sourceTree = ""; }; - AB560A071DA0C14000100D15 /* Tab+Adaptive.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "Tab+Adaptive.swift"; path = "UIKit/Tab+Adaptive.swift"; sourceTree = ""; }; - AB560A091DA0C17800100D15 /* Tracking+Adaptive.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "Tracking+Adaptive.swift"; path = "UIKit/Tracking+Adaptive.swift"; sourceTree = ""; }; - AB9C18D11D9975CE00A54787 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AB9C18D51D9975EE00A54787 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; - ABA75DEA1D99E10400B64705 /* BonMot.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = BonMot.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - ABA75E091D99E43300B64705 /* Tracking.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Tracking.swift; sourceTree = ""; }; - ABC7774B1DC29F3000815FB9 /* Example-iOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Example-iOS.app"; sourceTree = BUILT_PRODUCTS_DIR; }; - ABC7774D1DC29F3000815FB9 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - ABC7775D1DC29F7700815FB9 /* CatalogViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CatalogViewController.swift; sourceTree = ""; }; - ABC7775E1DC29F7700815FB9 /* DemoStrings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DemoStrings.swift; sourceTree = ""; }; - ABC777601DC29F7700815FB9 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - ABC777621DC29F7700815FB9 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; - ABC777651DC29F7700815FB9 /* StyleViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StyleViewController.swift; sourceTree = ""; }; - ABC7776D1DC2A02B00815FB9 /* Launch Screen.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = "Launch Screen.xib"; sourceTree = ""; }; - ABC7776E1DC2A02B00815FB9 /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = ""; }; - ABC777721DC2A0AB00815FB9 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; - ABCBFD571D96E61000FAD37A /* BonMot.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = BonMot.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - ABCBFD5F1D96E61100FAD37A /* BonMot-iOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "BonMot-iOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; - ABCBFD9F1D96E7F300FAD37A /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; - ABCD3D521D96F02F00273936 /* StringStyle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StringStyle.swift; sourceTree = ""; }; - ABCD3D531D96F02F00273936 /* StringStyle+Part.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "StringStyle+Part.swift"; sourceTree = ""; }; - ABCD3D541D96F02F00273936 /* BonMot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BonMot.h; sourceTree = ""; }; - ABCD3D551D96F02F00273936 /* Compatibility.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Compatibility.swift; sourceTree = ""; }; - ABCD3D561D96F02F00273936 /* FontFeatures.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FontFeatures.swift; sourceTree = ""; }; - ABCD3D571D96F02F00273936 /* NSAttributedString+BonMot.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSAttributedString+BonMot.swift"; sourceTree = ""; }; - ABCD3D581D96F02F00273936 /* Platform.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Platform.swift; sourceTree = ""; }; - ABCD3D5B1D96F02F00273936 /* Special.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Special.swift; sourceTree = ""; }; - ABCD3D5E1D96F02F00273936 /* NamedStyles.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NamedStyles.swift; sourceTree = ""; }; - ABCD3D601D96F02F00273936 /* AdaptableTextContainer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AdaptableTextContainer.swift; sourceTree = ""; }; - ABCD3D621D96F02F00273936 /* AdaptiveStyle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = AdaptiveStyle.swift; path = UIKit/AdaptiveStyle.swift; sourceTree = ""; }; - ABCD3D631D96F02F00273936 /* AdaptiveStyleTransformation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = AdaptiveStyleTransformation.swift; path = UIKit/AdaptiveStyleTransformation.swift; sourceTree = ""; }; - ABCD3D651D96F02F00273936 /* NSAttributedString+Adaptive.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "NSAttributedString+Adaptive.swift"; path = "UIKit/NSAttributedString+Adaptive.swift"; sourceTree = ""; }; - ABCD3D661D96F02F00273936 /* StyleableUIElement.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StyleableUIElement.swift; sourceTree = ""; }; - ABCD3D681D96F02F00273936 /* UIKit+AdaptableTextContainerSupport.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIKit+AdaptableTextContainerSupport.swift"; sourceTree = ""; }; - ABCD3D691D96F02F00273936 /* UIKit+Helpers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIKit+Helpers.swift"; sourceTree = ""; }; - ABCD3D6A1D96F02F00273936 /* XMLBuilder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = XMLBuilder.swift; sourceTree = ""; }; - ABCD3DA11D96F06800273936 /* AdaptiveStyleTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AdaptiveStyleTests.swift; sourceTree = ""; }; - ABCD3DA21D96F06800273936 /* AssertHelpers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AssertHelpers.swift; sourceTree = ""; }; - ABCD3DA31D96F06800273936 /* AttributedStringStyleTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AttributedStringStyleTests.swift; sourceTree = ""; }; - ABCD3DA41D96F06800273936 /* Compatibility+Tests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Compatibility+Tests.swift"; sourceTree = ""; }; - ABCD3DA51D96F06800273936 /* Helpers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Helpers.swift; sourceTree = ""; }; - ABCD3DA61D96F06800273936 /* ComposableTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ComposableTests.swift; sourceTree = ""; }; - ABCD3DA71D96F06800273936 /* NSAttributedStringDebugTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSAttributedStringDebugTests.swift; sourceTree = ""; }; - ABCD3DAC1D96F06800273936 /* BONFontBehaviorTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BONFontBehaviorTests.swift; sourceTree = ""; }; - ABCD3DAD1D96F06800273936 /* UIKitBehaviorTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIKitBehaviorTests.swift; sourceTree = ""; }; - ABCD3DAE1D96F06800273936 /* UIKitBonMotTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIKitBonMotTests.swift; sourceTree = ""; }; - ABCD3DAF1D96F06800273936 /* XMLTagStyleBuilderTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = XMLTagStyleBuilderTests.swift; sourceTree = ""; }; - ABCD3DC51D96F56400273936 /* BonMot.podspec */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = BonMot.podspec; sourceTree = ""; }; - ABCD3DC61D96F56400273936 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; - ABCD3DC71D96F56400273936 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - ABCD3DEC1D96F6A500273936 /* BonMot.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = BonMot.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - ABCD3E051D96F6E200273936 /* BonMot-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "BonMot-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; - ABCD3E251D980E4900273936 /* BonMot.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = BonMot.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - ABCD3E3E1D980E5500273936 /* BonMot-OSXTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "BonMot-OSXTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; - ABCD3E401D99558000273936 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/System/Library/Frameworks/AppKit.framework; sourceTree = DEVELOPER_DIR; }; - CD3EEE661DC92CF0002C41BB /* Ligatures.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Ligatures.swift; sourceTree = ""; }; - CD3EEE6C1DCA68E1002C41BB /* FontInspector.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FontInspector.swift; sourceTree = ""; }; - CD3EEE721DCA6BCB002C41BB /* FontInspectorTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FontInspectorTests.swift; sourceTree = ""; }; - CD6BE3081E8590E900FB308F /* Transform.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Transform.swift; sourceTree = ""; }; - CD6BE30E1E85924800FB308F /* TransformTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TransformTests.swift; sourceTree = ""; }; - CD70C54C1DCD22A1003C063A /* StylisticAlternates.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StylisticAlternates.swift; sourceTree = ""; }; - CDB366BB20325AE1002C256E /* Emphasis.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Emphasis.swift; sourceTree = ""; }; - CDB366C320326FC9002C256E /* EmphasisTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmphasisTests.swift; sourceTree = ""; }; - CDC0CE351F90730700E144F7 /* AccessTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccessTests.swift; sourceTree = ""; }; - CDC49D8C1F74AD8F0067FC86 /* AccessibilityHeadingLevel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccessibilityHeadingLevel.swift; sourceTree = ""; }; - CDCF0F1E1DCE5B9B00727AAE /* ContextualAlternates.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContextualAlternates.swift; sourceTree = ""; }; - CDEA84301D9EEC390099BD73 /* Image+Tinting.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Image+Tinting.swift"; sourceTree = ""; }; - CDEA84351D9EEC490099BD73 /* ImageTintingTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageTintingTests.swift; sourceTree = ""; }; - CDF7E97E1D9C612800FF46BF /* MutableCopying.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MutableCopying.swift; sourceTree = ""; }; - D915E01024944361009F455B /* Example-iOS.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "Example-iOS.entitlements"; sourceTree = ""; }; - D9C5521023D24796001D7504 /* BonMot-iOSTests.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; name = "BonMot-iOSTests.xctestplan"; path = "Tests/BonMot-iOSTests.xctestplan"; sourceTree = ""; }; - D9C5521123D24872001D7504 /* BonMot-OSXTests.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; name = "BonMot-OSXTests.xctestplan"; path = "Tests/BonMot-OSXTests.xctestplan"; sourceTree = ""; }; - D9C5521223D248A0001D7504 /* BonMot-tvOSTests.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; name = "BonMot-tvOSTests.xctestplan"; path = "Tests/BonMot-tvOSTests.xctestplan"; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - ABA75DE31D99E10400B64705 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ABA75DE41D99E10400B64705 /* UIKit.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - ABC777481DC29F3000815FB9 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ABC777731DC2A0AB00815FB9 /* UIKit.framework in Frameworks */, - ABC777711DC2A07400815FB9 /* BonMot.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - ABCBFD531D96E61000FAD37A /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ABCBFDA01D96E7F300FAD37A /* UIKit.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - ABCBFD5C1D96E61100FAD37A /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ABCBFD601D96E61100FAD37A /* BonMot.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - ABCD3DE31D96F6A500273936 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ABCD3DE41D96F6A500273936 /* UIKit.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - ABCD3DFD1D96F6E200273936 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ABCD3DFE1D96F6E200273936 /* BonMot.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - ABCD3E1E1D980E4900273936 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - ABCD3E361D980E5500273936 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ABCD3E371D980E5500273936 /* BonMot.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 526C704C268BCC61002C0C71 /* Resources */ = { - isa = PBXGroup; - children = ( - 526C704D268BCC61002C0C71 /* EBGaramond12-Regular.otf */, - 526C704E268BCC61002C0C71 /* rz-logo-black.png */, - 526C704F268BCC61002C0C71 /* rz-logo-red.png */, - ); - name = Resources; - path = Tests/Resources; - sourceTree = ""; - }; - AB30D5021D9CB2D4006ADC9D /* Style */ = { - isa = PBXGroup; - children = ( - ABCD3D521D96F02F00273936 /* StringStyle.swift */, - ABCD3D531D96F02F00273936 /* StringStyle+Part.swift */, - ABCD3D5E1D96F02F00273936 /* NamedStyles.swift */, - ABCD3D561D96F02F00273936 /* FontFeatures.swift */, - CDB366BB20325AE1002C256E /* Emphasis.swift */, - CDC49D8C1F74AD8F0067FC86 /* AccessibilityHeadingLevel.swift */, - ABA75E091D99E43300B64705 /* Tracking.swift */, - CD3EEE661DC92CF0002C41BB /* Ligatures.swift */, - CD70C54C1DCD22A1003C063A /* StylisticAlternates.swift */, - CDCF0F1E1DCE5B9B00727AAE /* ContextualAlternates.swift */, - CD6BE3081E8590E900FB308F /* Transform.swift */, - ); - name = Style; - sourceTree = ""; - }; - AB30D5031D9CB2F2006ADC9D /* Composable */ = { - isa = PBXGroup; - children = ( - AB30D4FE1D9C1EEC006ADC9D /* Composable.swift */, - ABCD3D6A1D96F02F00273936 /* XMLBuilder.swift */, - ABCD3D5B1D96F02F00273936 /* Special.swift */, - AB30D50B1D9CB4FE006ADC9D /* Tab.swift */, - ); - name = Composable; - sourceTree = ""; - }; - AB30D5041D9CB33B006ADC9D /* Helpers */ = { - isa = PBXGroup; - children = ( - ABCD3D581D96F02F00273936 /* Platform.swift */, - ABCD3D551D96F02F00273936 /* Compatibility.swift */, - ABCD3D571D96F02F00273936 /* NSAttributedString+BonMot.swift */, - CDF7E97E1D9C612800FF46BF /* MutableCopying.swift */, - CDEA84301D9EEC390099BD73 /* Image+Tinting.swift */, - CD3EEE6C1DCA68E1002C41BB /* FontInspector.swift */, - ); - name = Helpers; - sourceTree = ""; - }; - AB30D5051D9CB3D2006ADC9D /* Adaptive */ = { - isa = PBXGroup; - children = ( - ABCD3D651D96F02F00273936 /* NSAttributedString+Adaptive.swift */, - ABCD3D631D96F02F00273936 /* AdaptiveStyleTransformation.swift */, - AB560A051D9F692000100D15 /* AttributedStringTransformation.swift */, - AB30D51C1D9D95F5006ADC9D /* EmbeddedTransformation.swift */, - ABCD3D621D96F02F00273936 /* AdaptiveStyle.swift */, - AB560A071DA0C14000100D15 /* Tab+Adaptive.swift */, - AB560A091DA0C17800100D15 /* Tracking+Adaptive.swift */, - ); - name = Adaptive; - sourceTree = ""; - }; - ABC7774C1DC29F3000815FB9 /* Example-iOS */ = { - isa = PBXGroup; - children = ( - D915E01024944361009F455B /* Example-iOS.entitlements */, - ABC7775E1DC29F7700815FB9 /* DemoStrings.swift */, - ABC777651DC29F7700815FB9 /* StyleViewController.swift */, - ABC7775D1DC29F7700815FB9 /* CatalogViewController.swift */, - ABC7774D1DC29F3000815FB9 /* AppDelegate.swift */, - ABC7775F1DC29F7700815FB9 /* Resources */, - ); - path = "Example-iOS"; - sourceTree = ""; - }; - ABC7775F1DC29F7700815FB9 /* Resources */ = { - isa = PBXGroup; - children = ( - AB9C18D51D9975EE00A54787 /* Images.xcassets */, - ABC7776D1DC2A02B00815FB9 /* Launch Screen.xib */, - ABC7776E1DC2A02B00815FB9 /* Main.storyboard */, - ABC777601DC29F7700815FB9 /* Info.plist */, - ABC777611DC29F7700815FB9 /* InfoPlist.strings */, - ); - path = Resources; - sourceTree = ""; - }; - ABCBFD2E1D96E41D00FAD37A = { - isa = PBXGroup; - children = ( - D9C5521123D24872001D7504 /* BonMot-OSXTests.xctestplan */, - D9C5521023D24796001D7504 /* BonMot-iOSTests.xctestplan */, - D9C5521223D248A0001D7504 /* BonMot-tvOSTests.xctestplan */, - 5B8FFE322326F79900372DC0 /* Package.swift */, - ABCD3D511D96F02F00273936 /* Sources */, - ABCD3DA01D96F06800273936 /* Tests */, - 526C704C268BCC61002C0C71 /* Resources */, - ABCD3DC61D96F56400273936 /* README.md */, - ABCD3DC51D96F56400273936 /* BonMot.podspec */, - ABCD3DC71D96F56400273936 /* LICENSE */, - ABC7774C1DC29F3000815FB9 /* Example-iOS */, - ABCBFD391D96E41D00FAD37A /* Products */, - ABCBFD9E1D96E7F200FAD37A /* Frameworks */, - ); - sourceTree = ""; - }; - ABCBFD391D96E41D00FAD37A /* Products */ = { - isa = PBXGroup; - children = ( - ABCBFD571D96E61000FAD37A /* BonMot.framework */, - ABCBFD5F1D96E61100FAD37A /* BonMot-iOSTests.xctest */, - ABCD3DEC1D96F6A500273936 /* BonMot.framework */, - ABCD3E051D96F6E200273936 /* BonMot-tvOSTests.xctest */, - ABCD3E251D980E4900273936 /* BonMot.framework */, - ABCD3E3E1D980E5500273936 /* BonMot-OSXTests.xctest */, - ABA75DEA1D99E10400B64705 /* BonMot.framework */, - ABC7774B1DC29F3000815FB9 /* Example-iOS.app */, - ); - name = Products; - sourceTree = ""; - }; - ABCBFD9E1D96E7F200FAD37A /* Frameworks */ = { - isa = PBXGroup; - children = ( - ABC777721DC2A0AB00815FB9 /* UIKit.framework */, - ABCD3E401D99558000273936 /* AppKit.framework */, - ABCBFD9F1D96E7F300FAD37A /* UIKit.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - ABCD3D511D96F02F00273936 /* Sources */ = { - isa = PBXGroup; - children = ( - ABCD3D541D96F02F00273936 /* BonMot.h */, - AB30D5021D9CB2D4006ADC9D /* Style */, - AB30D5031D9CB2F2006ADC9D /* Composable */, - AB30D5051D9CB3D2006ADC9D /* Adaptive */, - AB30D5041D9CB33B006ADC9D /* Helpers */, - ABCD3D5F1D96F02F00273936 /* UIKit */, - AB9C18D11D9975CE00A54787 /* Info.plist */, - ); - path = Sources; - sourceTree = ""; - }; - ABCD3D5F1D96F02F00273936 /* UIKit */ = { - isa = PBXGroup; - children = ( - ABCD3D601D96F02F00273936 /* AdaptableTextContainer.swift */, - ABCD3D661D96F02F00273936 /* StyleableUIElement.swift */, - ABCD3D681D96F02F00273936 /* UIKit+AdaptableTextContainerSupport.swift */, - ABCD3D691D96F02F00273936 /* UIKit+Helpers.swift */, - 1E7B10EB1DA41F9300C668A4 /* TextAlignmentConstraint.swift */, - ); - path = UIKit; - sourceTree = ""; - }; - ABCD3DA01D96F06800273936 /* Tests */ = { - isa = PBXGroup; - children = ( - ABCD3DA11D96F06800273936 /* AdaptiveStyleTests.swift */, - ABCD3DA31D96F06800273936 /* AttributedStringStyleTests.swift */, - ABCD3DA61D96F06800273936 /* ComposableTests.swift */, - ABCD3DA71D96F06800273936 /* NSAttributedStringDebugTests.swift */, - ABCD3DAE1D96F06800273936 /* UIKitBonMotTests.swift */, - ABCD3DAF1D96F06800273936 /* XMLTagStyleBuilderTests.swift */, - ABCD3DA21D96F06800273936 /* AssertHelpers.swift */, - ABCD3DA41D96F06800273936 /* Compatibility+Tests.swift */, - ABCD3DA51D96F06800273936 /* Helpers.swift */, - ABCD3DAC1D96F06800273936 /* BONFontBehaviorTests.swift */, - ABCD3DAD1D96F06800273936 /* UIKitBehaviorTests.swift */, - CDEA84351D9EEC490099BD73 /* ImageTintingTests.swift */, - 1E902AB31DA6915F00BD154D /* TextAlignmentConstraintTests.swift */, - CDB366C320326FC9002C256E /* EmphasisTests.swift */, - CD3EEE721DCA6BCB002C41BB /* FontInspectorTests.swift */, - CD6BE30E1E85924800FB308F /* TransformTests.swift */, - CDC0CE351F90730700E144F7 /* AccessTests.swift */, - AB167C8F1D997A2C0084808D /* Info.plist */, - ); - path = Tests; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - ABA75DE51D99E10400B64705 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - ABCBFD541D96E61000FAD37A /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - ABCD3DE51D96F6A500273936 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - ABCD3E201D980E4900273936 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - ABA75DCC1D99E10400B64705 /* BonMot-watchOS */ = { - isa = PBXNativeTarget; - buildConfigurationList = ABA75DE71D99E10400B64705 /* Build configuration list for PBXNativeTarget "BonMot-watchOS" */; - buildPhases = ( - ABA75DCD1D99E10400B64705 /* Sources */, - CD4B2FD21D9B0B3D007CF808 /* SwiftLint */, - ABA75DE31D99E10400B64705 /* Frameworks */, - ABA75DE51D99E10400B64705 /* Headers */, - ABA75DE61D99E10400B64705 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "BonMot-watchOS"; - productName = "BonMot-iOS"; - productReference = ABA75DEA1D99E10400B64705 /* BonMot.framework */; - productType = "com.apple.product-type.framework"; - }; - ABC7774A1DC29F3000815FB9 /* Example-iOS */ = { - isa = PBXNativeTarget; - buildConfigurationList = ABC7775C1DC29F3000815FB9 /* Build configuration list for PBXNativeTarget "Example-iOS" */; - buildPhases = ( - ABC777471DC29F3000815FB9 /* Sources */, - ABC777481DC29F3000815FB9 /* Frameworks */, - ABC777491DC29F3000815FB9 /* Resources */, - CDE2929A1E15D55600EA4A32 /* Embed Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - CDE292991E15D55600EA4A32 /* PBXTargetDependency */, - ); - name = "Example-iOS"; - productName = "Example-iOS"; - productReference = ABC7774B1DC29F3000815FB9 /* Example-iOS.app */; - productType = "com.apple.product-type.application"; - }; - ABCBFD561D96E61000FAD37A /* BonMot-iOS */ = { - isa = PBXNativeTarget; - buildConfigurationList = ABCBFD681D96E61100FAD37A /* Build configuration list for PBXNativeTarget "BonMot-iOS" */; - buildPhases = ( - ABCBFD521D96E61000FAD37A /* Sources */, - CD4B2FCC1D9B0AB0007CF808 /* SwiftLint */, - ABCBFD531D96E61000FAD37A /* Frameworks */, - ABCBFD541D96E61000FAD37A /* Headers */, - ABCBFD551D96E61000FAD37A /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "BonMot-iOS"; - productName = "BonMot-iOS"; - productReference = ABCBFD571D96E61000FAD37A /* BonMot.framework */; - productType = "com.apple.product-type.framework"; - }; - ABCBFD5E1D96E61100FAD37A /* BonMot-iOSTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = ABCBFD6B1D96E61100FAD37A /* Build configuration list for PBXNativeTarget "BonMot-iOSTests" */; - buildPhases = ( - ABCBFD5B1D96E61100FAD37A /* Sources */, - CD4B2FCD1D9B0ADF007CF808 /* SwiftLint */, - ABCBFD5C1D96E61100FAD37A /* Frameworks */, - ABCBFD5D1D96E61100FAD37A /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ABCBFD621D96E61100FAD37A /* PBXTargetDependency */, - ); - name = "BonMot-iOSTests"; - productName = "BonMot-iOSTests"; - productReference = ABCBFD5F1D96E61100FAD37A /* BonMot-iOSTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - ABCD3DCB1D96F6A500273936 /* BonMot-tvOS */ = { - isa = PBXNativeTarget; - buildConfigurationList = ABCD3DE91D96F6A500273936 /* Build configuration list for PBXNativeTarget "BonMot-tvOS" */; - buildPhases = ( - ABCD3DCC1D96F6A500273936 /* Sources */, - CD4B2FCE1D9B0AF2007CF808 /* SwiftLint */, - ABCD3DE31D96F6A500273936 /* Frameworks */, - ABCD3DE51D96F6A500273936 /* Headers */, - ABCD3DE61D96F6A500273936 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "BonMot-tvOS"; - productName = "BonMot-iOS"; - productReference = ABCD3DEC1D96F6A500273936 /* BonMot.framework */; - productType = "com.apple.product-type.framework"; - }; - ABCD3DEE1D96F6E200273936 /* BonMot-tvOSTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = ABCD3E021D96F6E200273936 /* Build configuration list for PBXNativeTarget "BonMot-tvOSTests" */; - buildPhases = ( - ABCD3DF11D96F6E200273936 /* Sources */, - CD4B2FCF1D9B0B12007CF808 /* SwiftLint */, - ABCD3DFD1D96F6E200273936 /* Frameworks */, - ABCD3DFF1D96F6E200273936 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - AB9C18D01D9965B100A54787 /* PBXTargetDependency */, - ); - name = "BonMot-tvOSTests"; - productName = "BonMot-iOSTests"; - productReference = ABCD3E051D96F6E200273936 /* BonMot-tvOSTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - ABCD3E071D980E4900273936 /* BonMot-OSX */ = { - isa = PBXNativeTarget; - buildConfigurationList = ABCD3E221D980E4900273936 /* Build configuration list for PBXNativeTarget "BonMot-OSX" */; - buildPhases = ( - ABCD3E081D980E4900273936 /* Sources */, - CD4B2FD01D9B0B1F007CF808 /* SwiftLint */, - ABCD3E1E1D980E4900273936 /* Frameworks */, - ABCD3E201D980E4900273936 /* Headers */, - ABCD3E211D980E4900273936 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "BonMot-OSX"; - productName = "BonMot-iOS"; - productReference = ABCD3E251D980E4900273936 /* BonMot.framework */; - productType = "com.apple.product-type.framework"; - }; - ABCD3E271D980E5500273936 /* BonMot-OSXTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = ABCD3E3B1D980E5500273936 /* Build configuration list for PBXNativeTarget "BonMot-OSXTests" */; - buildPhases = ( - ABCD3E2A1D980E5500273936 /* Sources */, - CD4B2FD11D9B0B2E007CF808 /* SwiftLint */, - ABCD3E361D980E5500273936 /* Frameworks */, - ABCD3E381D980E5500273936 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - AB9C18CE1D9965A900A54787 /* PBXTargetDependency */, - ); - name = "BonMot-OSXTests"; - productName = "BonMot-iOSTests"; - productReference = ABCD3E3E1D980E5500273936 /* BonMot-OSXTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - ABCBFD2F1D96E41D00FAD37A /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 0800; - LastUpgradeCheck = 1250; - ORGANIZATIONNAME = Rightpoint; - TargetAttributes = { - AB8497DA1DA45B9C00FE3414 = { - CreatedOnToolsVersion = 8.0; - ProvisioningStyle = Automatic; - }; - ABC7774A1DC29F3000815FB9 = { - CreatedOnToolsVersion = 8.0; - LastSwiftMigration = 1020; - ProvisioningStyle = Automatic; - }; - ABCBFD561D96E61000FAD37A = { - CreatedOnToolsVersion = 8.0; - LastSwiftMigration = 1020; - }; - ABCBFD5E1D96E61100FAD37A = { - CreatedOnToolsVersion = 8.0; - LastSwiftMigration = 0900; - ProvisioningStyle = Automatic; - }; - ABCD3E071D980E4900273936 = { - LastSwiftMigration = 1020; - }; - ABCD3E271D980E5500273936 = { - LastSwiftMigration = 1020; - }; - }; - }; - buildConfigurationList = ABCBFD321D96E41D00FAD37A /* Build configuration list for PBXProject "BonMot" */; - compatibilityVersion = "Xcode 11.0"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = ABCBFD2E1D96E41D00FAD37A; - productRefGroup = ABCBFD391D96E41D00FAD37A /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - ABC7774A1DC29F3000815FB9 /* Example-iOS */, - ABCBFD561D96E61000FAD37A /* BonMot-iOS */, - ABCBFD5E1D96E61100FAD37A /* BonMot-iOSTests */, - ABCD3DCB1D96F6A500273936 /* BonMot-tvOS */, - ABCD3DEE1D96F6E200273936 /* BonMot-tvOSTests */, - ABCD3E071D980E4900273936 /* BonMot-OSX */, - ABCD3E271D980E5500273936 /* BonMot-OSXTests */, - ABA75DCC1D99E10400B64705 /* BonMot-watchOS */, - AB8497DA1DA45B9C00FE3414 /* AllTheThings */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - ABA75DE61D99E10400B64705 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - ABC777491DC29F3000815FB9 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ABC777691DC29F7700815FB9 /* InfoPlist.strings in Resources */, - 526C7059268BCC86002C0C71 /* EBGaramond12-Regular.otf in Resources */, - ABC777761DC2A16E00815FB9 /* Images.xcassets in Resources */, - ABC7776F1DC2A02B00815FB9 /* Launch Screen.xib in Resources */, - ABC777701DC2A02B00815FB9 /* Main.storyboard in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - ABCBFD551D96E61000FAD37A /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - ABCBFD5D1D96E61100FAD37A /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 526C7056268BCC61002C0C71 /* rz-logo-red.png in Resources */, - 526C7053268BCC61002C0C71 /* rz-logo-black.png in Resources */, - AB9C18D91D9975FD00A54787 /* Images.xcassets in Resources */, - 526C7050268BCC61002C0C71 /* EBGaramond12-Regular.otf in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - ABCD3DE61D96F6A500273936 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - ABCD3DFF1D96F6E200273936 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 526C7057268BCC61002C0C71 /* rz-logo-red.png in Resources */, - 526C7054268BCC61002C0C71 /* rz-logo-black.png in Resources */, - AB9C18DB1D9975FD00A54787 /* Images.xcassets in Resources */, - 526C7051268BCC61002C0C71 /* EBGaramond12-Regular.otf in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - ABCD3E211D980E4900273936 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - ABCD3E381D980E5500273936 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 526C7058268BCC61002C0C71 /* rz-logo-red.png in Resources */, - 526C7055268BCC61002C0C71 /* rz-logo-black.png in Resources */, - AB9C18DD1D9975FE00A54787 /* Images.xcassets in Resources */, - 526C7052268BCC61002C0C71 /* EBGaramond12-Regular.otf in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - ABBD124E1DA469BB0084FBCC /* Build and test macOS */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Build and test macOS"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "xcodebuild build-for-testing test-without-building -project BonMot.xcodeproj -scheme \"BonMot-OSX\" -sdk \"macosx\" -destination \"arch=x86_64\" CODE_SIGNING_REQUIRED=NO CODE_SIGN_IDENTITY=\n"; - }; - CD15C4071DBE660700B6FF7A /* Build and test iOS */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Build and test iOS"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "xcodebuild build-for-testing test-without-building -project BonMot.xcodeproj -scheme \"BonMot-iOS\" -sdk \"iphonesimulator\" -destination \"name=iPhone 6s\" CODE_SIGNING_REQUIRED=NO CODE_SIGN_IDENTITY=\n"; - }; - CD15C4081DBE660800B6FF7A /* Build and test tvOS */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Build and test tvOS"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "xcodebuild build-for-testing test-without-building -project BonMot.xcodeproj -scheme \"BonMot-tvOS\" -sdk \"appletvsimulator\" -destination \"name=Apple TV\" CODE_SIGNING_REQUIRED=NO CODE_SIGN_IDENTITY=\n"; - }; - CD15C4091DBE660A00B6FF7A /* Build watchOS */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Build watchOS"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "xcodebuild build -project BonMot.xcodeproj -scheme \"BonMot-watchOS\" -sdk \"watchsimulator\" -destination \"name=Apple Watch Series 4 - 44mm\" CODE_SIGNING_REQUIRED=NO CODE_SIGN_IDENTITY=\n"; - }; - CD4B2FCC1D9B0AB0007CF808 /* SwiftLint */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = SwiftLint; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "if [ -d /opt/homebrew/bin ]; then\n export PATH=\"$PATH:/opt/homebrew/bin\"\nfi\n\nif [ \"${CARTHAGE}\" == \"YES\" ]; then\n echo \"warning: Detected Carthage. Will not run SwiftLint\"\nelif which swiftlint >/dev/null; then\n swiftlint\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; - }; - CD4B2FCD1D9B0ADF007CF808 /* SwiftLint */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = SwiftLint; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "if [ -d /opt/homebrew/bin ]; then\n export PATH=\"$PATH:/opt/homebrew/bin\"\nfi\n\nif [ \"${CARTHAGE}\" == \"YES\" ]; then\n echo \"warning: Detected Carthage. Will not run SwiftLint\"\nelif which swiftlint >/dev/null; then\n swiftlint\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; - }; - CD4B2FCE1D9B0AF2007CF808 /* SwiftLint */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = SwiftLint; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "if [ -d /opt/homebrew/bin ]; then\n export PATH=\"$PATH:/opt/homebrew/bin\"\nfi\n\nif [ \"${CARTHAGE}\" == \"YES\" ]; then\n echo \"warning: Detected Carthage. Will not run SwiftLint\"\nelif which swiftlint >/dev/null; then\n swiftlint\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; - }; - CD4B2FCF1D9B0B12007CF808 /* SwiftLint */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = SwiftLint; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "if [ -d /opt/homebrew/bin ]; then\n export PATH=\"$PATH:/opt/homebrew/bin\"\nfi\n\nif [ \"${CARTHAGE}\" == \"YES\" ]; then\n echo \"warning: Detected Carthage. Will not run SwiftLint\"\nelif which swiftlint >/dev/null; then\n swiftlint\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; - }; - CD4B2FD01D9B0B1F007CF808 /* SwiftLint */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = SwiftLint; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "if [ -d /opt/homebrew/bin ]; then\n export PATH=\"$PATH:/opt/homebrew/bin\"\nfi\n\nif [ \"${CARTHAGE}\" == \"YES\" ]; then\n echo \"warning: Detected Carthage. Will not run SwiftLint\"\nelif which swiftlint >/dev/null; then\n swiftlint\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; - }; - CD4B2FD11D9B0B2E007CF808 /* SwiftLint */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = SwiftLint; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "if [ -d /opt/homebrew/bin ]; then\n export PATH=\"$PATH:/opt/homebrew/bin\"\nfi\n\nif [ \"${CARTHAGE}\" == \"YES\" ]; then\n echo \"warning: Detected Carthage. Will not run SwiftLint\"\nelif which swiftlint >/dev/null; then\n swiftlint\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; - }; - CD4B2FD21D9B0B3D007CF808 /* SwiftLint */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = SwiftLint; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "if [ -d /opt/homebrew/bin ]; then\n export PATH=\"$PATH:/opt/homebrew/bin\"\nfi\n\nif [ \"${CARTHAGE}\" == \"YES\" ]; then\n echo \"warning: Detected Carthage. Will not run SwiftLint\"\nelif which swiftlint >/dev/null; then\n swiftlint\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; - }; - CDC513361F36B1FA00EA1712 /* Build iOS example project */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Build iOS example project"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "xcodebuild build -project BonMot.xcodeproj -scheme \"Example-iOS\" -sdk \"iphonesimulator\" -destination \"name=iPhone 6s\" CODE_SIGNING_REQUIRED=NO CODE_SIGN_IDENTITY=\n"; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - ABA75DCD1D99E10400B64705 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ABA75DDF1D99E10400B64705 /* Compatibility.swift in Sources */, - AB30D5121D9D9439006ADC9D /* Composable.swift in Sources */, - ABA75E0D1D99E45E00B64705 /* Tracking.swift in Sources */, - CDC49D8F1F74AD8F0067FC86 /* AccessibilityHeadingLevel.swift in Sources */, - ABA75DD21D99E10400B64705 /* Platform.swift in Sources */, - AB30D50F1D9CB4FE006ADC9D /* Tab.swift in Sources */, - CD3EEE6B1DC92CF8002C41BB /* Ligatures.swift in Sources */, - ABA75DD61D99E10400B64705 /* StringStyle.swift in Sources */, - ABA75DD81D99E10400B64705 /* Special.swift in Sources */, - ABA75DD91D99E10400B64705 /* NamedStyles.swift in Sources */, - CDEA84341D9EEC390099BD73 /* Image+Tinting.swift in Sources */, - ABA75DDB1D99E10400B64705 /* StringStyle+Part.swift in Sources */, - CD6BE30D1E8590FB00FB308F /* Transform.swift in Sources */, - ABA75DDD1D99E10400B64705 /* XMLBuilder.swift in Sources */, - ABA75DDE1D99E10400B64705 /* NSAttributedString+BonMot.swift in Sources */, - CD3EEE711DCA68FB002C41BB /* FontInspector.swift in Sources */, - CDF7E9821D9C613500FF46BF /* MutableCopying.swift in Sources */, - CDCF0F221DCE5B9B00727AAE /* ContextualAlternates.swift in Sources */, - AB86628E1D9B060D00DEE3E3 /* FontFeatures.swift in Sources */, - CDB366C2203264DF002C256E /* Emphasis.swift in Sources */, - CD70C54E1DCD22A7003C063A /* StylisticAlternates.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - ABC777471DC29F3000815FB9 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ABC7776C1DC29F7700815FB9 /* StyleViewController.swift in Sources */, - ABC777671DC29F7700815FB9 /* DemoStrings.swift in Sources */, - ABC777661DC29F7700815FB9 /* CatalogViewController.swift in Sources */, - ABC7774E1DC29F3000815FB9 /* AppDelegate.swift in Sources */, - ABC777741DC2A12600815FB9 /* Compatibility+Tests.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - ABCBFD521D96E61000FAD37A /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ABCD3D6E1D96F02F00273936 /* Compatibility.swift in Sources */, - ABCD3D7A1D96F02F00273936 /* AdaptiveStyleTransformation.swift in Sources */, - CDB366BC20325AE1002C256E /* Emphasis.swift in Sources */, - ABCD3D7F1D96F02F00273936 /* UIKit+AdaptableTextContainerSupport.swift in Sources */, - AB30D4FF1D9C1EEC006ADC9D /* Composable.swift in Sources */, - ABCD3D791D96F02F00273936 /* AdaptiveStyle.swift in Sources */, - CD3EEE6E1DCA68ED002C41BB /* FontInspector.swift in Sources */, - ABCD3D711D96F02F00273936 /* Platform.swift in Sources */, - CDF7E97F1D9C612800FF46BF /* MutableCopying.swift in Sources */, - AB560A0A1DA0C17800100D15 /* Tracking+Adaptive.swift in Sources */, - ABCD3D7D1D96F02F00273936 /* StyleableUIElement.swift in Sources */, - ABCD3D771D96F02F00273936 /* AdaptableTextContainer.swift in Sources */, - CDC49D8D1F74AD8F0067FC86 /* AccessibilityHeadingLevel.swift in Sources */, - ABCD3D6B1D96F02F00273936 /* StringStyle.swift in Sources */, - CD70C5511DCD22A9003C063A /* StylisticAlternates.swift in Sources */, - ABCD3D731D96F02F00273936 /* Special.swift in Sources */, - ABCD3D761D96F02F00273936 /* NamedStyles.swift in Sources */, - AB560A081DA0C14000100D15 /* Tab+Adaptive.swift in Sources */, - CDCF0F1F1DCE5B9B00727AAE /* ContextualAlternates.swift in Sources */, - ABA75E0A1D99E43300B64705 /* Tracking.swift in Sources */, - ABCD3D6C1D96F02F00273936 /* StringStyle+Part.swift in Sources */, - ABCD3D801D96F02F00273936 /* UIKit+Helpers.swift in Sources */, - CD3EEE681DC92CF6002C41BB /* Ligatures.swift in Sources */, - ABCD3D811D96F02F00273936 /* XMLBuilder.swift in Sources */, - ABCD3D701D96F02F00273936 /* NSAttributedString+BonMot.swift in Sources */, - AB560A061D9F692000100D15 /* AttributedStringTransformation.swift in Sources */, - CD6BE30A1E8590F900FB308F /* Transform.swift in Sources */, - AB30D51D1D9D95F5006ADC9D /* EmbeddedTransformation.swift in Sources */, - ABCD3D7C1D96F02F00273936 /* NSAttributedString+Adaptive.swift in Sources */, - ABCD3D6F1D96F02F00273936 /* FontFeatures.swift in Sources */, - AB30D50C1D9CB4FE006ADC9D /* Tab.swift in Sources */, - CDEA84311D9EEC390099BD73 /* Image+Tinting.swift in Sources */, - 1E7B10EC1DA41F9300C668A4 /* TextAlignmentConstraint.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - ABCBFD5B1D96E61100FAD37A /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ABCD3DB31D96F06800273936 /* Compatibility+Tests.swift in Sources */, - CDC0CE361F90730700E144F7 /* AccessTests.swift in Sources */, - ABCD3DBB1D96F06800273936 /* UIKitBehaviorTests.swift in Sources */, - CD3EEE731DCA6BCB002C41BB /* FontInspectorTests.swift in Sources */, - CDB366C620326FCD002C256E /* EmphasisTests.swift in Sources */, - CD6BE30F1E85924800FB308F /* TransformTests.swift in Sources */, - ABCD3DB01D96F06800273936 /* AdaptiveStyleTests.swift in Sources */, - ABCD3DBD1D96F06800273936 /* XMLTagStyleBuilderTests.swift in Sources */, - ABCD3DB61D96F06800273936 /* NSAttributedStringDebugTests.swift in Sources */, - ABCD3DB11D96F06800273936 /* AssertHelpers.swift in Sources */, - 1E902AB41DA6915F00BD154D /* TextAlignmentConstraintTests.swift in Sources */, - ABCD3DBA1D96F06800273936 /* BONFontBehaviorTests.swift in Sources */, - ABCD3DB51D96F06800273936 /* ComposableTests.swift in Sources */, - ABCD3DBC1D96F06800273936 /* UIKitBonMotTests.swift in Sources */, - CDEA84361D9EEC490099BD73 /* ImageTintingTests.swift in Sources */, - ABCD3DB41D96F06800273936 /* Helpers.swift in Sources */, - ABCD3DB21D96F06800273936 /* AttributedStringStyleTests.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - ABCD3DCC1D96F6A500273936 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ABCD3DDE1D96F6A500273936 /* Compatibility.swift in Sources */, - ABCD3DCE1D96F6A500273936 /* UIKit+AdaptableTextContainerSupport.swift in Sources */, - CDB366BD20325AE1002C256E /* Emphasis.swift in Sources */, - ABCD3DD11D96F6A500273936 /* Platform.swift in Sources */, - CDF7E9801D9C613100FF46BF /* MutableCopying.swift in Sources */, - ABCD3DD31D96F6A500273936 /* StyleableUIElement.swift in Sources */, - CD3EEE6F1DCA68ED002C41BB /* FontInspector.swift in Sources */, - AB30D5101D9D9438006ADC9D /* Composable.swift in Sources */, - ABCD3DD41D96F6A500273936 /* AdaptableTextContainer.swift in Sources */, - AB8497B61DA16DAE00FE3414 /* Tracking+Adaptive.swift in Sources */, - ABCD3DD51D96F6A500273936 /* StringStyle.swift in Sources */, - ABCD3DD71D96F6A500273936 /* Special.swift in Sources */, - CDC49D8E1F74AD8F0067FC86 /* AccessibilityHeadingLevel.swift in Sources */, - AB8497B31DA16DAE00FE3414 /* EmbeddedTransformation.swift in Sources */, - CD70C5501DCD22A8003C063A /* StylisticAlternates.swift in Sources */, - AB8497B21DA16DAE00FE3414 /* AttributedStringTransformation.swift in Sources */, - ABCD3DD81D96F6A500273936 /* NamedStyles.swift in Sources */, - AB8497B11DA16DAE00FE3414 /* AdaptiveStyleTransformation.swift in Sources */, - CDCF0F201DCE5B9B00727AAE /* ContextualAlternates.swift in Sources */, - AB8497B51DA16DAE00FE3414 /* Tab+Adaptive.swift in Sources */, - ABA75E0B1D99E45C00B64705 /* Tracking.swift in Sources */, - ABCD3DDA1D96F6A500273936 /* StringStyle+Part.swift in Sources */, - CD3EEE691DC92CF6002C41BB /* Ligatures.swift in Sources */, - ABCD3DDB1D96F6A500273936 /* UIKit+Helpers.swift in Sources */, - ABCD3DDC1D96F6A500273936 /* XMLBuilder.swift in Sources */, - AB8497B01DA16DAE00FE3414 /* NSAttributedString+Adaptive.swift in Sources */, - CD6BE30B1E8590FA00FB308F /* Transform.swift in Sources */, - ABCD3DDD1D96F6A500273936 /* NSAttributedString+BonMot.swift in Sources */, - AB8497B41DA16DAE00FE3414 /* AdaptiveStyle.swift in Sources */, - AB30D50D1D9CB4FE006ADC9D /* Tab.swift in Sources */, - ABCD3DE21D96F6A500273936 /* FontFeatures.swift in Sources */, - CDEA84321D9EEC390099BD73 /* Image+Tinting.swift in Sources */, - 1E7B10ED1DA41F9300C668A4 /* TextAlignmentConstraint.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - ABCD3DF11D96F6E200273936 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ABCD3DF21D96F6E200273936 /* Compatibility+Tests.swift in Sources */, - CDC0CE371F90730700E144F7 /* AccessTests.swift in Sources */, - ABCD3DF31D96F6E200273936 /* UIKitBehaviorTests.swift in Sources */, - CD3EEE741DCA6BCB002C41BB /* FontInspectorTests.swift in Sources */, - CDB366C720326FCE002C256E /* EmphasisTests.swift in Sources */, - CD6BE3101E85924800FB308F /* TransformTests.swift in Sources */, - ABCD3DF41D96F6E200273936 /* AdaptiveStyleTests.swift in Sources */, - ABCD3DF51D96F6E200273936 /* XMLTagStyleBuilderTests.swift in Sources */, - ABCD3DF61D96F6E200273936 /* NSAttributedStringDebugTests.swift in Sources */, - ABCD3DF71D96F6E200273936 /* AssertHelpers.swift in Sources */, - 1E902AB51DA6915F00BD154D /* TextAlignmentConstraintTests.swift in Sources */, - ABCD3DF81D96F6E200273936 /* BONFontBehaviorTests.swift in Sources */, - ABCD3DF91D96F6E200273936 /* ComposableTests.swift in Sources */, - ABCD3DFA1D96F6E200273936 /* UIKitBonMotTests.swift in Sources */, - CDEA84371D9EEC490099BD73 /* ImageTintingTests.swift in Sources */, - ABCD3DFB1D96F6E200273936 /* Helpers.swift in Sources */, - ABCD3DFC1D96F6E200273936 /* AttributedStringStyleTests.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - ABCD3E081D980E4900273936 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ABCD3E1A1D980E4900273936 /* Compatibility.swift in Sources */, - AB30D5111D9D9438006ADC9D /* Composable.swift in Sources */, - ABA75E0E1D99F9D500B64705 /* Tracking.swift in Sources */, - CD6BE30C1E8590FA00FB308F /* Transform.swift in Sources */, - 1E7B10EE1DA41F9300C668A4 /* TextAlignmentConstraint.swift in Sources */, - CDCF0F211DCE5B9B00727AAE /* ContextualAlternates.swift in Sources */, - ABCD3E0D1D980E4900273936 /* Platform.swift in Sources */, - AB30D50E1D9CB4FE006ADC9D /* Tab.swift in Sources */, - ABCD3E111D980E4900273936 /* StringStyle.swift in Sources */, - ABCD3E131D980E4900273936 /* Special.swift in Sources */, - CD3EEE701DCA68EF002C41BB /* FontInspector.swift in Sources */, - ABCD3E141D980E4900273936 /* NamedStyles.swift in Sources */, - CD70C54F1DCD22A8003C063A /* StylisticAlternates.swift in Sources */, - CDEA84331D9EEC390099BD73 /* Image+Tinting.swift in Sources */, - ABCD3E161D980E4900273936 /* StringStyle+Part.swift in Sources */, - CD3EEE6A1DC92CF7002C41BB /* Ligatures.swift in Sources */, - ABCD3E181D980E4900273936 /* XMLBuilder.swift in Sources */, - ABCD3E191D980E4900273936 /* NSAttributedString+BonMot.swift in Sources */, - CDF7E9811D9C613400FF46BF /* MutableCopying.swift in Sources */, - CDB366C1203264DE002C256E /* Emphasis.swift in Sources */, - ABCD3E1D1D980E4900273936 /* FontFeatures.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - ABCD3E2A1D980E5500273936 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ABCD3E2B1D980E5500273936 /* Compatibility+Tests.swift in Sources */, - CDB366C820326FCE002C256E /* EmphasisTests.swift in Sources */, - ABCD3E2E1D980E5500273936 /* XMLTagStyleBuilderTests.swift in Sources */, - ABCD3E2F1D980E5500273936 /* NSAttributedStringDebugTests.swift in Sources */, - CDC0CE381F90730700E144F7 /* AccessTests.swift in Sources */, - AB6633091DA5C5F90007F301 /* BONFontBehaviorTests.swift in Sources */, - ABCD3E301D980E5500273936 /* AssertHelpers.swift in Sources */, - CD3EEE751DCA6BCB002C41BB /* FontInspectorTests.swift in Sources */, - CD6BE3111E85924800FB308F /* TransformTests.swift in Sources */, - ABCD3E321D980E5500273936 /* ComposableTests.swift in Sources */, - CDEA84381D9EEC490099BD73 /* ImageTintingTests.swift in Sources */, - 1E902AB61DA6915F00BD154D /* TextAlignmentConstraintTests.swift in Sources */, - ABCD3E341D980E5500273936 /* Helpers.swift in Sources */, - ABCD3E351D980E5500273936 /* AttributedStringStyleTests.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - AB9C18CE1D9965A900A54787 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = ABCD3E071D980E4900273936 /* BonMot-OSX */; - targetProxy = AB9C18CD1D9965A900A54787 /* PBXContainerItemProxy */; - }; - AB9C18D01D9965B100A54787 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = ABCD3DCB1D96F6A500273936 /* BonMot-tvOS */; - targetProxy = AB9C18CF1D9965B100A54787 /* PBXContainerItemProxy */; - }; - ABCBFD621D96E61100FAD37A /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = ABCBFD561D96E61000FAD37A /* BonMot-iOS */; - targetProxy = ABCBFD611D96E61100FAD37A /* PBXContainerItemProxy */; - }; - CDE292991E15D55600EA4A32 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = ABCBFD561D96E61000FAD37A /* BonMot-iOS */; - targetProxy = CDE292981E15D55600EA4A32 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - ABC777611DC29F7700815FB9 /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - ABC777621DC29F7700815FB9 /* en */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - AB8497DB1DA45B9C00FE3414 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Debug; - }; - AB8497DC1DA45B9C00FE3414 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Release; - }; - ABA75DE81D99E10400B64705 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CODE_SIGN_IDENTITY = ""; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Sources/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = "com.rightpoint.BonMot-watchOS"; - PRODUCT_NAME = BonMot; - SDKROOT = watchos; - SKIP_INSTALL = YES; - WATCHOS_DEPLOYMENT_TARGET = 2.2; - }; - name = Debug; - }; - ABA75DE91D99E10400B64705 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CODE_SIGN_IDENTITY = ""; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Sources/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = "com.rightpoint.BonMot-watchOS"; - PRODUCT_NAME = BonMot; - SDKROOT = watchos; - SKIP_INSTALL = YES; - WATCHOS_DEPLOYMENT_TARGET = 2.2; - }; - name = Release; - }; - ABC7775A1DC29F3000815FB9 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_ENTITLEMENTS = "Example-iOS/Example-iOS.entitlements"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; - DEVELOPMENT_TEAM = ""; - INFOPLIST_FILE = "Example-iOS/Resources/Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = "com.rightpoint.Example-iOS"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SUPPORTS_MACCATALYST = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - ABC7775B1DC29F3000815FB9 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_ENTITLEMENTS = "Example-iOS/Example-iOS.entitlements"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; - DEVELOPMENT_TEAM = ""; - INFOPLIST_FILE = "Example-iOS/Resources/Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = "com.rightpoint.Example-iOS"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SUPPORTS_MACCATALYST = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; - ABCBFD4A1D96E41D00FAD37A /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_NULLABLE_TO_NONNULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_SUSPICIOUS_MOVES = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_SHADOW = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_SWIFT3_OBJC_INFERENCE = Off; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - ABCBFD4B1D96E41D00FAD37A /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_NULLABLE_TO_NONNULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_SUSPICIOUS_MOVES = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_SHADOW = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MTL_ENABLE_DEBUG_INFO = NO; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - SWIFT_SWIFT3_OBJC_INFERENCE = Off; - SWIFT_VERSION = 5.0; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - ABCBFD691D96E61100FAD37A /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Sources/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = "com.rightpoint.BonMot-iOS"; - PRODUCT_NAME = BonMot; - PROVISIONING_PROFILE_SPECIFIER = ""; - "PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - ABCBFD6A1D96E61100FAD37A /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Sources/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = "com.rightpoint.BonMot-iOS"; - PRODUCT_NAME = BonMot; - PROVISIONING_PROFILE_SPECIFIER = ""; - "PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; - ABCBFD6C1D96E61100FAD37A /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - INFOPLIST_FILE = Tests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = "com.rightpoint.BonMot-iOSTests"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - }; - name = Debug; - }; - ABCBFD6D1D96E61100FAD37A /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - INFOPLIST_FILE = Tests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = "com.rightpoint.BonMot-iOSTests"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - }; - name = Release; - }; - ABCD3DEA1D96F6A500273936 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CODE_SIGN_IDENTITY = ""; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Sources/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = "com.rightpoint.BonMot-tvOS"; - PRODUCT_NAME = BonMot; - SDKROOT = appletvos; - SKIP_INSTALL = YES; - TVOS_DEPLOYMENT_TARGET = 10.0; - }; - name = Debug; - }; - ABCD3DEB1D96F6A500273936 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CODE_SIGN_IDENTITY = ""; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Sources/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = "com.rightpoint.BonMot-tvOS"; - PRODUCT_NAME = BonMot; - SDKROOT = appletvos; - SKIP_INSTALL = YES; - TVOS_DEPLOYMENT_TARGET = 10.0; - }; - name = Release; - }; - ABCD3E031D96F6E200273936 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - INFOPLIST_FILE = Tests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = "com.rightpoint.BonMot-tvOSTests"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = appletvos; - TVOS_DEPLOYMENT_TARGET = 10.0; - }; - name = Debug; - }; - ABCD3E041D96F6E200273936 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - INFOPLIST_FILE = Tests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = "com.rightpoint.BonMot-tvOSTests"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = appletvos; - TVOS_DEPLOYMENT_TARGET = 10.0; - }; - name = Release; - }; - ABCD3E231D980E4900273936 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - COMBINE_HIDPI_IMAGES = YES; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Sources/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.11; - PRODUCT_BUNDLE_IDENTIFIER = "com.rightpoint.BonMot-OSX"; - PRODUCT_NAME = BonMot; - SDKROOT = macosx; - SKIP_INSTALL = YES; - }; - name = Debug; - }; - ABCD3E241D980E4900273936 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - COMBINE_HIDPI_IMAGES = YES; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Sources/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.11; - PRODUCT_BUNDLE_IDENTIFIER = "com.rightpoint.BonMot-OSX"; - PRODUCT_NAME = BonMot; - SDKROOT = macosx; - SKIP_INSTALL = YES; - }; - name = Release; - }; - ABCD3E3C1D980E5500273936 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - COMBINE_HIDPI_IMAGES = YES; - INFOPLIST_FILE = Tests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/../Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.11; - PRODUCT_BUNDLE_IDENTIFIER = "com.rightpoint.BonMot-OSXTests"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - }; - name = Debug; - }; - ABCD3E3D1D980E5500273936 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - COMBINE_HIDPI_IMAGES = YES; - INFOPLIST_FILE = Tests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/../Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.11; - PRODUCT_BUNDLE_IDENTIFIER = "com.rightpoint.BonMot-OSXTests"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - AB8497DD1DA45B9C00FE3414 /* Build configuration list for PBXAggregateTarget "AllTheThings" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - AB8497DB1DA45B9C00FE3414 /* Debug */, - AB8497DC1DA45B9C00FE3414 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - ABA75DE71D99E10400B64705 /* Build configuration list for PBXNativeTarget "BonMot-watchOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - ABA75DE81D99E10400B64705 /* Debug */, - ABA75DE91D99E10400B64705 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - ABC7775C1DC29F3000815FB9 /* Build configuration list for PBXNativeTarget "Example-iOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - ABC7775A1DC29F3000815FB9 /* Debug */, - ABC7775B1DC29F3000815FB9 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - ABCBFD321D96E41D00FAD37A /* Build configuration list for PBXProject "BonMot" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - ABCBFD4A1D96E41D00FAD37A /* Debug */, - ABCBFD4B1D96E41D00FAD37A /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - ABCBFD681D96E61100FAD37A /* Build configuration list for PBXNativeTarget "BonMot-iOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - ABCBFD691D96E61100FAD37A /* Debug */, - ABCBFD6A1D96E61100FAD37A /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - ABCBFD6B1D96E61100FAD37A /* Build configuration list for PBXNativeTarget "BonMot-iOSTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - ABCBFD6C1D96E61100FAD37A /* Debug */, - ABCBFD6D1D96E61100FAD37A /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - ABCD3DE91D96F6A500273936 /* Build configuration list for PBXNativeTarget "BonMot-tvOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - ABCD3DEA1D96F6A500273936 /* Debug */, - ABCD3DEB1D96F6A500273936 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - ABCD3E021D96F6E200273936 /* Build configuration list for PBXNativeTarget "BonMot-tvOSTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - ABCD3E031D96F6E200273936 /* Debug */, - ABCD3E041D96F6E200273936 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - ABCD3E221D980E4900273936 /* Build configuration list for PBXNativeTarget "BonMot-OSX" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - ABCD3E231D980E4900273936 /* Debug */, - ABCD3E241D980E4900273936 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - ABCD3E3B1D980E5500273936 /* Build configuration list for PBXNativeTarget "BonMot-OSXTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - ABCD3E3C1D980E5500273936 /* Debug */, - ABCD3E3D1D980E5500273936 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = ABCBFD2F1D96E41D00FAD37A /* Project object */; -} diff --git a/BonMot.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/BonMot.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index fe1aa713..00000000 --- a/BonMot.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - \ No newline at end of file diff --git a/BonMot.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/BonMot.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d98100..00000000 --- a/BonMot.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/BonMot.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/BonMot.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index a72dc2b4..00000000 --- a/BonMot.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded - - - \ No newline at end of file diff --git a/BonMot.xcodeproj/xcshareddata/xcschemes/BonMot-OSX.xcscheme b/BonMot.xcodeproj/xcshareddata/xcschemes/BonMot-OSX.xcscheme deleted file mode 100644 index 07276974..00000000 --- a/BonMot.xcodeproj/xcshareddata/xcschemes/BonMot-OSX.xcscheme +++ /dev/null @@ -1,147 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/BonMot.xcodeproj/xcshareddata/xcschemes/BonMot-OSXTests.xcscheme b/BonMot.xcodeproj/xcshareddata/xcschemes/BonMot-OSXTests.xcscheme deleted file mode 100644 index cd8ea38d..00000000 --- a/BonMot.xcodeproj/xcshareddata/xcschemes/BonMot-OSXTests.xcscheme +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/BonMot.xcodeproj/xcshareddata/xcschemes/BonMot-iOS.xcscheme b/BonMot.xcodeproj/xcshareddata/xcschemes/BonMot-iOS.xcscheme deleted file mode 100644 index 54949156..00000000 --- a/BonMot.xcodeproj/xcshareddata/xcschemes/BonMot-iOS.xcscheme +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/BonMot.xcodeproj/xcshareddata/xcschemes/BonMot-iOSTests.xcscheme b/BonMot.xcodeproj/xcshareddata/xcschemes/BonMot-iOSTests.xcscheme deleted file mode 100644 index 8ae9a9a7..00000000 --- a/BonMot.xcodeproj/xcshareddata/xcschemes/BonMot-iOSTests.xcscheme +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/BonMot.xcodeproj/xcshareddata/xcschemes/BonMot-tvOS.xcscheme b/BonMot.xcodeproj/xcshareddata/xcschemes/BonMot-tvOS.xcscheme deleted file mode 100644 index b0641a77..00000000 --- a/BonMot.xcodeproj/xcshareddata/xcschemes/BonMot-tvOS.xcscheme +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/BonMot.xcodeproj/xcshareddata/xcschemes/BonMot-tvOSTests.xcscheme b/BonMot.xcodeproj/xcshareddata/xcschemes/BonMot-tvOSTests.xcscheme deleted file mode 100644 index e7cc81f5..00000000 --- a/BonMot.xcodeproj/xcshareddata/xcschemes/BonMot-tvOSTests.xcscheme +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/BonMot.xcodeproj/xcshareddata/xcschemes/BonMot-watchOS.xcscheme b/BonMot.xcodeproj/xcshareddata/xcschemes/BonMot-watchOS.xcscheme deleted file mode 100644 index edac6462..00000000 --- a/BonMot.xcodeproj/xcshareddata/xcschemes/BonMot-watchOS.xcscheme +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/BonMot.xcodeproj/xcshareddata/xcschemes/Example-iOS.xcscheme b/BonMot.xcodeproj/xcshareddata/xcschemes/Example-iOS.xcscheme deleted file mode 100644 index b698fafd..00000000 --- a/BonMot.xcodeproj/xcshareddata/xcschemes/Example-iOS.xcscheme +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/BuildTools/Empty.swift b/BuildTools/Empty.swift new file mode 100644 index 00000000..e69de29b diff --git a/BuildTools/Package.resolved b/BuildTools/Package.resolved new file mode 100644 index 00000000..39933468 --- /dev/null +++ b/BuildTools/Package.resolved @@ -0,0 +1,41 @@ +{ + "pins" : [ + { + "identity" : "colorizer", + "kind" : "remoteSourceControl", + "location" : "https://github.com/getGuaka/Colorizer.git", + "state" : { + "revision" : "2ccc99bf1715e73c4139e8d40b6e6b30be975586", + "version" : "0.2.1" + } + }, + { + "identity" : "swift-argument-parser", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-argument-parser.git", + "state" : { + "revision" : "0fbc8848e389af3bb55c182bc19ca9d5dc2f255b", + "version" : "1.4.0" + } + }, + { + "identity" : "xcbeautify", + "kind" : "remoteSourceControl", + "location" : "https://github.com/cpisciotta/xcbeautify", + "state" : { + "revision" : "42a9af4d1db4439262301f610c2db123b0b7c6e0", + "version" : "2.4.1" + } + }, + { + "identity" : "xmlcoder", + "kind" : "remoteSourceControl", + "location" : "https://github.com/MaxDesiatov/XMLCoder.git", + "state" : { + "revision" : "b1e944cbd0ef33787b13f639a5418d55b3bed501", + "version" : "0.17.1" + } + } + ], + "version" : 2 +} diff --git a/BuildTools/Package.swift b/BuildTools/Package.swift new file mode 100644 index 00000000..a18e7514 --- /dev/null +++ b/BuildTools/Package.swift @@ -0,0 +1,13 @@ +// swift-tools-version: 5.9 +import PackageDescription + +let package = Package( + name: "BuildTools", + platforms: [.macOS(.v10_13)], + dependencies: [ + .package(url: "https://github.com/cpisciotta/xcbeautify", from: "2.4.1"), + ], + targets: [ + .target(name: "BuildTools", path: "") + ] +) diff --git a/Dangerfile b/Dangerfile deleted file mode 100644 index ae2debef..00000000 --- a/Dangerfile +++ /dev/null @@ -1,84 +0,0 @@ -require 'circleci_artifact' - -# Make it more obvious that a PR is a work in progress and shouldn't be merged yet. -has_wip_label = github.pr_labels.any? { |label| label.include? "WIP" } -has_wip_title = github.pr_title.include? "[WIP]" - -if has_wip_label || has_wip_title - warn("PR is classed as Work in Progress") -end - -# Warn when there is a big PR. -warn("Big PR") if git.lines_of_code > 500 - -# Mainly to encourage writing up some reasoning about the PR, rather than just leaving a title. -if github.pr_body.length < 3 && git.lines_of_code > 10 - warn("Please provide a summary in the Pull Request description") -end - -src_root = File.expand_path('../', __FILE__) - -SCHEME = "BonMot-iOS" - -result_bundle_path = "#{src_root}/build/#{SCHEME}/scan/#{SCHEME}.xcresult-coverage" -xccoverage_files = Dir.glob("#{result_bundle_path}/**/action.xccovreport").sort_by { |filename| File.mtime(filename) }.reverse -xccov_file_direct_path = xccoverage_files.first - -xcov.report( - project: "#{src_root}/BonMot.xcodeproj", - scheme: SCHEME, - output_directory: "#{src_root}/build/#{SCHEME}/xcov", - xccov_file_direct_path: xccov_file_direct_path -) - -## ** SwiftLint *** -swiftlint.binary_path = "/usr/local/bin/swiftlint" -swiftlint.config_file = "#{src_root}/.swiftlint.yml" - -# Run SwiftLint and warn us if anything fails it -swiftlint.directory = src_root -swiftlint.lint_files inline_mode: true - -# Getting artifact URLs from CircleCI - -# You must set up the CIRCLE_API_TOKEN manually using these instructions -# https://github.com/Rightpoint/ios-template/tree/master/PRODUCTNAME#danger -token = ENV['CIRCLE_API_TOKEN'] -# These are already in the Circle environment -# https://circleci.com/docs/2.0/env-vars/#build-specific-environment-variables -username = ENV['CIRCLE_PROJECT_USERNAME'] -reponame = ENV['CIRCLE_PROJECT_REPONAME'] -build = ENV['CIRCLE_BUILD_NUM'] - -if !(token.nil? or username.nil? or reponame.nil? or build.nil?) - fetcher = CircleciArtifact::Fetcher.new(token: token, username: username, reponame: reponame, build: build) - - xcov = CircleciArtifact::Query.new(url_substring: 'xcov/index.html') - slather = CircleciArtifact::Query.new(url_substring: 'slather/index.html') - xcpretty = CircleciArtifact::Query.new(url_substring: 'scan/report.html') - xchtmlreport = CircleciArtifact::Query.new(url_substring: 'scan/index.html') - queries = [xcov, slather, xcpretty, xchtmlreport] - results = fetcher.fetch_queries(queries) - - xcov_url = results.url_for_query(xcov) - slather_url = results.url_for_query(slather) - xcpretty_url = results.url_for_query(xcpretty) - xchtmlreport_url = results.url_for_query(xchtmlreport) - - if !xchtmlreport_url.nil? - message "[Test Results](#{xchtmlreport_url})" - else - message "Tests in progress..." - end - - if !slather_url.nil? - message "[Code Coverage](#{slather_url})" - end -else - warn "Missing CircleCI artifacts. Most likely the [CIRCLE_API_TOKEN](https://github.com/Rightpoint/circleci_artifact#getting-started) is not set, or Danger is not running on CircleCI." -end - -# Test Reporting - -junit.parse "#{src_root}/build/BonMot-iOS/scan/BonMot-iOS.xcresult/report.junit" -junit.report diff --git a/Example-iOS/AppDelegate.swift b/Example/AppDelegate.swift similarity index 100% rename from Example-iOS/AppDelegate.swift rename to Example/AppDelegate.swift diff --git a/Example-iOS/CatalogViewController.swift b/Example/CatalogViewController.swift similarity index 100% rename from Example-iOS/CatalogViewController.swift rename to Example/CatalogViewController.swift diff --git a/Example-iOS/DemoStrings.swift b/Example/DemoStrings.swift similarity index 99% rename from Example-iOS/DemoStrings.swift rename to Example/DemoStrings.swift index 5fc87488..8c05f603 100644 --- a/Example-iOS/DemoStrings.swift +++ b/Example/DemoStrings.swift @@ -445,7 +445,7 @@ extension DemoStrings { /// - Parameter theIdentifier: The identifier of the storyboard in question. /// - Returns: A string style that contains the extra storyboard attribute. static func customStoryboard(identifier theIdentifier: String) -> StringStyle { - return StringStyle(.extraAttributes(["Storyboard": theIdentifier])) + return StringStyle(.extraAttributes([NSAttributedString.Key("Storyboard"): theIdentifier])) } } diff --git a/Example-iOS/Example-iOS.entitlements b/Example/Example-iOS.entitlements similarity index 100% rename from Example-iOS/Example-iOS.entitlements rename to Example/Example-iOS.entitlements diff --git a/Example-iOS/Resources/Images.xcassets/AppIcon.appiconset/Contents.json b/Example/Resources/Images.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from Example-iOS/Resources/Images.xcassets/AppIcon.appiconset/Contents.json rename to Example/Resources/Images.xcassets/AppIcon.appiconset/Contents.json diff --git a/Example-iOS/Resources/Images.xcassets/BonMot-logo.imageset/BonMot-logo.pdf b/Example/Resources/Images.xcassets/BonMot-logo.imageset/BonMot-logo.pdf similarity index 100% rename from Example-iOS/Resources/Images.xcassets/BonMot-logo.imageset/BonMot-logo.pdf rename to Example/Resources/Images.xcassets/BonMot-logo.imageset/BonMot-logo.pdf diff --git a/Example-iOS/Resources/Images.xcassets/BonMot-logo.imageset/Contents.json b/Example/Resources/Images.xcassets/BonMot-logo.imageset/Contents.json similarity index 100% rename from Example-iOS/Resources/Images.xcassets/BonMot-logo.imageset/Contents.json rename to Example/Resources/Images.xcassets/BonMot-logo.imageset/Contents.json diff --git a/Example-iOS/Resources/Images.xcassets/Contents.json b/Example/Resources/Images.xcassets/Contents.json similarity index 100% rename from Example-iOS/Resources/Images.xcassets/Contents.json rename to Example/Resources/Images.xcassets/Contents.json diff --git a/Example-iOS/Resources/Images.xcassets/LaunchImage.launchimage/Contents.json b/Example/Resources/Images.xcassets/LaunchImage.launchimage/Contents.json similarity index 100% rename from Example-iOS/Resources/Images.xcassets/LaunchImage.launchimage/Contents.json rename to Example/Resources/Images.xcassets/LaunchImage.launchimage/Contents.json diff --git a/Example-iOS/Resources/Images.xcassets/Tennis Racket.imageset/Contents.json b/Example/Resources/Images.xcassets/Tennis Racket.imageset/Contents.json similarity index 100% rename from Example-iOS/Resources/Images.xcassets/Tennis Racket.imageset/Contents.json rename to Example/Resources/Images.xcassets/Tennis Racket.imageset/Contents.json diff --git a/Example-iOS/Resources/Images.xcassets/Tennis Racket.imageset/Tennis Racket.pdf b/Example/Resources/Images.xcassets/Tennis Racket.imageset/Tennis Racket.pdf similarity index 100% rename from Example-iOS/Resources/Images.xcassets/Tennis Racket.imageset/Tennis Racket.pdf rename to Example/Resources/Images.xcassets/Tennis Racket.imageset/Tennis Racket.pdf diff --git a/Example-iOS/Resources/Images.xcassets/barn.imageset/Contents.json b/Example/Resources/Images.xcassets/barn.imageset/Contents.json similarity index 100% rename from Example-iOS/Resources/Images.xcassets/barn.imageset/Contents.json rename to Example/Resources/Images.xcassets/barn.imageset/Contents.json diff --git a/Example-iOS/Resources/Images.xcassets/barn.imageset/barn.pdf b/Example/Resources/Images.xcassets/barn.imageset/barn.pdf similarity index 100% rename from Example-iOS/Resources/Images.xcassets/barn.imageset/barn.pdf rename to Example/Resources/Images.xcassets/barn.imageset/barn.pdf diff --git a/Example-iOS/Resources/Images.xcassets/bee.imageset/Contents.json b/Example/Resources/Images.xcassets/bee.imageset/Contents.json similarity index 100% rename from Example-iOS/Resources/Images.xcassets/bee.imageset/Contents.json rename to Example/Resources/Images.xcassets/bee.imageset/Contents.json diff --git a/Example-iOS/Resources/Images.xcassets/bee.imageset/bee.pdf b/Example/Resources/Images.xcassets/bee.imageset/bee.pdf similarity index 100% rename from Example-iOS/Resources/Images.xcassets/bee.imageset/bee.pdf rename to Example/Resources/Images.xcassets/bee.imageset/bee.pdf diff --git a/Example-iOS/Resources/Images.xcassets/boat.imageset/Contents.json b/Example/Resources/Images.xcassets/boat.imageset/Contents.json similarity index 100% rename from Example-iOS/Resources/Images.xcassets/boat.imageset/Contents.json rename to Example/Resources/Images.xcassets/boat.imageset/Contents.json diff --git a/Example-iOS/Resources/Images.xcassets/boat.imageset/boat.pdf b/Example/Resources/Images.xcassets/boat.imageset/boat.pdf similarity index 100% rename from Example-iOS/Resources/Images.xcassets/boat.imageset/boat.pdf rename to Example/Resources/Images.xcassets/boat.imageset/boat.pdf diff --git a/Example-iOS/Resources/Images.xcassets/bug.imageset/Contents.json b/Example/Resources/Images.xcassets/bug.imageset/Contents.json similarity index 100% rename from Example-iOS/Resources/Images.xcassets/bug.imageset/Contents.json rename to Example/Resources/Images.xcassets/bug.imageset/Contents.json diff --git a/Example-iOS/Resources/Images.xcassets/bug.imageset/bug.pdf b/Example/Resources/Images.xcassets/bug.imageset/bug.pdf similarity index 100% rename from Example-iOS/Resources/Images.xcassets/bug.imageset/bug.pdf rename to Example/Resources/Images.xcassets/bug.imageset/bug.pdf diff --git a/Example-iOS/Resources/Images.xcassets/circuit.imageset/Contents.json b/Example/Resources/Images.xcassets/circuit.imageset/Contents.json similarity index 100% rename from Example-iOS/Resources/Images.xcassets/circuit.imageset/Contents.json rename to Example/Resources/Images.xcassets/circuit.imageset/Contents.json diff --git a/Example-iOS/Resources/Images.xcassets/circuit.imageset/circuit.pdf b/Example/Resources/Images.xcassets/circuit.imageset/circuit.pdf similarity index 100% rename from Example-iOS/Resources/Images.xcassets/circuit.imageset/circuit.pdf rename to Example/Resources/Images.xcassets/circuit.imageset/circuit.pdf diff --git a/Example-iOS/Resources/Images.xcassets/cut.imageset/Contents.json b/Example/Resources/Images.xcassets/cut.imageset/Contents.json similarity index 100% rename from Example-iOS/Resources/Images.xcassets/cut.imageset/Contents.json rename to Example/Resources/Images.xcassets/cut.imageset/Contents.json diff --git a/Example-iOS/Resources/Images.xcassets/cut.imageset/cut.pdf b/Example/Resources/Images.xcassets/cut.imageset/cut.pdf similarity index 100% rename from Example-iOS/Resources/Images.xcassets/cut.imageset/cut.pdf rename to Example/Resources/Images.xcassets/cut.imageset/cut.pdf diff --git a/Example-iOS/Resources/Images.xcassets/discount.imageset/Contents.json b/Example/Resources/Images.xcassets/discount.imageset/Contents.json similarity index 100% rename from Example-iOS/Resources/Images.xcassets/discount.imageset/Contents.json rename to Example/Resources/Images.xcassets/discount.imageset/Contents.json diff --git a/Example-iOS/Resources/Images.xcassets/discount.imageset/discount.pdf b/Example/Resources/Images.xcassets/discount.imageset/discount.pdf similarity index 100% rename from Example-iOS/Resources/Images.xcassets/discount.imageset/discount.pdf rename to Example/Resources/Images.xcassets/discount.imageset/discount.pdf diff --git a/Example-iOS/Resources/Images.xcassets/gift.imageset/Contents.json b/Example/Resources/Images.xcassets/gift.imageset/Contents.json similarity index 100% rename from Example-iOS/Resources/Images.xcassets/gift.imageset/Contents.json rename to Example/Resources/Images.xcassets/gift.imageset/Contents.json diff --git a/Example-iOS/Resources/Images.xcassets/gift.imageset/gift.pdf b/Example/Resources/Images.xcassets/gift.imageset/gift.pdf similarity index 100% rename from Example-iOS/Resources/Images.xcassets/gift.imageset/gift.pdf rename to Example/Resources/Images.xcassets/gift.imageset/gift.pdf diff --git a/Example-iOS/Resources/Images.xcassets/knot.imageset/Contents.json b/Example/Resources/Images.xcassets/knot.imageset/Contents.json similarity index 100% rename from Example-iOS/Resources/Images.xcassets/knot.imageset/Contents.json rename to Example/Resources/Images.xcassets/knot.imageset/Contents.json diff --git a/Example-iOS/Resources/Images.xcassets/knot.imageset/knot.pdf b/Example/Resources/Images.xcassets/knot.imageset/knot.pdf similarity index 100% rename from Example-iOS/Resources/Images.xcassets/knot.imageset/knot.pdf rename to Example/Resources/Images.xcassets/knot.imageset/knot.pdf diff --git a/Example-iOS/Resources/Images.xcassets/oar.imageset/Contents.json b/Example/Resources/Images.xcassets/oar.imageset/Contents.json similarity index 100% rename from Example-iOS/Resources/Images.xcassets/oar.imageset/Contents.json rename to Example/Resources/Images.xcassets/oar.imageset/Contents.json diff --git a/Example-iOS/Resources/Images.xcassets/oar.imageset/oar.pdf b/Example/Resources/Images.xcassets/oar.imageset/oar.pdf similarity index 100% rename from Example-iOS/Resources/Images.xcassets/oar.imageset/oar.pdf rename to Example/Resources/Images.xcassets/oar.imageset/oar.pdf diff --git a/Example-iOS/Resources/Images.xcassets/pin.imageset/Contents.json b/Example/Resources/Images.xcassets/pin.imageset/Contents.json similarity index 100% rename from Example-iOS/Resources/Images.xcassets/pin.imageset/Contents.json rename to Example/Resources/Images.xcassets/pin.imageset/Contents.json diff --git a/Example-iOS/Resources/Images.xcassets/pin.imageset/pin.pdf b/Example/Resources/Images.xcassets/pin.imageset/pin.pdf similarity index 100% rename from Example-iOS/Resources/Images.xcassets/pin.imageset/pin.pdf rename to Example/Resources/Images.xcassets/pin.imageset/pin.pdf diff --git a/Example-iOS/Resources/Images.xcassets/robot.imageset/Contents.json b/Example/Resources/Images.xcassets/robot.imageset/Contents.json similarity index 100% rename from Example-iOS/Resources/Images.xcassets/robot.imageset/Contents.json rename to Example/Resources/Images.xcassets/robot.imageset/Contents.json diff --git a/Example-iOS/Resources/Images.xcassets/robot.imageset/robot.pdf b/Example/Resources/Images.xcassets/robot.imageset/robot.pdf similarity index 100% rename from Example-iOS/Resources/Images.xcassets/robot.imageset/robot.pdf rename to Example/Resources/Images.xcassets/robot.imageset/robot.pdf diff --git a/Example-iOS/Resources/Info.plist b/Example/Resources/Info.plist similarity index 100% rename from Example-iOS/Resources/Info.plist rename to Example/Resources/Info.plist diff --git a/Example-iOS/Resources/Launch Screen.xib b/Example/Resources/Launch Screen.xib similarity index 100% rename from Example-iOS/Resources/Launch Screen.xib rename to Example/Resources/Launch Screen.xib diff --git a/Example-iOS/Resources/Main.storyboard b/Example/Resources/Main.storyboard similarity index 100% rename from Example-iOS/Resources/Main.storyboard rename to Example/Resources/Main.storyboard diff --git a/Example-iOS/Resources/en.lproj/InfoPlist.strings b/Example/Resources/en.lproj/InfoPlist.strings similarity index 100% rename from Example-iOS/Resources/en.lproj/InfoPlist.strings rename to Example/Resources/en.lproj/InfoPlist.strings diff --git a/Example-iOS/StyleViewController.swift b/Example/StyleViewController.swift similarity index 89% rename from Example-iOS/StyleViewController.swift rename to Example/StyleViewController.swift index 0b77e642..be6e770e 100644 --- a/Example-iOS/StyleViewController.swift +++ b/Example/StyleViewController.swift @@ -52,13 +52,13 @@ class StyleViewController: UITableViewController { } let attributedText = styles[indexPath.section].1[indexPath.row] cell.titleLabel?.attributedText = attributedText.adapted(to: traitCollection) - cell.accessoryType = attributedText.attribute("Storyboard", at: 0, effectiveRange: nil) == nil ? .none : .disclosureIndicator + cell.accessoryType = attributedText.attribute(NSAttributedString.Key("Storyboard"), at: 0, effectiveRange: nil) == nil ? .none : .disclosureIndicator return cell } override func tableView(_ tableView: UITableView, shouldHighlightRowAt indexPath: IndexPath) -> Bool { let attributedText = styles[indexPath.section].1[indexPath.row] - if attributedText.attribute("Storyboard", at: 0, effectiveRange: nil) is String { + if attributedText.attribute(NSAttributedString.Key("Storyboard"), at: 0, effectiveRange: nil) is String { return true } return false @@ -66,7 +66,7 @@ class StyleViewController: UITableViewController { func selectRow(at indexPath: IndexPath) { let attributedText = styles[indexPath.section].1[indexPath.row] - if let storyboardIdentifier = attributedText.attribute("Storyboard", at: 0, effectiveRange: nil) as? String { + if let storyboardIdentifier = attributedText.attribute(NSAttributedString.Key("Storyboard"), at: 0, effectiveRange: nil) as? String { guard let nextVC = storyboard?.instantiateViewController(withIdentifier: storyboardIdentifier) else { fatalError("No Storyboard identifier \(storyboardIdentifier)") } diff --git a/Gemfile b/Gemfile index fee24252..5f6889ca 100644 --- a/Gemfile +++ b/Gemfile @@ -1,22 +1,6 @@ source 'https://rubygems.org' gem 'cocoapods' -gem 'xcpretty' - -# Danger -group :test, :danger do - gem 'slather' - gem 'circleci_artifact' - gem 'xcov' - gem 'fastlane' -end - -group :danger do - gem 'danger' - gem 'danger-swiftlint' - gem 'danger-xcov' - gem 'danger-junit' -end plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile') eval_gemfile(plugins_path) if File.exist?(plugins_path) diff --git a/Gemfile.lock b/Gemfile.lock index 978dfa6b..c9af3bc7 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,52 +1,35 @@ GEM remote: https://rubygems.org/ specs: - CFPropertyList (3.0.6) + CFPropertyList (3.0.7) + base64 + nkf rexml - activesupport (7.0.5) + activesupport (7.1.3.2) + base64 + bigdecimal concurrent-ruby (~> 1.0, >= 1.0.2) + connection_pool (>= 2.2.5) + drb i18n (>= 1.6, < 2) minitest (>= 5.1) + mutex_m tzinfo (~> 2.0) - addressable (2.8.4) + addressable (2.8.6) public_suffix (>= 2.0.2, < 6.0) algoliasearch (1.27.5) httpclient (~> 2.8, >= 2.8.3) json (>= 1.5.1) - artifactory (3.0.15) atomos (0.1.3) - aws-eventstream (1.2.0) - aws-partitions (1.777.0) - aws-sdk-core (3.174.0) - aws-eventstream (~> 1, >= 1.0.2) - aws-partitions (~> 1, >= 1.651.0) - aws-sigv4 (~> 1.5) - jmespath (~> 1, >= 1.6.1) - aws-sdk-kms (1.66.0) - aws-sdk-core (~> 3, >= 3.174.0) - aws-sigv4 (~> 1.1) - aws-sdk-s3 (1.123.1) - aws-sdk-core (~> 3, >= 3.174.0) - aws-sdk-kms (~> 1) - aws-sigv4 (~> 1.4) - aws-sigv4 (1.5.2) - aws-eventstream (~> 1, >= 1.0.2) - babosa (1.0.4) - circleci (2.1.0) - circleci_artifact (0.1.0) - circleci (~> 2.0) + base64 (0.2.0) + bigdecimal (3.1.7) claide (1.1.0) - claide-plugins (0.9.2) - cork - nap - open4 (~> 1.3) - clamp (1.3.2) - cocoapods (1.12.1) + cocoapods (1.15.2) addressable (~> 2.8) claide (>= 1.0.2, < 2.0) - cocoapods-core (= 1.12.1) + cocoapods-core (= 1.15.2) cocoapods-deintegrate (>= 1.0.3, < 2.0) - cocoapods-downloader (>= 1.6.0, < 2.0) + cocoapods-downloader (>= 2.1, < 3.0) cocoapods-plugins (>= 1.0.0, < 2.0) cocoapods-search (>= 1.0.0, < 2.0) cocoapods-trunk (>= 1.6.0, < 2.0) @@ -58,8 +41,8 @@ GEM molinillo (~> 0.8.0) nap (~> 1.0) ruby-macho (>= 2.3.0, < 3.0) - xcodeproj (>= 1.21.0, < 2.0) - cocoapods-core (1.12.1) + xcodeproj (>= 1.23.0, < 2.0) + cocoapods-core (1.15.2) activesupport (>= 5.0, < 8) addressable (~> 2.8) algoliasearch (~> 1.0) @@ -70,7 +53,7 @@ GEM public_suffix (~> 4.0) typhoeus (~> 1.0) cocoapods-deintegrate (1.0.5) - cocoapods-downloader (1.6.3) + cocoapods-downloader (2.1) cocoapods-plugins (1.0.0) nap cocoapods-search (1.0.1) @@ -78,286 +61,48 @@ GEM nap (>= 0.8, < 2.0) netrc (~> 0.11) cocoapods-try (1.2.0) - colored (1.2) colored2 (3.1.2) - commander (4.6.0) - highline (~> 2.0.0) - concurrent-ruby (1.2.2) - cork (0.3.0) - colored2 (~> 3.1) - danger (9.3.1) - claide (~> 1.0) - claide-plugins (>= 0.9.2) - colored2 (~> 3.1) - cork (~> 0.1) - faraday (>= 0.9.0, < 3.0) - faraday-http-cache (~> 2.0) - git (~> 1.13) - kramdown (~> 2.3) - kramdown-parser-gfm (~> 1.0) - no_proxy_fix - octokit (~> 6.0) - terminal-table (>= 1, < 4) - danger-junit (1.0.2) - danger (> 2.0) - ox (~> 2.0) - danger-swiftlint (0.33.0) - danger - rake (> 10) - thor (~> 0.19) - danger-xcov (0.5.0) - danger (>= 2.1) - xcov (>= 1.7.3) - declarative (0.0.20) - digest-crc (0.6.4) - rake (>= 12.0.0, < 14.0.0) - domain_name (0.5.20190701) - unf (>= 0.0.5, < 1.0.0) - dotenv (2.8.1) - emoji_regex (3.2.3) + concurrent-ruby (1.2.3) + connection_pool (2.4.1) + drb (2.2.1) escape (0.0.4) ethon (0.16.0) ffi (>= 1.15.0) - excon (0.100.0) - faraday (1.10.3) - faraday-em_http (~> 1.0) - faraday-em_synchrony (~> 1.0) - faraday-excon (~> 1.1) - faraday-httpclient (~> 1.0) - faraday-multipart (~> 1.0) - faraday-net_http (~> 1.0) - faraday-net_http_persistent (~> 1.0) - faraday-patron (~> 1.0) - faraday-rack (~> 1.0) - faraday-retry (~> 1.0) - ruby2_keywords (>= 0.0.4) - faraday-cookie_jar (0.0.7) - faraday (>= 0.8.0) - http-cookie (~> 1.0.0) - faraday-em_http (1.0.0) - faraday-em_synchrony (1.0.0) - faraday-excon (1.1.0) - faraday-http-cache (2.5.0) - faraday (>= 0.8) - faraday-httpclient (1.0.1) - faraday-multipart (1.0.4) - multipart-post (~> 2) - faraday-net_http (1.0.1) - faraday-net_http_persistent (1.2.0) - faraday-patron (1.0.0) - faraday-rack (1.0.0) - faraday-retry (1.0.3) - faraday_middleware (1.2.0) - faraday (~> 1.0) - fastimage (2.2.7) - fastlane (2.213.0) - CFPropertyList (>= 2.3, < 4.0.0) - addressable (>= 2.8, < 3.0.0) - artifactory (~> 3.0) - aws-sdk-s3 (~> 1.0) - babosa (>= 1.0.3, < 2.0.0) - bundler (>= 1.12.0, < 3.0.0) - colored - commander (~> 4.6) - dotenv (>= 2.1.1, < 3.0.0) - emoji_regex (>= 0.1, < 4.0) - excon (>= 0.71.0, < 1.0.0) - faraday (~> 1.0) - faraday-cookie_jar (~> 0.0.6) - faraday_middleware (~> 1.0) - fastimage (>= 2.1.0, < 3.0.0) - gh_inspector (>= 1.1.2, < 2.0.0) - google-apis-androidpublisher_v3 (~> 0.3) - google-apis-playcustomapp_v1 (~> 0.1) - google-cloud-storage (~> 1.31) - highline (~> 2.0) - json (< 3.0.0) - jwt (>= 2.1.0, < 3) - mini_magick (>= 4.9.4, < 5.0.0) - multipart-post (>= 2.0.0, < 3.0.0) - naturally (~> 2.2) - optparse (~> 0.1.1) - plist (>= 3.1.0, < 4.0.0) - rubyzip (>= 2.0.0, < 3.0.0) - security (= 0.1.3) - simctl (~> 1.6.3) - terminal-notifier (>= 2.0.0, < 3.0.0) - terminal-table (>= 1.4.5, < 2.0.0) - tty-screen (>= 0.6.3, < 1.0.0) - tty-spinner (>= 0.8.0, < 1.0.0) - word_wrap (~> 1.0.0) - xcodeproj (>= 1.13.0, < 2.0.0) - xcpretty (~> 0.3.0) - xcpretty-travis-formatter (>= 0.0.3) - ffi (1.15.5) + ffi (1.16.3) fourflusher (2.3.1) fuzzy_match (2.0.4) gh_inspector (1.1.3) - git (1.18.0) - addressable (~> 2.8) - rchardet (~> 1.8) - google-apis-androidpublisher_v3 (0.43.0) - google-apis-core (>= 0.11.0, < 2.a) - google-apis-core (0.11.0) - addressable (~> 2.5, >= 2.5.1) - googleauth (>= 0.16.2, < 2.a) - httpclient (>= 2.8.1, < 3.a) - mini_mime (~> 1.0) - representable (~> 3.0) - retriable (>= 2.0, < 4.a) - rexml - webrick - google-apis-iamcredentials_v1 (0.17.0) - google-apis-core (>= 0.11.0, < 2.a) - google-apis-playcustomapp_v1 (0.13.0) - google-apis-core (>= 0.11.0, < 2.a) - google-apis-storage_v1 (0.19.0) - google-apis-core (>= 0.9.0, < 2.a) - google-cloud-core (1.6.0) - google-cloud-env (~> 1.0) - google-cloud-errors (~> 1.0) - google-cloud-env (1.6.0) - faraday (>= 0.17.3, < 3.0) - google-cloud-errors (1.3.1) - google-cloud-storage (1.44.0) - addressable (~> 2.8) - digest-crc (~> 0.4) - google-apis-iamcredentials_v1 (~> 0.1) - google-apis-storage_v1 (~> 0.19.0) - google-cloud-core (~> 1.6) - googleauth (>= 0.16.2, < 2.a) - mini_mime (~> 1.0) - googleauth (1.5.2) - faraday (>= 0.17.3, < 3.a) - jwt (>= 1.4, < 3.0) - memoist (~> 0.16) - multi_json (~> 1.11) - os (>= 0.9, < 2.0) - signet (>= 0.16, < 2.a) - highline (2.0.3) - http-cookie (1.0.5) - domain_name (~> 0.5) httpclient (2.8.3) - i18n (1.14.1) + i18n (1.14.4) concurrent-ruby (~> 1.0) - jmespath (1.6.2) - json (2.6.3) - jwt (2.7.1) - kramdown (2.4.0) - rexml - kramdown-parser-gfm (1.1.0) - kramdown (~> 2.0) - memoist (0.16.2) - mini_magick (4.12.0) - mini_mime (1.1.2) - mini_portile2 (2.8.2) - minitest (5.18.0) + json (2.7.1) + minitest (5.22.3) molinillo (0.8.0) - multi_json (1.15.0) - multipart-post (2.3.0) + mutex_m (0.2.0) nanaimo (0.3.0) nap (1.1.0) - naturally (2.2.1) netrc (0.11.0) - no_proxy_fix (0.1.2) - nokogiri (1.15.2) - mini_portile2 (~> 2.8.2) - racc (~> 1.4) - octokit (6.1.1) - faraday (>= 1, < 3) - sawyer (~> 0.9) - open4 (1.3.4) - optparse (0.1.1) - os (1.1.4) - ox (2.14.16) - plist (3.7.0) + nkf (0.2.0) public_suffix (4.0.7) - racc (1.7.0) - rake (13.0.6) - rchardet (1.8.0) - representable (3.2.0) - declarative (< 0.1.0) - trailblazer-option (>= 0.1.1, < 0.2.0) - uber (< 0.2.0) - retriable (3.1.2) - rexml (3.2.5) - rouge (2.0.7) + rexml (3.2.6) ruby-macho (2.5.1) - ruby2_keywords (0.0.5) - rubyzip (2.3.2) - sawyer (0.9.2) - addressable (>= 2.3.5) - faraday (>= 0.17.3, < 3) - security (0.1.3) - signet (0.17.0) - addressable (~> 2.8) - faraday (>= 0.17.5, < 3.a) - jwt (>= 1.5, < 3.0) - multi_json (~> 1.10) - simctl (1.6.10) - CFPropertyList - naturally - slack-notifier (2.4.0) - slather (2.7.4) - CFPropertyList (>= 2.2, < 4) - activesupport - clamp (~> 1.3) - nokogiri (>= 1.13.9) - xcodeproj (~> 1.21) - terminal-notifier (2.0.0) - terminal-table (1.8.0) - unicode-display_width (~> 1.1, >= 1.1.1) - thor (0.20.3) - trailblazer-option (0.1.2) - tty-cursor (0.7.1) - tty-screen (0.8.1) - tty-spinner (0.9.3) - tty-cursor (~> 0.7) - typhoeus (1.4.0) + typhoeus (1.4.1) ethon (>= 0.9.0) tzinfo (2.0.6) concurrent-ruby (~> 1.0) - uber (0.1.0) - unf (0.1.4) - unf_ext - unf_ext (0.0.8.2) - unicode-display_width (1.8.0) - webrick (1.8.1) - word_wrap (1.0.0) - xcodeproj (1.22.0) + xcodeproj (1.24.0) CFPropertyList (>= 2.3.3, < 4.0) atomos (~> 0.1.3) claide (>= 1.0.2, < 2.0) colored2 (~> 3.1) nanaimo (~> 0.3.0) rexml (~> 3.2.4) - xcov (1.8.1) - fastlane (>= 2.141.0, < 3.0.0) - multipart-post - slack-notifier - terminal-table - xcodeproj - xcresult (~> 0.2.0) - xcpretty (0.3.0) - rouge (~> 2.0.7) - xcpretty-travis-formatter (1.0.1) - xcpretty (~> 0.2, >= 0.0.7) - xcresult (0.2.1) PLATFORMS ruby DEPENDENCIES - circleci_artifact cocoapods - danger - danger-junit - danger-swiftlint - danger-xcov - fastlane - slather - xcov - xcpretty BUNDLED WITH - 2.1.4 + 2.5.3 diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..8d544cfe --- /dev/null +++ b/Makefile @@ -0,0 +1,30 @@ +# Use `set -o pipefail &&` to make xcpretty exit with the same code as xcodebuild. +# Use bash with pipefail option for all jobs +SHELL=/bin/zsh -o pipefail + +# Define xcbeautify +define xcbeautify + if [ -z "$(GITHUB_ACTIONS)" ]; then \ + swift run -c release --package-path ./BuildTools xcbeautify; \ + else \ + swift run -c release --package-path ./BuildTools xcbeautify --renderer github-actions; \ + fi +endef + +test_ios: + xcodebuild test -scheme BonMot -destination "platform=iOS Simulator,name=iPhone 15" -resultBundlePath test-results-ios/Bonmot-iOS.xcresult | $(call xcbeautify) + +test_macos: + xcodebuild test -scheme BonMot -destination "platform=macOS,arch=arm64" -resultBundlePath test-results-macos/Bonmot-macOS.xcresult | $(call xcbeautify) + +test_tvos: + xcodebuild test -scheme BonMot -destination "platform=tvOS Simulator,name=Apple TV" -resultBundlePath test-results-tvos/Bonmot-tvOS.xcresult | $(call xcbeautify) + +test_watchos: + xcodebuild test -scheme BonMot -destination "platform=watchOS Simulator,name=Apple Watch Series 9 (45mm)" -resultBundlePath test-results-watchos/Bonmot-watchOS.xcresult | $(call xcbeautify) + +clean_if_required: + rm -rf test-results-macos test-results-ios test-results-watchos test-results-tvos + +# Platforms listed in order of convenience to run, so if there's a failure early it's easier to test. +test_all: test_macos test_ios test_tvos test_watchos diff --git a/Package.resolved b/Package.resolved new file mode 100644 index 00000000..11820fa6 --- /dev/null +++ b/Package.resolved @@ -0,0 +1,23 @@ +{ + "pins" : [ + { + "identity" : "swift-snapshot-testing", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/swift-snapshot-testing.git", + "state" : { + "revision" : "5b0c434778f2c1a4c9b5ebdb8682b28e84dd69bd", + "version" : "1.15.4" + } + }, + { + "identity" : "swift-syntax", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-syntax", + "state" : { + "revision" : "fa8f95c2d536d6620cc2f504ebe8a6167c9fc2dd", + "version" : "510.0.1" + } + } + ], + "version" : 2 +} diff --git a/Package.swift b/Package.swift index 7c884f76..42de73ae 100644 --- a/Package.swift +++ b/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version:5.3 +// swift-tools-version:5.10 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription @@ -6,36 +6,40 @@ import PackageDescription let package = Package( name: "BonMot", platforms: [ - .iOS(.v11), - .macOS(.v10_11), - .tvOS(.v11), - .watchOS(.v2), + .iOS(.v12), + .macOS(.v10_13), + .tvOS(.v12), + .watchOS(.v4), ], products: [ .library( name: "BonMot", targets: ["BonMot"]), ], + dependencies: [ + .package(url: "https://github.com/pointfreeco/swift-snapshot-testing.git", from: "1.0.0"), + ], targets: [ .target( name: "BonMot", dependencies: [], path: "Sources", - exclude: ["Info.plist"] + exclude: [] ), .testTarget( name: "BonMotTests", - dependencies: ["BonMot"], + dependencies: [ + "BonMot", + .product(name: "SnapshotTesting", package: "swift-snapshot-testing"), + ], path: "Tests", exclude: [ - "Info.plist", - "BonMot-iOSTests.xctestplan", // *.xctestplan didn't seem to work - "BonMot-OSXTests.xctestplan", - "BonMot-tvOSTests.xctestplan", + "__Snapshots__", ], resources: [ - .process("Resources"), - ]), + .process("Resources") + ] + ), ], swiftLanguageVersions: [.v5] ) diff --git a/README.md b/README.md index c77fbe12..cb3ef970 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,14 @@ BonMot Logo -[![Swift 5.0](https://img.shields.io/badge/Swift-%205.0-orange.svg?style=flat)](https://swift.org) +[![Swift 5.9](https://img.shields.io/badge/Swift-%205.9-orange.svg?style=flat)](https://swift.org) [![CircleCI](https://img.shields.io/circleci/project/github/Rightpoint/BonMot/master.svg)](https://circleci.com/gh/Rightpoint/BonMot) [![Version](https://img.shields.io/cocoapods/v/BonMot.svg?style=flat)](http://cocoapods.org/pods/BonMot) [![License](https://img.shields.io/cocoapods/l/BonMot.svg?style=flat)](http://cocoapods.org/pods/BonMot) [![Platform](https://img.shields.io/cocoapods/p/BonMot.svg?style=flat)](http://cocoapods.org/pods/BonMot) -[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) [![Swift Package Manager compatible](https://img.shields.io/badge/Swift_Package_Manager-compatible-orange?style=flat)](https://swift.org/package-manager/) -[![codecov](https://codecov.io/gh/Rightpoint/BonMot/branch/master/graph/badge.svg)](https://codecov.io/gh/Rightpoint/BonMot) BonMot (pronounced *Bon Mo*, French for *good word*) is a Swift attributed string library. It abstracts away the complexities of the iOS, macOS, tvOS, and watchOS typography tools, freeing you to focus on making your text beautiful. -To run the example project, run `pod try BonMot`, or clone the repo, open `BonMot.xcodeproj`, and run the **Example-iOS** target. +To run the example project, run `pod try BonMot`, or clone the repo, open `Example/BonMot.xcodeproj`, and run the **Example-iOS** target. ### AttributedString @@ -369,14 +367,6 @@ it, simply add the following line to your Podfile: pod 'BonMot' ``` -## Carthage - -BonMot is also compatible with [Carthage](https://github.com/Carthage/Carthage). To install it, simply add the following line to your Cartfile: - -```ogdl -github "Rightpoint/BonMot" -``` - # Contributing Issues and pull requests are welcome! Please ensure that you have the latest [SwiftLint](https://github.com/realm/SwiftLint) installed before committing and that there are no style warnings generated when building. diff --git a/Sources/BonMot.h b/Sources/BonMot.h deleted file mode 100644 index 7d289696..00000000 --- a/Sources/BonMot.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// BonMot.h -// BonMot -// -// Created by Brian King on 9/24/16. -// Copyright © 2016 Rightpoint. All rights reserved. -// - -#import - -//! Project version number for BonMot. -FOUNDATION_EXPORT double BonMotVersionNumber; - -//! Project version string for BonMot. -FOUNDATION_EXPORT const unsigned char BonMotVersionString[]; - -// In this header, you should import all the public headers of your framework using statements like #import - - diff --git a/Sources/Compatibility.swift b/Sources/Compatibility.swift index d13e580f..7410df53 100644 --- a/Sources/Compatibility.swift +++ b/Sources/Compatibility.swift @@ -6,17 +6,16 @@ // Copyright © 2016 Rightpoint. All rights reserved. // -#if os(OSX) +#if canImport(AppKit) import AppKit -#else +#elseif canImport(UIKit) import UIKit #endif // This file declares extensions to system types to provide a compatible API // between Swift iOS, macOS, watchOS, and tvOS. -#if os(OSX) -#else +#if !canImport(AppKit) public extension NSParagraphStyle { typealias LineBreakMode = NSLineBreakMode diff --git a/Sources/Composable.swift b/Sources/Composable.swift index a8019366..31f2e8e6 100644 --- a/Sources/Composable.swift +++ b/Sources/Composable.swift @@ -6,14 +6,14 @@ // Copyright © 2016 Rightpoint. All rights reserved. // -#if os(OSX) +#if canImport(AppKit) import AppKit -#else +#elseif canImport(UIKit) import UIKit #endif /// Describes types which know how to append themselves to an attributed string. -/// Used to provide a flexible, extensible chaning API for BonMot. +/// Used to provide a flexible, extensible chaining API for BonMot. public protocol Composable { /// Append the receiver to a given attributed string. It is up to the @@ -210,7 +210,7 @@ extension String: Composable { } -#if os(iOS) || os(tvOS) || os(OSX) +#if !os(watchOS) extension BONImage: Composable { /// Append the receiver to `attributedString`, with `baseStyle` applied as @@ -231,7 +231,7 @@ extension BONImage: Composable { let baselinesOffsetForAttachment = baseStyle.baselineOffset ?? 0 let attachment = NSTextAttachment() - #if os(OSX) + #if canImport(AppKit) let imageIsTemplate = isTemplate #else let imageIsTemplate = (renderingMode != .alwaysOriginal) diff --git a/Sources/ContextualAlternates.swift b/Sources/ContextualAlternates.swift index 823a69d8..7ec717cd 100644 --- a/Sources/ContextualAlternates.swift +++ b/Sources/ContextualAlternates.swift @@ -6,9 +6,9 @@ // Copyright © 2016 Rightpoint. All rights reserved. // -#if os(OSX) +#if canImport(AppKit) import AppKit -#else +#elseif canImport(UIKit) import UIKit #endif diff --git a/Sources/Emphasis.swift b/Sources/Emphasis.swift index 9e66a464..9fe91d92 100644 --- a/Sources/Emphasis.swift +++ b/Sources/Emphasis.swift @@ -6,9 +6,9 @@ // Copyright © 2018 Rightpoint. All rights reserved. // -#if os(OSX) +#if canImport(AppKit) import AppKit -#else +#elseif canImport(UIKit) import UIKit #endif diff --git a/Sources/FontFeatures.swift b/Sources/FontFeatures.swift index 458e877e..caef9b19 100644 --- a/Sources/FontFeatures.swift +++ b/Sources/FontFeatures.swift @@ -6,9 +6,9 @@ // Copyright © 2016 Rightpoint. All rights reserved. // -#if os(OSX) +#if canImport(AppKit) import AppKit -#else +#elseif canImport(UIKit) import UIKit #endif @@ -48,7 +48,7 @@ fontAttributes[BONFontDescriptorFeatureSettingsAttribute] = features let descriptor = BONFontDescriptor(fontAttributes: fontAttributes) - #if os(OSX) + #if canImport(AppKit) return BONFont(descriptor: descriptor, size: pointSize)! #else return BONFont(descriptor: descriptor, size: pointSize) diff --git a/Sources/FontInspector.swift b/Sources/FontInspector.swift index 6d968241..145bf26f 100644 --- a/Sources/FontInspector.swift +++ b/Sources/FontInspector.swift @@ -6,8 +6,7 @@ // Copyright © 2016 Rightpoint. All rights reserved. // -// This is not supported on watchOS -#if os(iOS) || os(tvOS) || os(OSX) +#if !os(watchOS) import CoreText import Foundation diff --git a/Sources/Image+Tinting.swift b/Sources/Image+Tinting.swift index 7882fe3d..b1f8946f 100644 --- a/Sources/Image+Tinting.swift +++ b/Sources/Image+Tinting.swift @@ -6,17 +6,19 @@ // Copyright © 2016 Rightpoint. All rights reserved. // +#if !os(watchOS) + import Foundation -#if os(OSX) +#if canImport(AppKit) import AppKit -#else +#elseif canImport(UIKit) import UIKit #endif public extension BONImage { - #if os(OSX) + #if canImport(AppKit) /// Returns a copy of the receiver where the alpha channel is maintained, /// but every pixel's color is replaced with `color`. /// @@ -26,40 +28,18 @@ public extension BONImage { /// - Parameter theColor: The color to use to tint the receiver. /// - Returns: A tinted copy of the image. @objc(bon_tintedImageWithColor:) - func tintedImage(color theColor: BONColor) -> BONImage { - let imageRect = CGRect(origin: .zero, size: size) - - let image = NSImage(size: size) - - let rep = NSBitmapImageRep( - bitmapDataPlanes: nil, - pixelsWide: Int(size.width), - pixelsHigh: Int(size.height), - bitsPerSample: 8, - samplesPerPixel: 4, - hasAlpha: true, - isPlanar: false, - colorSpaceName: theColor.colorSpaceName, - bytesPerRow: 0, - bitsPerPixel: 0 - )! - - image.addRepresentation(rep) - - image.lockFocus() - - let context = NSGraphicsContext.current!.cgContext - - context.setBlendMode(.normal) - let cgImage = self.cgImage(forProposedRect: nil, context: nil, hints: nil)! - context.draw(cgImage, in: imageRect) - - // .sourceIn: resulting color = source color * destination alpha - context.setBlendMode(.sourceIn) - context.setFillColor(theColor.cgColor) - context.fill(imageRect) - - image.unlockFocus() + func tintedImage(color: BONColor) -> BONImage { + let image = NSImage(size: size, flipped: false) { rect in + color.set() + rect.fill() + self.draw( + in: rect, + from: NSRect(origin: .zero, size: self.size), + operation: .destinationIn, + fraction: 1 + ) + return true + } // Prevent further tinting image.isTemplate = false @@ -69,7 +49,7 @@ public extension BONImage { return image } - #else + #elseif canImport(UIKit) /// Returns a copy of the receiver where the alpha channel is maintained, /// but every pixel's color is replaced with `color`. /// @@ -79,33 +59,20 @@ public extension BONImage { /// - Parameter theColor: The color to use to tint the receiver. /// - Returns: A tinted copy of the image. @objc(bon_tintedImageWithColor:) - func tintedImage(color theColor: BONColor) -> BONImage { + func tintedImage(color: BONColor) -> BONImage { let imageRect = CGRect(origin: .zero, size: size) // Save original properties let originalCapInsets = capInsets let originalResizingMode = resizingMode let originalAlignmentRectInsets = alignmentRectInsets - UIGraphicsBeginImageContextWithOptions(size, false, scale) - let context = UIGraphicsGetCurrentContext()! - - // Flip the context vertically - context.translateBy(x: 0.0, y: size.height) - context.scaleBy(x: 1.0, y: -1.0) - - // Image tinting mostly inspired by http://stackoverflow.com/a/22528426/255489 + let format = UIGraphicsImageRendererFormat(for: UITraitCollection(displayScale: scale)) - context.setBlendMode(.normal) - context.draw(cgImage!, in: imageRect) - - // .sourceIn: resulting color = source color * destination alpha - context.setBlendMode(.sourceIn) - context.setFillColor(theColor.cgColor) - context.fill(imageRect) - - // Get new image - var image = UIGraphicsGetImageFromCurrentImageContext()! - UIGraphicsEndImageContext() + var image = UIGraphicsImageRenderer(size: size, format: format).image { rendererContext in + color.setFill() + UIRectFill(imageRect) + self.draw(at: .zero, blendMode: .destinationIn, alpha: 1) + } // Prevent further tinting image = image.withRenderingMode(.alwaysOriginal) @@ -126,3 +93,4 @@ public extension BONImage { #endif } +#endif diff --git a/Sources/Info.plist b/Sources/Info.plist deleted file mode 100644 index d3de8eef..00000000 --- a/Sources/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - NSPrincipalClass - - - diff --git a/Sources/Ligatures.swift b/Sources/Ligatures.swift index f4b54b15..7cbb5f8f 100644 --- a/Sources/Ligatures.swift +++ b/Sources/Ligatures.swift @@ -15,7 +15,7 @@ public enum Ligatures: Int { /// Default ligatures. case defaults = 1 - #if os(OSX) + #if canImport(AppKit) /// All ligatures. case all = 2 #endif diff --git a/Sources/NSAttributedString+BonMot.swift b/Sources/NSAttributedString+BonMot.swift index 225e8e03..103e842b 100644 --- a/Sources/NSAttributedString+BonMot.swift +++ b/Sources/NSAttributedString+BonMot.swift @@ -6,9 +6,9 @@ // Copyright © 2016 Rightpoint. All rights reserved. // -#if os(OSX) +#if canImport(AppKit) import AppKit -#else +#elseif canImport(UIKit) import UIKit #endif diff --git a/Sources/Platform.swift b/Sources/Platform.swift index 129fa73b..c5a5b49b 100644 --- a/Sources/Platform.swift +++ b/Sources/Platform.swift @@ -6,7 +6,7 @@ // Copyright © 2016 Rightpoint. All rights reserved. // -#if os(OSX) +#if canImport(AppKit) import AppKit public typealias BONColor = NSColor public typealias BONImage = NSImage @@ -18,7 +18,7 @@ let BONFontDescriptorFeatureSettingsAttribute = NSFontDescriptor.AttributeName.featureSettings let BONFontFeatureTypeIdentifierKey = NSFontDescriptor.FeatureKey.typeIdentifier let BONFontFeatureSelectorIdentifierKey = NSFontDescriptor.FeatureKey.selectorIdentifier -#else +#elseif canImport(UIKit) import UIKit public typealias BONColor = UIColor public typealias BONImage = UIImage diff --git a/Sources/StringStyle+Part.swift b/Sources/StringStyle+Part.swift index 18189391..69867bf6 100644 --- a/Sources/StringStyle+Part.swift +++ b/Sources/StringStyle+Part.swift @@ -6,9 +6,9 @@ // Copyright © 2016 Rightpoint. All rights reserved. // -#if os(OSX) +#if canImport(AppKit) import AppKit -#else +#elseif canImport(UIKit) import UIKit #endif diff --git a/Sources/StringStyle.swift b/Sources/StringStyle.swift index c52828bf..d07a2cc8 100644 --- a/Sources/StringStyle.swift +++ b/Sources/StringStyle.swift @@ -7,9 +7,9 @@ // // NOTE: Keep attributes in order to help reviewability. -#if os(OSX) +#if canImport(AppKit) import AppKit -#else +#elseif canImport(UIKit) import UIKit #endif diff --git a/Sources/StylisticAlternates.swift b/Sources/StylisticAlternates.swift index fe642d97..f3b7c727 100644 --- a/Sources/StylisticAlternates.swift +++ b/Sources/StylisticAlternates.swift @@ -6,9 +6,9 @@ // Copyright © 2016 Rightpoint. All rights reserved. // -#if os(OSX) +#if canImport(AppKit) import AppKit -#else +#elseif canImport(UIKit) import UIKit #endif diff --git a/Sources/Tab.swift b/Sources/Tab.swift index 6f419621..eaa182ae 100644 --- a/Sources/Tab.swift +++ b/Sources/Tab.swift @@ -6,9 +6,9 @@ // Copyright © 2016 Rightpoint. All rights reserved. // -#if os(OSX) +#if canImport(AppKit) import AppKit -#else +#elseif canImport(UIKit) import UIKit #endif diff --git a/Sources/Transform.swift b/Sources/Transform.swift index 914f9bc0..4500bb0c 100644 --- a/Sources/Transform.swift +++ b/Sources/Transform.swift @@ -6,9 +6,9 @@ // Copyright © 2017 Rightpoint. All rights reserved. // -#if os(OSX) +#if canImport(AppKit) import AppKit -#else +#elseif canImport(UIKit) import UIKit #endif diff --git a/Sources/UIKit/TextAlignmentConstraint.swift b/Sources/UIKit/TextAlignmentConstraint.swift index 8617b978..68234bee 100644 --- a/Sources/UIKit/TextAlignmentConstraint.swift +++ b/Sources/UIKit/TextAlignmentConstraint.swift @@ -8,14 +8,12 @@ #if !os(watchOS) -#if os(OSX) +#if canImport(AppKit) import AppKit -#else +#elseif canImport(UIKit) import UIKit #endif -private var TextAlignmentConstraintKVOContext = "BonMotTextAlignmentConstraintKVOContext" as NSString - /// Used to align various UI controls (anything with a font or attribute text) /// by properties that are not available with stock constraints: /// - cap height (the tops of capital letters) @@ -97,10 +95,12 @@ public class TextAlignmentConstraint: NSLayoutConstraint { private var item1: AnyObject! private var item2: AnyObject! + private static var kvoContext = 0 + // The class part of these selectors are ignored; it is there simply to satisfy Xcode's selector syntax. private static let fontSelector = #selector(getter: BONTextField.font) - #if os(OSX) + #if canImport(AppKit) private static let attributedTextSelector = #selector(getter: NSTextField.attributedStringValue) #else private static let attributedTextSelector = #selector(getter: UITextField.attributedText) @@ -150,13 +150,13 @@ public class TextAlignmentConstraint: NSLayoutConstraint { private func setupObservers() { for keyPath in fontKeyPaths { - addObserver(self, forKeyPath: keyPath, options: [], context: &TextAlignmentConstraintKVOContext) + addObserver(self, forKeyPath: keyPath, options: [], context: &Self.kvoContext) } } private func tearDownObservers() { for keyPath in fontKeyPaths { - removeObserver(self, forKeyPath: keyPath, context: &TextAlignmentConstraintKVOContext) + removeObserver(self, forKeyPath: keyPath, context: &Self.kvoContext) } } @@ -175,7 +175,7 @@ public class TextAlignmentConstraint: NSLayoutConstraint { // Can't use block-based KVO until we can use \NSLayoutConstraint.firstItem // swiftlint:disable:next block_based_kvo public override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey: Any]?, context: UnsafeMutableRawPointer?) { - guard context == &TextAlignmentConstraintKVOContext else { + guard context == &Self.kvoContext else { super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context) return } @@ -184,12 +184,7 @@ public class TextAlignmentConstraint: NSLayoutConstraint { } private func updateConstant() { - #if os(OSX) - let distanceFromTop1 = distanceFromTop(of: firstItem!, with: firstItemAttribute) - #else - let distanceFromTop1 = distanceFromTop(of: firstItem!, with: firstItemAttribute) - #endif - + let distanceFromTop1 = distanceFromTop(of: firstItem!, with: firstItemAttribute) let distanceFromTop2 = distanceFromTop(of: secondItem!, with: secondItemAttribute) let difference = distanceFromTop2 - distanceFromTop1 constant = difference diff --git a/Sources/XMLBuilder.swift b/Sources/XMLBuilder.swift index 5d33de46..a25260c6 100644 --- a/Sources/XMLBuilder.swift +++ b/Sources/XMLBuilder.swift @@ -6,9 +6,9 @@ // Copyright © 2016 Rightpoint. All rights reserved. // -#if os(OSX) +#if canImport(AppKit) import AppKit -#else +#elseif canImport(UIKit) import UIKit #endif @@ -222,22 +222,42 @@ public struct XMLParsingOptions: OptionSet { /// Error wrapper that includes the line and column number of the error. public struct XMLBuilderError: Error { + /// The original XML string that was passed in to the parser. + public let originalXML: String + /// The error generated by XMLParser. - public let parserError: Error + public let parserError: Error? + + /// The error code, if the error domain is XMLParser.errorDomain + public let errorCode: XMLParser.ErrorCode? + + /// The line number where the error occurred, if it can be determined. + public let line: Int? + + /// The column where the error occurred, if it can be determined. + public let column: Int? + +} + +final class BonMotXMLParser: XMLParser { - /// The line number where the error occurred. - public let line: Int + let data: Data - /// The column where the error occurred. - public let column: Int + override init(data: Data) { + self.data = data + super.init(data: data) + } + var xmlAsString: String { + String(decoding: data, as: UTF8.self) + } } class XMLBuilder: NSObject, XMLParserDelegate { static let internalTopLevelElement = "BonMotTopLevelContainer" - let parser: XMLParser + let parser: BonMotXMLParser let options: XMLParsingOptions var attributedString: NSMutableAttributedString var styles: [StringStyle] @@ -249,6 +269,8 @@ class XMLBuilder: NSObject, XMLParserDelegate { // when the current element ends, or when a new one is started. var currentString: String? + private var lastParseError: Error? + var topStyle: StringStyle { guard let style = styles.last else { fatalError("Invalid Style Stack") } return style @@ -267,11 +289,9 @@ class XMLBuilder: NSObject, XMLParserDelegate { string : "<\(XMLBuilder.internalTopLevelElement)>\(string)") - guard let data = xml.data(using: String.Encoding.utf8) else { - fatalError("Unable to convert to UTF8") - } + let data = Data(xml.utf8) self.attributedString = NSMutableAttributedString() - self.parser = XMLParser(data: data) + self.parser = BonMotXMLParser(data: data) self.options = options self.xmlStylers = [styler] // Remove the XMLStyler from the base style @@ -287,16 +307,31 @@ class XMLBuilder: NSObject, XMLParserDelegate { func parseAttributedString() throws -> NSMutableAttributedString { guard parser.parse() else { - let line = parser.lineNumber - let shiftColumn = (line == 1 && options.contains(.doNotWrapXML) == false) - let shiftSize = XMLBuilder.internalTopLevelElement.lengthOfBytes(using: String.Encoding.utf8) + 2 - let column = parser.columnNumber - (shiftColumn ? shiftSize : 0) - - throw XMLBuilderError(parserError: parser.parserError!, line: line, column: column) + // By default, we wrap bare strings in a custom XML tag because parsing requires a top-level tag. Due to this wrapping, the column numbers of thrown errors may not make sense. In order to remedy this, we store and return the full string passed to the XML parser, including any BonMot wrapping tags. That way, the error message will include a reference for comparing the column numbers. Not ideal, but better than nothing. We tried to manually adjust the column numbers, but it was fragile and complex and deemed not worth it. + + // n.b. per https://stackoverflow.com/a/38470343/255489, if the parser.parserError is NSXMLParserErrorDomain code 111, it signifies unexpected EOF. + + let lastParseNSError = lastParseError as? NSError + let line = lastParseNSError?.userInfo["NSXMLParserErrorLineNumber"] as? Int + let column = lastParseNSError?.userInfo["NSXMLParserErrorColumn"] as? Int + let errorCode = lastParseNSError?.domain == XMLParser.errorDomain ? (lastParseNSError?.code).flatMap(XMLParser.ErrorCode.init) : nil + + throw XMLBuilderError( + originalXML: parser.xmlAsString, + parserError: lastParseError, + errorCode: errorCode, + line: line, + column: column + ) } return attributedString } + func parser(_ parser: XMLParser, parseErrorOccurred parseError: Error) { + // parser.parseError may be the overall parse error, like "unexpected EOF," but not the first error encountered when parsing. The first error encountered comes through this delegate method, so this is where we grab it and store it. + self.lastParseError = parseError + } + /// When a node is entered, a new style is derived from the current style /// and the style for the node returned by the XMLStyler. If the style /// contains an `XMLStyler`, it is pushed onto the `XMLStyler` stack and diff --git a/Tests/AdaptiveStyleTests.swift b/Tests/AdaptiveStyleTests.swift index 9039dc74..2ba8adb1 100644 --- a/Tests/AdaptiveStyleTests.swift +++ b/Tests/AdaptiveStyleTests.swift @@ -7,12 +7,10 @@ // @testable import BonMot -#if canImport(UIKit) +#if canImport(UIKit) && (os(iOS) || os(tvOS)) import UIKit import XCTest -#if os(iOS) - @available(iOS 10.0, *) let defaultTraitCollection = UITraitCollection(preferredContentSizeCategory: UIContentSizeCategory.large) @@ -333,4 +331,3 @@ class AdaptiveStyleTests: XCTestCase { } #endif -#endif diff --git a/Tests/AssertHelpers.swift b/Tests/AssertHelpers.swift index 38741b8c..c9916d6b 100644 --- a/Tests/AssertHelpers.swift +++ b/Tests/AssertHelpers.swift @@ -9,15 +9,16 @@ import BonMot import XCTest -func dataFromImage(image theImage: BONImage) -> Data { - assert(theImage.size != .zero) - #if os(OSX) - let cgImageRef = theImage.cgImage(forProposedRect: nil, context: nil, hints: nil) - let bitmapImageRep = NSBitmapImageRep(cgImage: cgImageRef!) - let pngData = bitmapImageRep.representation(using: .png, properties: [:])! - return pngData - #else - return theImage.pngData()! +func dataFromImage(_ image: BONImage) throws -> Data { + assert(image.size != .zero) + // https://stackoverflow.com/a/26802188/255489 + #if canImport(AppKit) + let tiffRepresentation = try XCTUnwrap(image.tiffRepresentation) + let imageRep = try XCTUnwrap(NSBitmapImageRep(data: tiffRepresentation)) + let data = try XCTUnwrap(imageRep.representation(using: .png, properties: [:])) + return data + #elseif canImport(UIKit) + return image.pngData()! #endif } @@ -79,18 +80,6 @@ func BONAssert(attributes dictionary: StyleAttributes?, query: (NSParagraphSt XCTAssertEqual(value, actualValue, file: file, line: line) } -func BONAssertEqualImages(_ image1: BONImage, _ image2: BONImage, file: StaticString = #filePath, line: UInt = #line) { - let data1 = dataFromImage(image: image1) - let data2 = dataFromImage(image: image2) - XCTAssertEqual(data1, data2, file: file, line: line) -} - -func BONAssertNotEqualImages(_ image1: BONImage, _ image2: BONImage, file: StaticString = #filePath, line: UInt = #line) { - let data1 = dataFromImage(image: image1) - let data2 = dataFromImage(image: image2) - XCTAssertNotEqual(data1, data2, file: file, line: line) -} - func BONAssertEqualFonts(_ font1: BONFont, _ font2: BONFont, _ message: @autoclosure () -> String = "", file: StaticString = #filePath, line: UInt = #line) { let descriptor1 = font1.fontDescriptor let descriptor2 = font2.fontDescriptor diff --git a/Tests/AttributedStringStyleTests.swift b/Tests/AttributedStringStyleTests.swift index fbe5dbc4..6544662d 100644 --- a/Tests/AttributedStringStyleTests.swift +++ b/Tests/AttributedStringStyleTests.swift @@ -217,6 +217,8 @@ class StringStyleTests: XCTestCase { checkKerningValues(customRangesToValues, startingOnLine: customRangesToValuesLine, in: customStyled) } + #if !os(watchOS) + func testNumberSpacingStyle() { let style = StringStyle(.font(BONFont(name: "EBGaramond12-Regular", size: 24)!), .numberSpacing(.monospaced)) for (style, fullStyle) in additivePermutations(for: style) { @@ -553,6 +555,8 @@ class StringStyleTests: XCTestCase { XCTAssertFalse(stillHasAltSixDict) } + #endif + func testStyleBlockRules() throws { let string = #"012"# diff --git a/Tests/BONFontBehaviorTests.swift b/Tests/BONFontBehaviorTests.swift index e1cd25d8..1789858c 100644 --- a/Tests/BONFontBehaviorTests.swift +++ b/Tests/BONFontBehaviorTests.swift @@ -31,9 +31,9 @@ class BONFontBehaviorTests: XCTestCase { BONFontFeatureSelectorIdentifierKey: 1, ], ] - #if os(OSX) + #if canImport(AppKit) let newAttributes = BONFont(descriptor: BONFontDescriptor(fontAttributes: attributes), size: 0)?.fontDescriptor.fontAttributes ?? [:] - #else + #elseif canImport(UIKit) let newAttributes = BONFont(descriptor: BONFontDescriptor(fontAttributes: attributes), size: 0).fontDescriptor.fontAttributes #endif XCTAssertEqual(newAttributes.count, 2) @@ -70,7 +70,9 @@ class BONFontBehaviorTests: XCTestCase { else { XCTAssertEqual(newAttributes.count, 2) } + #if !os(watchOS) XCTAssertEqual(newAttributes["NSCTFontUIUsageAttribute"] as? BonMotTextStyle, testTextStyle) + #endif XCTAssertEqual(newAttributes["NSFontSizeAttribute"] as? Int, 10) } #endif diff --git a/Tests/BonMot-OSXTests.xctestplan b/Tests/BonMot-OSXTests.xctestplan deleted file mode 100644 index d052db10..00000000 --- a/Tests/BonMot-OSXTests.xctestplan +++ /dev/null @@ -1,28 +0,0 @@ -{ - "configurations" : [ - { - "id" : "0F5DF122-0917-4A54-80A6-27400F440DC7", - "name" : "Configuration 1", - "options" : { - - } - } - ], - "defaultOptions" : { - - }, - "testTargets" : [ - { - "skippedTests" : [ - "FontInspectorTests\/testAvailableFeatures()", - "ImageTintingTests\/testImageTinting()" - ], - "target" : { - "containerPath" : "container:BonMot.xcodeproj", - "identifier" : "ABCD3E271D980E5500273936", - "name" : "BonMot-OSXTests" - } - } - ], - "version" : 1 -} diff --git a/Tests/BonMot-iOSTests.xctestplan b/Tests/BonMot-iOSTests.xctestplan deleted file mode 100644 index e391aa35..00000000 --- a/Tests/BonMot-iOSTests.xctestplan +++ /dev/null @@ -1,28 +0,0 @@ -{ - "configurations" : [ - { - "id" : "6ADF4AFA-7D8F-49C5-B1DE-DF5C0BB3F684", - "name" : "Configuration 1", - "options" : { - - } - } - ], - "defaultOptions" : { - - }, - "testTargets" : [ - { - "skippedTests" : [ - "FontInspectorTests\/testAvailableFeatures()", - "FontInspectorTests\/testHasFeature()" - ], - "target" : { - "containerPath" : "container:BonMot.xcodeproj", - "identifier" : "ABCBFD5E1D96E61100FAD37A", - "name" : "BonMot-iOSTests" - } - } - ], - "version" : 1 -} diff --git a/Tests/BonMot-tvOSTests.xctestplan b/Tests/BonMot-tvOSTests.xctestplan deleted file mode 100644 index 0d184a1b..00000000 --- a/Tests/BonMot-tvOSTests.xctestplan +++ /dev/null @@ -1,28 +0,0 @@ -{ - "configurations" : [ - { - "id" : "95BFCB18-95F2-48B0-96F1-C67F6DA0DE0C", - "name" : "Configuration 1", - "options" : { - - } - } - ], - "defaultOptions" : { - - }, - "testTargets" : [ - { - "skippedTests" : [ - "FontInspectorTests\/testAvailableFeatures()", - "FontInspectorTests\/testHasFeature()" - ], - "target" : { - "containerPath" : "container:BonMot.xcodeproj", - "identifier" : "ABCD3DEE1D96F6E200273936", - "name" : "BonMot-tvOSTests" - } - } - ], - "version" : 1 -} diff --git a/Tests/Compatibility+Tests.swift b/Tests/Compatibility+Tests.swift index 5e39d65d..7eec4d61 100644 --- a/Tests/Compatibility+Tests.swift +++ b/Tests/Compatibility+Tests.swift @@ -8,18 +8,21 @@ import BonMot -#if os(OSX) +#if canImport(AppKit) import AppKit let BONFontDescriptorFeatureSettingsAttribute = NSFontDescriptor.AttributeName.featureSettings let BONFontFeatureTypeIdentifierKey = NSFontDescriptor.FeatureKey.typeIdentifier let BONFontFeatureSelectorIdentifierKey = NSFontDescriptor.FeatureKey.selectorIdentifier typealias BONView = NSView -#else +#elseif canImport(UIKit) import UIKit let BONFontDescriptorFeatureSettingsAttribute = UIFontDescriptor.AttributeName.featureSettings let BONFontFeatureTypeIdentifierKey = UIFontDescriptor.FeatureKey.featureIdentifier let BONFontFeatureSelectorIdentifierKey = UIFontDescriptor.FeatureKey.typeIdentifier - typealias BONView = UIView +#endif + +#if os(iOS) +typealias BONView = UIView #endif extension NSAttributedString.Key: ExpressibleByStringLiteral { diff --git a/Tests/ComposableTests.swift b/Tests/ComposableTests.swift index 81cfb5e2..2b029b1c 100644 --- a/Tests/ComposableTests.swift +++ b/Tests/ComposableTests.swift @@ -18,21 +18,25 @@ import AppKit #if canImport(UIKit) || canImport(AppKit) class ComposableTests: XCTestCase { + #if !os(watchOS) func robotImage() throws -> BONImage { - #if os(OSX) + #if canImport(AppKit) let imageForTest = testBundle.image(forResource: "robot") - #else + #elseif canImport(UIKit) let imageForTest = UIImage(named: "robot", in: testBundle, compatibleWith: nil) #endif return try XCTUnwrap(imageForTest) } + #endif + #if !os(watchOS) func testImageConstructor() throws { let imageForTest = try robotImage() let imageString = imageForTest.attributedString() let string = "\(Special.objectReplacementCharacter)" XCTAssertEqual(imageString.string, string) } + #endif func testBasicJoin() { let string = NSAttributedString.composed(of: ["A", "B", "C"], separator: NSAttributedString(string: "-")) @@ -44,6 +48,7 @@ class ComposableTests: XCTestCase { XCTAssertEqual("A-B-C", string.string) } + #if !os(watchOS) func testAttributesArePassedAlongExtend() throws { let imageForTest = try robotImage() @@ -105,6 +110,7 @@ class ComposableTests: XCTestCase { XCTAssertEqual(expectedWidth, width, accuracy: 1.0, line: line) } } + #endif func testBaseStyleIsOverridden() { func check(forPart thePart: StringStyle.Part, _ attribute: NSAttributedString.Key, _ expected: T, line: UInt = #line) { diff --git a/Tests/FontInspectorTests.swift b/Tests/FontInspectorTests.swift index 2574477f..1b9054f3 100644 --- a/Tests/FontInspectorTests.swift +++ b/Tests/FontInspectorTests.swift @@ -9,6 +9,7 @@ @testable import BonMot import XCTest +#if !os(watchOS) class FontInspectorTests: XCTestCase { let systemFont = BONFont.systemFont(ofSize: 24) @@ -123,3 +124,4 @@ class FontInspectorTests: XCTestCase { XCTAssertEqual(garamond.availableFontFeatures(includeIdentifiers: false), garamondControlString) } } +#endif diff --git a/Tests/Helpers.swift b/Tests/Helpers.swift index 028bc92a..85004170 100644 --- a/Tests/Helpers.swift +++ b/Tests/Helpers.swift @@ -13,8 +13,7 @@ import XCTest // Override Foundation's StringStyle from iOS 15+, macOS 12+, tvOS 15+, watchOS 8+. typealias StringStyle = BonMot.StringStyle -#if os(OSX) -#else +#if os(iOS) || os(tvOS) import UIKit let titleTextStyle = UIFont.TextStyle.title1 let differentTextStyle = UIFont.TextStyle.title2 @@ -81,8 +80,7 @@ let styleB = StringStyle( .tailIndent(10) ) -#if os(OSX) -#else +#if os(iOS) || os(tvOS) let adaptiveStyle = StringStyle( .font(.fontA), .color(.colorA), @@ -204,66 +202,32 @@ extension NSAttributedString { return attributesByRange } - func snapshotForTesting() -> BONImage? { + #if !os(watchOS) + func snapshotForTesting() throws -> BONImage { let bigSize = CGSize(width: 10_000, height: 10_000) // Bug: on macOS, attached images are not taken into account // when measuring attributed strings: http://www.openradar.me/28639290 - let rect = boundingRect(with: bigSize, options: .usesLineFragmentOrigin, context: nil) + let boundingRect = boundingRect(with: bigSize, options: .usesLineFragmentOrigin, context: nil) - guard !rect.isEmpty else { - return nil + guard !boundingRect.isEmpty else { + struct ImageBoundingRectEmpty: Error {} + throw ImageBoundingRectEmpty() } - #if os(OSX) - let image = NSImage(size: rect.size) - - let rep = NSBitmapImageRep( - bitmapDataPlanes: nil, - pixelsWide: Int(rect.size.width), - pixelsHigh: Int(rect.size.height), - bitsPerSample: 8, - samplesPerPixel: 4, - hasAlpha: true, - isPlanar: false, - colorSpaceName: .deviceRGB, - bytesPerRow: 0, - bitsPerPixel: 0 - )! - - image.addRepresentation(rep) - - image.lockFocus() - - draw(with: rect, options: .usesLineFragmentOrigin, context: nil) - - image.unlockFocus() - return image - #else - UIGraphicsBeginImageContextWithOptions(rect.size, false, 0.0) - draw(with: rect, options: .usesLineFragmentOrigin, context: nil) - let image = UIGraphicsGetImageFromCurrentImageContext()! - UIGraphicsEndImageContext() - return image - #endif - } - -} - -extension BONView { - - func testingSnapshot() -> BONImage { - #if os(OSX) - let dataOfView = dataWithPDF(inside: bounds) - let image = NSImage(data: dataOfView)! - return image - #else - UIGraphicsBeginImageContextWithOptions(bounds.size, isOpaque, 0.0) - layer.render(in: UIGraphicsGetCurrentContext()!) - let image = UIGraphicsGetImageFromCurrentImageContext()! - UIGraphicsEndImageContext() - return image + #if canImport(AppKit) + let image = NSImage(size: boundingRect.size, flipped: false) { rect in + self.draw(with: boundingRect, options: .usesLineFragmentOrigin, context: nil) + return true + } + return image + #elseif canImport(UIKit) + let format = UIGraphicsImageRendererFormat(for: UITraitCollection(displayScale: 1)) + return UIGraphicsImageRenderer(size: boundingRect.size, format: format).image { _ in + self.draw(with: boundingRect, options: .usesLineFragmentOrigin, context: nil) + } #endif } + #endif } diff --git a/Tests/ImageTintingTests.swift b/Tests/ImageTintingTests.swift index 36afce72..9c79bde2 100644 --- a/Tests/ImageTintingTests.swift +++ b/Tests/ImageTintingTests.swift @@ -6,30 +6,37 @@ // Copyright © 2016 Rightpoint. All rights reserved. // -#if os(OSX) +#if canImport(AppKit) import AppKit -#else +#elseif canImport(UIKit) import UIKit #endif -@testable import BonMot +import SnapshotTesting import XCTest +@testable import BonMot + +#if !os(watchOS) class ImageTintingTests: XCTestCase { + override func setUp() async throws { +// isRecording = true; #warning("Don't commit me!") + } + func logoImage() throws -> BONImage { - #if os(OSX) + #if canImport(AppKit) let imageForTest = testBundle.image(forResource: "rz-logo-black") - #else + #elseif canImport(UIKit) let imageForTest = UIImage(named: "rz-logo-black", in: testBundle, compatibleWith: nil) #endif return try XCTUnwrap(imageForTest) } var raizlabsRed: BONColor { - #if os(OSX) + #if canImport(AppKit) NSColor(deviceRed: 0.92549, green: 0.352941, blue: 0.301961, alpha: 1.0) - #else + #elseif canImport(UIKit) UIColor(red: 0.92549, green: 0.352941, blue: 0.301961, alpha: 1.0) #endif } @@ -37,79 +44,66 @@ class ImageTintingTests: XCTestCase { let accessibilityDescription = "I’m the very model of a modern accessible image." func testImageTinting() throws { - #if SWIFT_PACKAGE && os(OSX) - try XCTSkipIf(true, "Doesn't work on macOS SPM targets") - #endif - let blackImageName = "rz-logo-black" - let redImageName = "rz-logo-red" + let testNameSuffix: String - #if os(OSX) - let sourceImage = try XCTUnwrap(testBundle.image(forResource: blackImageName)) - let controlTintedImage = try XCTUnwrap(testBundle.image(forResource: redImageName)) + #if canImport(AppKit) + let sourceImage = try XCTUnwrap(Bundle.module.image(forResource: blackImageName)) let testTintedImage = sourceImage.tintedImage(color: raizlabsRed) - #else + testNameSuffix = "AppKit" + #elseif canImport(UIKit) let sourceImage = try XCTUnwrap(UIImage(named: blackImageName, in: testBundle, compatibleWith: nil)) - let controlTintedImage = try XCTUnwrap(UIImage(named: redImageName, in: testBundle, compatibleWith: nil)) let testTintedImage = sourceImage.tintedImage(color: raizlabsRed) + testNameSuffix = "UIKit" #endif - BONAssertEqualImages(controlTintedImage, testTintedImage) + assertSnapshot(of: try testTintedImage.snapshotForTesting(), as: .image, testName: #function + "_" + testNameSuffix) } func testTintingInAttributedString() throws { - #if os(iOS) || os(tvOS) - try XCTSkipIf(true, "No longer working for iOS/tvOS targets") - #endif - let imageForTest = try logoImage() - let untintedString = NSAttributedString.composed(of: [ - imageForTest.styled(with: .color(raizlabsRed)), - ]) + let testNameSuffix: String - #if os(OSX) + #if canImport(AppKit) let tintableImage = imageForTest tintableImage.isTemplate = true - #else + testNameSuffix = "AppKit" + #elseif canImport(UIKit) let tintableImage = imageForTest.withRenderingMode(.alwaysTemplate) + testNameSuffix = "UIKit" #endif let tintedString = NSAttributedString.composed(of: [ tintableImage.styled(with: .color(raizlabsRed)), ]) - let untintedResult = untintedString.snapshotForTesting() - let tintedResult = tintedString.snapshotForTesting() - - XCTAssertNotNil(untintedResult) - XCTAssertNotNil(tintedResult) + let tintResult = try tintedString.snapshotForTesting() - BONAssertNotEqualImages(untintedResult!, tintedResult!) + assertSnapshot(of: try tintResult.snapshotForTesting(), as: .image, testName: #function + "_" + testNameSuffix) } func testNotTintingInAttributedString() throws { - #if os(iOS) || os(tvOS) - try XCTSkipIf(true, "No longer working for iOS/tvOS targets") - #endif + var imageForTest = try logoImage() - let imageForTest = try logoImage() + let testNameSuffix: String + + #if canImport(AppKit) + imageForTest.isTemplate = false + testNameSuffix = "AppKit" + #elseif canImport(UIKit) + imageForTest = imageForTest.withRenderingMode(.alwaysOriginal) + testNameSuffix = "UIKit" + #endif - let untintedString = NSAttributedString.composed(of: [ - imageForTest, - ]) - let tintAttemptString = NSAttributedString.composed(of: [ + let tintString = NSAttributedString.composed(of: [ imageForTest.styled(with: .color(raizlabsRed)), ]) - let untintedResult = untintedString.snapshotForTesting() - let tintAttemptResult = tintAttemptString.snapshotForTesting() - - XCTAssertNotNil(untintedResult) - XCTAssertNotNil(tintAttemptResult) + let tintResult = try tintString.snapshotForTesting() - BONAssertEqualImages(untintedResult!, tintAttemptResult!) + assertSnapshot(of: try tintResult.snapshotForTesting(), as: .image, testName: #function + "_" + testNameSuffix) } func testAccessibilityIOSAndTVOS() throws { @@ -123,14 +117,35 @@ class ImageTintingTests: XCTestCase { #endif } - func testAccessibilityOSX() throws { + #if canImport(AppKit) + func testAccessibilityMacOS() throws { let imageForTest = try logoImage() - #if os(OSX) imageForTest.accessibilityDescription = accessibilityDescription let tintedImage = imageForTest.tintedImage(color: raizlabsRed) XCTAssertEqual(tintedImage.accessibilityDescription, accessibilityDescription) XCTAssertEqual(tintedImage.accessibilityDescription, tintedImage.accessibilityDescription) - #endif + } + #endif +} +#endif + +extension BONImage { + func snapshotForTesting() throws -> BONImage { +#if canImport(AppKit) + let renderedCGImage = try XCTUnwrap( + self.cgImage( + forProposedRect: nil, + context: nil, + hints: [ + // The image will use the DPI of the display of the machine it is running on. That's 144dpi for Retina, 72dpi for non-Retina, and it could potentially be other values as well. Force to 72dpi non-Retina for testing. + .init(rawValue: NSDeviceDescriptionKey.resolution.rawValue): CGSize(width: 72, height: 72), + ] + ) + ) + return NSImage(cgImage: renderedCGImage, size: size) +#else + return self +#endif } } diff --git a/Tests/Info.plist b/Tests/Info.plist deleted file mode 100644 index 6c6c23c4..00000000 --- a/Tests/Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - - diff --git a/Tests/NSAttributedStringDebugTests.swift b/Tests/NSAttributedStringDebugTests.swift index cce44ba9..db4fe7a9 100644 --- a/Tests/NSAttributedStringDebugTests.swift +++ b/Tests/NSAttributedStringDebugTests.swift @@ -14,8 +14,10 @@ class NSAttributedStringDebugTests: XCTestCase { func robotImage() throws -> BONImage { #if os(OSX) let imageForTest = testBundle.image(forResource: "robot") - #else + #elseif os(iOS) || os(tvOS) let imageForTest = UIImage(named: "robot", in: testBundle, compatibleWith: nil) + #else + let imageForTest = UIImage(named: "robot", in: testBundle, with: nil) #endif return try XCTUnwrap(imageForTest) } @@ -50,6 +52,7 @@ class NSAttributedStringDebugTests: XCTestCase { } } + #if !os(watchOS) func testComposedDebugRepresentation() throws { let imageForTest = try robotImage() @@ -67,6 +70,7 @@ class NSAttributedStringDebugTests: XCTestCase { XCTAssertEqual(testCase.1, debugString, line: testCase.2) } } + #endif func testThatNSAttributedStringSpeaksUTF16() { // We don't actually need to test this - just demonstrating how it works diff --git a/Tests/Resources/Images.xcassets/Contents.json b/Tests/Resources/Images.xcassets/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/Tests/Resources/Images.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Tests/Resources/Images.xcassets/robot.imageset/Contents.json b/Tests/Resources/Images.xcassets/robot.imageset/Contents.json new file mode 100644 index 00000000..c2a662d3 --- /dev/null +++ b/Tests/Resources/Images.xcassets/robot.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "robot.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Tests/Resources/robot.png b/Tests/Resources/Images.xcassets/robot.imageset/robot.png similarity index 100% rename from Tests/Resources/robot.png rename to Tests/Resources/Images.xcassets/robot.imageset/robot.png diff --git a/Tests/Resources/Images.xcassets/rz-logo-black.imageset/Contents.json b/Tests/Resources/Images.xcassets/rz-logo-black.imageset/Contents.json new file mode 100644 index 00000000..043b9642 --- /dev/null +++ b/Tests/Resources/Images.xcassets/rz-logo-black.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "rz-logo-black.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Tests/Resources/rz-logo-black.png b/Tests/Resources/Images.xcassets/rz-logo-black.imageset/rz-logo-black.png similarity index 100% rename from Tests/Resources/rz-logo-black.png rename to Tests/Resources/Images.xcassets/rz-logo-black.imageset/rz-logo-black.png diff --git a/Tests/Resources/rz-logo-red.png b/Tests/Resources/rz-logo-red.png deleted file mode 100644 index 3cfe3d96..00000000 Binary files a/Tests/Resources/rz-logo-red.png and /dev/null differ diff --git a/Tests/TextAlignmentConstraintTests.swift b/Tests/TextAlignmentConstraintTests.swift index 10bbefba..cb21dadc 100644 --- a/Tests/TextAlignmentConstraintTests.swift +++ b/Tests/TextAlignmentConstraintTests.swift @@ -8,15 +8,16 @@ import Foundation -#if os(OSX) +#if canImport(AppKit) import AppKit -#else +#elseif canImport(UIKit) import UIKit #endif @testable import BonMot import XCTest +#if !os(watchOS) class TextAlignmentConstraintTests: XCTestCase { private func field(withText text: String, fontSize: CGFloat) -> BONTextField { @@ -25,9 +26,9 @@ class TextAlignmentConstraintTests: XCTestCase { field.font = BONFont(name: "Avenir-Roman", size: fontSize) - #if os(OSX) + #if canImport(AppKit) field.stringValue = text - #else + #elseif canImport(UIKit) field.text = text #endif @@ -186,3 +187,4 @@ class TextAlignmentConstraintTests: XCTestCase { } } +#endif diff --git a/Tests/UIKitBehaviorTests.swift b/Tests/UIKitBehaviorTests.swift index 9d50c880..34e4949b 100644 --- a/Tests/UIKitBehaviorTests.swift +++ b/Tests/UIKitBehaviorTests.swift @@ -16,7 +16,7 @@ let defaultTextFieldFontSize: CGFloat = 38 let defaultTextViewFontSize: CGFloat = 38 #endif -#if canImport(UIKit) +#if canImport(UIKit) && !os(watchOS) import UIKit class UIKitBehaviorTests: XCTestCase { @@ -94,8 +94,7 @@ class UIKitBehaviorTests: XCTestCase { #endif textField.text = "Testing" // By default the font is nil - XCTAssertNotNil(textField.font) - XCTAssertEqual(textField.font?.pointSize, defaultTextViewFontSize) + XCTAssertNil(textField.font) textField.font = largeFont XCTAssertEqual(textField.font?.pointSize, 20) diff --git a/Tests/UIKitBonMotTests.swift b/Tests/UIKitBonMotTests.swift index d8ca6db8..048349db 100644 --- a/Tests/UIKitBonMotTests.swift +++ b/Tests/UIKitBonMotTests.swift @@ -9,7 +9,7 @@ import BonMot import XCTest -#if canImport(UIKit) +#if canImport(UIKit) && !os(watchOS) import UIKit class UIKitBonMotTests: XCTestCase { diff --git a/Tests/XMLTagStyleBuilderTests.swift b/Tests/XMLTagStyleBuilderTests.swift index b20efa86..e189b9ca 100644 --- a/Tests/XMLTagStyleBuilderTests.swift +++ b/Tests/XMLTagStyleBuilderTests.swift @@ -149,28 +149,75 @@ class XMLTagStyleBuilderTests: XCTestCase { /// Test the line and column information returned in the error. Note that this is just testing our adapting of the column for the root node insertion. func testErrorLocation() { - func errorLocation(forXML xml: String, _ options: XMLParsingOptions = []) -> (line: Int, column: Int) { + struct ParseErrorResult: Equatable { + let originalXML: String + let errorCode: XMLParser.ErrorCode? + let line: Int? + let column: Int? + } + + func errorResult(forXML xml: String, options: XMLParsingOptions = []) -> ParseErrorResult? { do { - let attributedString = try NSAttributedString.composed(ofXML: xml) + let attributedString = try NSAttributedString.composed(ofXML: xml, options: options) XCTFail("compose should of thrown, got \(attributedString)") } catch let error as XMLBuilderError { - return (error.line, error.column) + return ParseErrorResult( + originalXML: error.originalXML, + errorCode: error.errorCode, + line: error.line, + column: error.column + ) } catch { XCTFail("Did not get an XMLError") } - return (0, 0) + return nil } - XCTAssertEqual(errorLocation(forXML: "Text \r\n \r\n Text ", + errorCode: .nameRequiredError, + line: 1, + column: 34 + ) + ) + + XCTAssertEqual( + errorResult(forXML: "Text \r\n Text \r\n ", + errorCode: .nameRequiredError, + line: 2, + column: 5 + ) + ) + + XCTAssertEqual( + errorResult(forXML: " \r\n \r\n ex - # Don't fail the entire lane when running tests, but print failure to STDERR - STDERR.puts ex - end -end - -def coverage(scheme:, devices: nil, destination: nil) - scan_output_path = "#{BUILD_PATH}/#{scheme}/scan" - - # NOTE: Running too many devices concurrently breaks CircleCI resource limits - disable_concurrent_testing = false - if ENV['CIRCLE_BUILD_NUM'] - disable_concurrent_testing = true - end - - begin - scan( - output_types: 'junit,html', - devices: devices, - destination: destination, - scheme: scheme, - output_directory: scan_output_path, - code_coverage: true, - derived_data_path: DERIVED_DATA_PATH, - result_bundle: true, - disable_concurrent_testing: disable_concurrent_testing - ) - rescue => ex - # Don't fail the entire lane when running tests, but print failure to STDERR - STDERR.puts ex - end - - result_bundle_path = Scan.cache[:result_bundle_path] - - # Extract coverage from Xcode 11 xcresult bundle - absolute_result_bundle_path = "#{Dir.pwd}/../#{result_bundle_path}" - absolute_coverage_path = "#{absolute_result_bundle_path}-coverage" - sh("xcparse codecov #{absolute_result_bundle_path} #{absolute_coverage_path}") - xccoverage_files = Dir.glob("#{absolute_coverage_path}/**/action.xccovreport").sort_by { |filename| File.mtime(filename) }.reverse - xccov_file_direct_path = xccoverage_files.first - - slather_use_circleci = "false" - - if ENV['CIRCLE_BUILD_NUM'] - slather_use_circleci = "true" - end - - xcov( - project: PROJECT_NAME, - scheme: scheme, - output_directory: "#{BUILD_PATH}/#{scheme}/xcov", - xccov_file_direct_path: xccov_file_direct_path - ) - - # Add binaries here as you create internal frameworks - slather_binaries = ['BonMot'] - slather_output_directory = "#{BUILD_PATH}/#{scheme}/slather" - - # html and cobertura_xml output must be run separately - slather( - proj: PROJECT_NAME, - scheme: scheme, - binary_basename: slather_binaries, - output_directory: slather_output_directory, - html: "true", - build_directory: DERIVED_DATA_PATH - ) - # Using Cobertura XML allows us to upload to Codecov.io - # Uploading to codecov is handled separately in the .circleci/config.yml - slather( - proj: PROJECT_NAME, - scheme: scheme, - binary_basename: slather_binaries, - output_directory: slather_output_directory, - circleci: slather_use_circleci, - cobertura_xml: "true", - build_directory: DERIVED_DATA_PATH - ) - - xchtmlreport(result_bundle_path: result_bundle_path, - enable_junit: true) - - result_bundle_path -end - -def get_devices() - # The full list of iOS simulators available on CircleCI - # https://circleci.com/docs/2.0/testing-ios/#supported-xcode-versions - devices = [] - devices.push("iPhone SE") - devices.push("iPhone X") - devices.push("iPhone 11 Pro Max") - devices.push("iPhone 8") - devices.push("iPhone 8 Plus") - devices.push("iPad Pro (10.5-inch)") - devices -end diff --git a/fastlane/Pluginfile b/fastlane/Pluginfile deleted file mode 100644 index f4b8ec74..00000000 --- a/fastlane/Pluginfile +++ /dev/null @@ -1,4 +0,0 @@ -# Autogenerated by fastlane -# -# Ensure this file is checked in to source control! - diff --git a/fastlane/README.md b/fastlane/README.md deleted file mode 100644 index d77f5f4e..00000000 --- a/fastlane/README.md +++ /dev/null @@ -1,104 +0,0 @@ -fastlane documentation ----- - -# Installation - -Make sure you have the latest version of the Xcode command line tools installed: - -```sh -xcode-select --install -``` - -For _fastlane_ installation instructions, see [Installing _fastlane_](https://docs.fastlane.tools/#installing-fastlane) - -# Available Actions - -### coverage_all - -```sh -[bundle exec] fastlane coverage_all -``` - -Tests & Coverage: iOS, tvOS, macOS. Builds: watchOS. - -### test_all - -```sh -[bundle exec] fastlane test_all -``` - -Tests: iOS, tvOS, macOS. Builds: watchOS. - ----- - - -## Mac - -### mac coverage_macos - -```sh -[bundle exec] fastlane mac coverage_macos -``` - -Runs Tests & Generates Code Coverage Reports for macOS - -### mac test_macos - -```sh -[bundle exec] fastlane mac test_macos -``` - -Runs Tests for macOS - ----- - - -## iOS - -### ios coverage_ios - -```sh -[bundle exec] fastlane ios coverage_ios -``` - -Runs Tests & Generates Code Coverage Reports for latest iOS - -### ios test_ios - -```sh -[bundle exec] fastlane ios test_ios -``` - -Runs Tests for latest iOS - -### ios coverage_tvos - -```sh -[bundle exec] fastlane ios coverage_tvos -``` - -Runs Tests & Generates Code Coverage Reports for tvOS - -### ios test_tvos - -```sh -[bundle exec] fastlane ios test_tvos -``` - -Runs Tests for tvOS - -### ios build_watchos - -```sh -[bundle exec] fastlane ios build_watchos -``` - -Build for watchOS - ----- - -This README.md is auto-generated and will be re-generated every time [_fastlane_](https://fastlane.tools) is run. - -More information about _fastlane_ can be found on [fastlane.tools](https://fastlane.tools). - -The documentation of _fastlane_ can be found on [docs.fastlane.tools](https://docs.fastlane.tools). diff --git a/fastlane/actions/xchtmlreport.rb b/fastlane/actions/xchtmlreport.rb deleted file mode 100644 index a6a0430d..00000000 --- a/fastlane/actions/xchtmlreport.rb +++ /dev/null @@ -1,118 +0,0 @@ -module Fastlane - module Actions - module SharedValues - # XCHTMLREPORT_CUSTOM_VALUE = :XCHTMLREPORT_CUSTOM_VALUE - end - - class XchtmlreportAction < Action - def self.run(params) - result_bundle_path = params[:result_bundle_path] - if result_bundle_path.nil? - result_bundle_path = Scan.cache[:result_bundle_path] - end - result_bundle_paths = params[:result_bundle_paths] - if result_bundle_path and result_bundle_paths.empty? - result_bundle_paths = [result_bundle_path] - end - - if result_bundle_paths.nil? or result_bundle_paths.empty? - UI.user_error!("You must pass at least one result_bundle_path") - end - - binary_path = params[:binary_path] - - if !File.file?(binary_path) - UI.user_error!("xchtmlreport binary not installed! https://github.com/TitouanVanBelle/XCTestHTMLReport") - end - UI.message "Result bundle path: #{result_bundle_path}" - - command = "#{binary_path}" - - result_bundle_paths.each { |path| - command += " -r #{path}" - } - - if params[:enable_junit] - command += " -j" - end - - sh command - - end - - ##################################################### - # @!group Documentation - ##################################################### - - def self.description - "Xcode-like HTML report for Unit and UI Tests" - end - - def self.details - "https://github.com/TitouanVanBelle/XCTestHTMLReport" - end - - def self.available_options - # Define all options your action supports. - - # Below a few examples - [ - FastlaneCore::ConfigItem.new(key: :result_bundle_path, - description: "Path to the result bundle from scan. After running scan you can use Scan.cache[:result_bundle_path]", - conflicting_options: [:result_bundle_paths], - optional: true, - is_string: true, - conflict_block: proc do |value| - UI.user_error!("You can't use 'result_bundle_path' and 'result_bundle_paths' options in one run") - end, - verify_block: proc do |value| - UI.user_error!("Bad path to the result bundle given: #{value}") unless (value and File.directory?(value)) - end), - FastlaneCore::ConfigItem.new(key: :result_bundle_paths, - description: "Array of multiple result bundle paths from scan", - conflicting_options: [:result_bundle_path], - optional: true, - default_value: [], - type: Array, - conflict_block: proc do |value| - UI.user_error!("You can't use 'result_bundle_path' and 'result_bundle_paths' options in one run") - end, - verify_block: proc do |value| - value.each { |path| - UI.user_error!("Bad path to the result bundle given: #{path}") unless (path and File.directory?(path)) - } - end), - FastlaneCore::ConfigItem.new(key: :binary_path, - description: "Path to xchtmlreport binary", - is_string: true, # true: verifies the input is a string, false: every kind of value - default_value: "/usr/local/bin/xchtmlreport"), # the default value if the user didn't provide one - FastlaneCore::ConfigItem.new(key: :enable_junit, - type: Boolean, - default_value: false, - description: "Enables JUnit XML output 'report.junit'", - optional: true), - ] - end - - def self.output - # Define the shared values you are going to provide - # Example - # [ - # ['XCHTMLREPORT_CUSTOM_VALUE', 'A description of what this value contains'] - # ] - end - - def self.return_value - # If your method provides a return value, you can describe here what it does - end - - def self.authors - ["XCTestHTMLReport: TitouanVanBelle", "plugin: chrisballinger"] - end - - def self.is_supported?(platform) - [:ios, :mac].include?(platform) - end - end - end -end