From c869076b70c5e035fab60c0df2e083a0e4e8ce1c Mon Sep 17 00:00:00 2001 From: Joe Newton Date: Sat, 13 Nov 2021 23:43:58 -0500 Subject: [PATCH 1/2] Regenerated using the latest from ProjectTemplate --- .github/CODE_OF_CONDUCT.md | 132 ++++++++ .github/CONTRIBUTING.md | 45 +++ .github/CONTRIBUTORS.md | 15 + .github/ISSUE_TEMPLATE/BUG_REPORT.yml | 95 ++++++ .github/ISSUE_TEMPLATE/FEATURE_REQUEST.yml | 55 +++ .github/ISSUE_TEMPLATE/config.yml | 1 + .../PULL_REQUEST_TEMPLATE.md | 31 ++ .github/workflows/carthage.yml | 11 +- .github/workflows/cocoapods.yml | 25 +- .github/workflows/publish-cocoapods.yml | 14 +- .github/workflows/upload-assets.yml | 32 +- .github/workflows/xcframework.yml | 18 +- .github/workflows/xcodebuild.yml | 42 +-- KeyValueObservation.podspec | 8 +- KeyValueObservation.xcodeproj/project.pbxproj | 318 +++++++++--------- README.md | 12 +- scripts/findproject.sh | 1 + scripts/workflowtests.sh | 9 +- scripts/xcframework.sh | 140 ++++---- 19 files changed, 728 insertions(+), 276 deletions(-) create mode 100644 .github/CODE_OF_CONDUCT.md create mode 100644 .github/CONTRIBUTING.md create mode 100644 .github/CONTRIBUTORS.md create mode 100644 .github/ISSUE_TEMPLATE/BUG_REPORT.yml create mode 100644 .github/ISSUE_TEMPLATE/FEATURE_REQUEST.yml create mode 100644 .github/ISSUE_TEMPLATE/config.yml create mode 100644 .github/PULL_REQUEST_TEMPLATE/PULL_REQUEST_TEMPLATE.md diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..cc3ee18 --- /dev/null +++ b/.github/CODE_OF_CONDUCT.md @@ -0,0 +1,132 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +We as members, contributors, and leaders pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, caste, color, religion, or sexual +identity and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our +community include: + +* Demonstrating empathy and kindness toward other people +* Being respectful of differing opinions, viewpoints, and experiences +* Giving and gracefully accepting constructive feedback +* Accepting responsibility and apologizing to those affected by our mistakes, + and learning from the experience +* Focusing on what is best not just for us as individuals, but for the overall + community + +Examples of unacceptable behavior include: + +* The use of sexualized language or imagery, and sexual attention or advances of + any kind +* Trolling, insulting or derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or email address, + without their explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Enforcement Responsibilities + +Community leaders are responsible for clarifying and enforcing our standards of +acceptable behavior and will take appropriate and fair corrective action in +response to any behavior that they deem inappropriate, threatening, offensive, +or harmful. + +Community leaders have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, and will communicate reasons for moderation +decisions when appropriate. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when +an individual is officially representing the community in public spaces. +Examples of representing our community include using an official e-mail address, +posting via an official social media account, or acting as an appointed +representative at an online or offline event. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported to the community leaders responsible for enforcement at +somerandomiosdev@gmail.com. All complaints will be reviewed and investigated +promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the +reporter of any incident. + +## Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining +the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed +unprofessional or unwelcome in the community. + +**Consequence**: A private, written warning from community leaders, providing +clarity around the nature of the violation and an explanation of why the +behavior was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series of +actions. + +**Consequence**: A warning with consequences for continued behavior. No +interaction with the people involved, including unsolicited interaction with +those enforcing the Code of Conduct, for a specified period of time. This +includes avoiding interactions in community spaces as well as external channels +like social media. Violating these terms may lead to a temporary or permanent +ban. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including +sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public +communication with the community for a specified period of time. No public or +private interaction with the people involved, including unsolicited interaction +with those enforcing the Code of Conduct, is allowed during this period. +Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community +standards, including sustained inappropriate behavior, harassment of an +individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within the +community. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 2.1, available at +[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1]. + +Community Impact Guidelines were inspired by +[Mozilla's code of conduct enforcement ladder][Mozilla CoC]. + +For answers to common questions about this code of conduct, see the FAQ at +[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at +[https://www.contributor-covenant.org/translations][translations]. + +[homepage]: https://www.contributor-covenant.org +[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html +[Mozilla CoC]: https://github.com/mozilla/diversity +[FAQ]: https://www.contributor-covenant.org/faq +[translations]: https://www.contributor-covenant.org/translations diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md new file mode 100644 index 0000000..584f88b --- /dev/null +++ b/.github/CONTRIBUTING.md @@ -0,0 +1,45 @@ +## Before getting started + +I just want to say a special thanks for looking to improve this project. I truly love the open source community and it wouldn't be what it is today without people like you. + +# How to contribute + +There are three main ways in which you contribute: + +1. Open a [Bug Report](https://github.com/SomeRandomiOSDev/KeyValueObservation/issues/new?assignees=SomeRandomiOSDev&labels=bug&template=BUG_REPORT.yml&title=%5BBUG%5D%3A+). +2. Open a [Feature Request](https://github.com/SomeRandomiOSDev/KeyValueObservation/issues/new?assignees=SomeRandomiOSDev&labels=enhancement&template=FEATURE_REQUEST.yml&title=%5BFEATURE%5D%3A+). +3. Create a [Pull Request](https://github.com/SomeRandomiOSDev/KeyValueObservation/compare/main...main?expand=1&template=PULL_REQUEST_TEMPLATE.md). + +> If none of these really suit your needs, you could also open a [blank issue](https://github.com/SomeRandomiOSDev/KeyValueObservation/issues/new). + +If you need further guidance or have additional questions, you can always reach out at + +- somerandomiosdev@gmail.com + +Please also note we have a [code of conduct](#code-of-conduct), please follow it in all your interactions with the project. + +## Getting started + +For contributing via *Bug Reports* or *Feature Requests* contribuing is as simple as opening that specific issue. + +> We use GitHub issue forms for submitting these types of issues. For reference, those form templates can be found [here](ISSUE_TEMPLATE/BUG_REPORT.yml) for Bug Reports and [here](ISSUE_TEMPLATE/FEATURE_REQUEST.yml) for Feature Requests. + +For contributing via *Pull Requests*, we ask the following of you prior to opening a `pull request` to help maintain code standards and quality (many of these are enforced with workflows, but who wants to push subsequent commits for a single PR?): + +- Please try and follow the implicit code conventions and naming schemes present within the project. +- The builds for all platforms should succeed, along with all of the unit tests for each platform. +- Any new code added should be accompanied by appropriate unit test code to cover (virtually) all cases and paths through that code. The code coverage for this project shouldn't decrease by a significant amount, but increases in code coverage are always welcome and appreciated. +- Any new public APIs added should be accompanied by documentation in code, and as appropriate, in the [README](../README.md) file and in the Documentation Catalog. +- Since this project is available via [CocoaPods](https://cocoapods.org), it should lint successfully for both `pod lib lint` and `pod lib lint --use-libraries` using the latest version of the `pod` utility. + +> Tip: It's strongly recommended to use the [workflowtests.sh](../scripts/workflowtests.sh) script for testing all of the various builds & linting as this script is a mirror of the workflows that are ran for `pull requests`. + +For further guidance about requirements for `pull requests`, please see the [Pull Request Guidelines](PULL_REQUEST_TEMPLATE/PULL_REQUEST_TEMPLATE.md) document. + +## Code of Conduct + +As far as it pertains to contributions to this project, we do not and will not discriminate against people on any grouds aside from those contributions. Furthermore, discrimination from other persons will not be tolerated in any capacity. + +We may, at our own discretion, remove, block from commenting/contributing, or otherwise persons who violate these guideline or those laid out below in order to maintain and inclusive productive community. + +For the full text of these guidelines, please read the [CODE_OF_CONDUCT](CODE_OF_CONDUCT.md) document. diff --git a/.github/CONTRIBUTORS.md b/.github/CONTRIBUTORS.md new file mode 100644 index 0000000..45b1c10 --- /dev/null +++ b/.github/CONTRIBUTORS.md @@ -0,0 +1,15 @@ +# Contributors + +## Special thanks for all the people who have contributed this project so far: + +I would like to give a special thanks to all of the people below who have contributed to this project and to all of those who will contribute to it moving forward. + +> None so far; you could be the first! See the section below on how to contribute. +> +> To the first person contributing to this project, please remove this block and replace it with your information using the following format: `- [Your Name](https://github.com/YourGitHubUsername)` + +## I would like to join this list! How can I help the project? + +We appreciate your enthusiam and would love to have your contribution! We are constantly looking for ways to improve this project and often suffer from (code) writers block, sometimes stagnating progress. That's where you come in! Whether you're reporting bugs, suggesting features, or writing code yourself, we want it! + +For more information on how to contribute (and have your name show up here), please refer to our [CONTRIBUTING](CONTRIBUTING.md) guide. diff --git a/.github/ISSUE_TEMPLATE/BUG_REPORT.yml b/.github/ISSUE_TEMPLATE/BUG_REPORT.yml new file mode 100644 index 0000000..12e1815 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/BUG_REPORT.yml @@ -0,0 +1,95 @@ +name: Bug Report +description: Create a report to help us improve this project! +title: "[BUG]: " +labels: ["bug"] +assignees: + - SomeRandomiOSDev + +body: + - type: markdown + attributes: + value: "Thanks for taking the time to fill out this bug report!" + + - type: textarea + id: expected-behavior + attributes: + label: "Expected Behavior" + description: "A clear and concise description of what you expected to happen." + placeholder: "What was supposed to happen?" + validations: + required: true + + - type: textarea + id: actual-behavior + attributes: + label: "Actual Behavior" + description: "A clear and concise description of what actually happened." + placeholder: "What actually happened?" + validations: + required: true + + - type: textarea + id: steps + attributes: + label: "Steps To Reproduce" + placeholder: | + 1. Do this... + 2. Do that... + ... + validations: + required: true + + - type: input + id: project-version + attributes: + label: "Project Version" + description: "The version of the project where this issue occurred." + placeholder: "0.1.5, a7df908, username/issue-branch, ..." + validations: + required: true + + - type: checkboxes + id: os + attributes: + label: "The OS/Variant where this issue occurs." + description: "If \"Other\" is selected, please provide the additional OS in the \"Additional Context\" section." + options: + - label: "iOS" + - label: "macOS" + - label: "tvOS" + - label: "watchOS" + - label: "Mac Catalyst" + - label: "Other (Please specify in \"Additional Context\" section)" + validations: + required: true + + - type: input + id: xcode-version + attributes: + label: "The version of Xcode that was used when this issue appeared." + placeholder: "12.1.1, 13.0 Beta 4, Build 13A1030d, ..." + validations: + required: true + + - type: checkboxes + id: environment + attributes: + label: "What was the environment in which the issue appeared?" + options: + - label: "KeyValueObservation.xcodeproj" + - label: "Carthage" + - label: "CocoaPods" + - label: "Other (Please specify in \"Additional Context\" section)" + validations: + required: true + + - type: textarea + id: additional-context + attributes: + label: "Additional Context" + description: | + Add any other context about the problem (e.g. screenshots, links, logs, references, sample projects, etc.) + + Tip: You can attach files here by clicking this area to highlight it and then dragging files in. + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.yml b/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.yml new file mode 100644 index 0000000..18e590b --- /dev/null +++ b/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.yml @@ -0,0 +1,55 @@ +name: Feature Request +description: Suggest your awesome idea for this project! +title: "[FEATURE]: " +labels: ["enhancement"] +assignees: + - SomeRandomiOSDev + +body: + - type: markdown + attributes: + value: "Thanks for taking the time to fill out this feature request!" + + - type: textarea + id: existing-problem + attributes: + label: "Is your feature request related to a problem?" + description: "A clear and concise description of what the problem is." + placeholder: "e.g. I'm already frustrated when [...]" + validations: + required: false + + - type: textarea + id: solution + attributes: + label: "Describe the solution you'd like." + placeholder: "e.g It would be a lot better if [...]" + validations: + required: true + + - type: textarea + id: alternatives + attributes: + label: "Describe alternatives you've considered." + validations: + required: false + + - type: input + id: current-progress + attributes: + label: "Have you already worked out some solution or have a PoC?" + description: "Please provide the repo where we can find your work." + placeholder: "e.g. username/partial-solution" + validations: + required: false + + - type: textarea + id: additional-context + attributes: + label: "Additional Context" + description: | + Add any other context about the feature request here (e.g. screenshots, links, references, sample projects, etc.) + + Tip: You can attach files here by clicking this area to highlight it and then dragging files in. + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..0086358 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1 @@ +blank_issues_enabled: true diff --git a/.github/PULL_REQUEST_TEMPLATE/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..6969026 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,31 @@ +# Pull Request Process + +## Before submitting a pull request + +Please review the [guidelines for contributing](../CONTRIBUTING.md) to this repository and remove this and all lines above this one prior to submitting your `pull request`. + +## Description + +A brief description of your `pull request`. + +## Checklist + +Ensure that your `pull request` has followed all the steps below: + +- [ ] Code compilation. +- [ ] All tests passing. +- [ ] Added new unit tests, if applicable. +- [ ] Extended the documentation (including README), if applicable. +- [ ] Updated version in KeyValueObservation.podspec following [semver](https://semver.org) guidelines. +- [ ] Ran [workflowtests.sh](../../scripts/workflowtests.sh) and passed. +- [ ] Added myself to the [CONTRIBUTORS](../CONTRIBUTORS.md) file. + +## Proposed changes + +A detailed explaination of your changes and why these should be added to this project. + +If this is related to one or more [issues](https://github.com/SomeRandomiOSDev/KeyValueObservation/issues), please add `closes #XXXX` (or any other [acceptable notation](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue)) to link this pull request to them. + +## Additional Info + +Any other relevant information that needs to be known about this `pull request` (e.g. "tvOS 14.0 and up", "Requires Xcode 13", etc.). diff --git a/.github/workflows/carthage.yml b/.github/workflows/carthage.yml index 99573c6..52921b2 100644 --- a/.github/workflows/carthage.yml +++ b/.github/workflows/carthage.yml @@ -7,9 +7,14 @@ on: tags-ignore: - '**' paths-ignore: - - .gitignore - - LICENSE - - README.md + - '.github/**' # Ignore all files under '.github' + - '!.github/workflows/carthage.yml' # Except for this workflow + - '.gitignore' + - 'codecov.yml' + - 'KeyValueObservation.podspec' + - 'LICENSE' + - 'README.md' + - 'Tests/**' jobs: build: diff --git a/.github/workflows/cocoapods.yml b/.github/workflows/cocoapods.yml index d310bd5..08859b4 100644 --- a/.github/workflows/cocoapods.yml +++ b/.github/workflows/cocoapods.yml @@ -7,9 +7,12 @@ on: tags-ignore: - '**' paths-ignore: - - .gitignore - - LICENSE - - README.md + - '.github/**' # Ignore all files under '.github' + - '!.github/workflows/cocoapods.yml' # Except for this workflow + - '.gitignore' + - 'codecov.yml' + - 'LICENSE' + - 'README.md' jobs: lint: @@ -20,33 +23,33 @@ jobs: name: Lint runs-on: macOS-latest env: - LOGSDIR: /tmp/.keyvalueobservation.cocoapods/Logs + LOGSDIR: /tmp/.keyvalueobservation.cocoapods/Logs/${{ matrix.linttype }} LINT_TYPE: ${{ matrix.linttype }} steps: - name: Checkout Code uses: actions/checkout@v2 - - name: Setup Environment - run: | - mkdir -p "$LOGSDIR" - - name: Setup Cocoapods uses: maxim-lobanov/setup-cocoapods@v1 with: version: latest + - name: Setup Environment + run: | + mkdir -p "$LOGSDIR" + - name: Lint run: | if [ "$LINT_TYPE" == "Dynamic" ]; then - pod lib lint --verbose 2>&1 | tee "$LOGSDIR/PodLint-$LINT_TYPE.log" + pod lib lint --verbose 2>&1 | tee "$LOGSDIR/PodLint.log" else - pod lib lint --verbose --use-libraries 2>&1 | tee "$LOGSDIR/PodLint-$LINT_TYPE.log" + pod lib lint --verbose --use-libraries 2>&1 | tee "$LOGSDIR/PodLint.log" fi - name: Upload Logs uses: actions/upload-artifact@v2 if: always() with: - name: Logs + name: ${{ matrix.linttype }}Logs path: ${{ env.LOGSDIR }}/*.log diff --git a/.github/workflows/publish-cocoapods.yml b/.github/workflows/publish-cocoapods.yml index 5fd8cbc..e8ed875 100644 --- a/.github/workflows/publish-cocoapods.yml +++ b/.github/workflows/publish-cocoapods.yml @@ -8,6 +8,7 @@ jobs: name: Publish CocoaPods runs-on: macOS-latest env: + LOGSDIR: /tmp/.keyvalueobservation.cocoapods/Logs COCOAPODS_TRUNK_TOKEN: ${{ secrets.COCOAPODS_TRUNK_TOKEN }} steps: @@ -19,6 +20,17 @@ jobs: with: version: latest + - name: Setup Environment + run: | + mkdir -p "$LOGSDIR" + - name: Publish CocoaPod run: | - pod trunk push KeyValueObservation.podspec + pod trunk push KeyValueObservation.podspec --verbose 2>&1 | tee "$LOGSDIR/CocoaPods.log" + + - name: Upload Logs + uses: actions/upload-artifact@v2 + if: always() + with: + name: Logs + path: ${{ env.LOGSDIR }}/*.log diff --git a/.github/workflows/upload-assets.yml b/.github/workflows/upload-assets.yml index 724a429..f616418 100644 --- a/.github/workflows/upload-assets.yml +++ b/.github/workflows/upload-assets.yml @@ -4,24 +4,29 @@ on: types: [published] jobs: - build: - name: Upload Assets + xcframework: + name: Upload XCFramework Assets runs-on: macOS-latest env: - TMPDIR: /tmp/.keyvalueobservation.xcframework.build + TMPDIR: /tmp/.keyvalueobservation.assets-xcframework.build steps: - name: Checkout Code uses: actions/checkout@v2 + - name: Setup Environment + run: | + mkdir -p "${TMPDIR}/Output" + mkdir -p "${TMPDIR}/Logs" + - name: Build run: | - ./scripts/xcframework.sh --output ${TMPDIR}/KeyValueObservation.xcframework + ./scripts/xcframework.sh --build-dir "${TMPDIR}" --output "${TMPDIR}/Output/KeyValueObservation.xcframework" - name: Create Zip run: | - cd ${TMPDIR} - zip -rX KeyValueObservation.xcframework.zip KeyValueObservation.xcframework + cd "${TMPDIR}/Output" + zip -rX KeyValueObservation.xcframework.zip KeyValueObservation.xcframework 2>&1 | tee "${TMPDIR}/Logs/Zip.log" - name: Upload Zip uses: actions/upload-release-asset@v1 @@ -29,14 +34,14 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ github.event.release.upload_url }} - asset_path: ${{ env.TMPDIR }}/KeyValueObservation.xcframework.zip + asset_path: ${{ env.TMPDIR }}/Output/KeyValueObservation.xcframework.zip asset_name: KeyValueObservation.xcframework.zip asset_content_type: application/zip - name: Create Tar run: | - cd ${TMPDIR} - tar -zcvf KeyValueObservation.xcframework.tar.gz KeyValueObservation.xcframework + cd "${TMPDIR}/Output" + tar -zcvf KeyValueObservation.xcframework.tar.gz KeyValueObservation.xcframework 2>&1 | tee "${TMPDIR}/Logs/Tar.log" - name: Upload Tar uses: actions/upload-release-asset@v1 @@ -44,6 +49,13 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ github.event.release.upload_url }} - asset_path: ${{ env.TMPDIR }}/KeyValueObservation.xcframework.tar.gz + asset_path: ${{ env.TMPDIR }}/Output/KeyValueObservation.xcframework.tar.gz asset_name: KeyValueObservation.xcframework.tar.gz asset_content_type: application/gzip + + - name: Upload Logs + uses: actions/upload-artifact@v2 + if: always() + with: + name: XCFrameworkLogs + path: ${{ env.TMPDIR }}/Logs/*.log diff --git a/.github/workflows/xcframework.yml b/.github/workflows/xcframework.yml index e45203f..d3d81f2 100644 --- a/.github/workflows/xcframework.yml +++ b/.github/workflows/xcframework.yml @@ -7,9 +7,14 @@ on: tags-ignore: - '**' paths-ignore: - - .gitignore - - LICENSE - - README.md + - '.github/**' # Ignore all files under '.github' + - '!.github/workflows/xcframework.yml' # Except for this workflow + - '.gitignore' + - 'codecov.yml' + - 'KeyValueObservation.podspec' + - 'LICENSE' + - 'README.md' + - 'Tests/**' jobs: build: @@ -22,9 +27,14 @@ jobs: - name: Checkout Code uses: actions/checkout@v2 + - name: Setup Environment + run: | + mkdir -p "${TMPDIR}/Output" + mkdir -p "${TMPDIR}/Logs" + - name: Build run: | - ./scripts/xcframework.sh --build-dir "$TMPDIR" + ./scripts/xcframework.sh --build-dir "${TMPDIR}" - name: Upload Logs uses: actions/upload-artifact@v2 diff --git a/.github/workflows/xcodebuild.yml b/.github/workflows/xcodebuild.yml index 9f36fcc..7373052 100644 --- a/.github/workflows/xcodebuild.yml +++ b/.github/workflows/xcodebuild.yml @@ -7,9 +7,13 @@ on: tags-ignore: - '**' paths-ignore: - - .gitignore - - LICENSE - - README.md + - '.github/**' # Ignore all files under '.github' + - '!.github/workflows/xcodebuild.yml' # Except for this workflow + - '.gitignore' + - 'KeyValueObservation.podspec' + - 'LICENSE' + - 'README.md' + - 'Tests/**' jobs: ios: @@ -28,20 +32,20 @@ jobs: - name: Build iOS run: | - xcodebuild -project KeyValueObservation.xcodeproj -scheme "KeyValueObservation" -destination "generic/platform=iOS" -configuration Debug 2>&1 | tee "$LOGSDIR/build-ios.log" + xcodebuild -project "KeyValueObservation.xcodeproj" -scheme "KeyValueObservation" -destination "generic/platform=iOS" -configuration Debug 2>&1 | tee "$LOGSDIR/build-ios.log" - name: Build iOS Simulator run: | - xcodebuild -project KeyValueObservation.xcodeproj -scheme "KeyValueObservation" -destination "generic/platform=iOS Simulator" -configuration Debug 2>&1 | tee "$LOGSDIR/build-iossimulator.log" + xcodebuild -project "KeyValueObservation.xcodeproj" -scheme "KeyValueObservation" -destination "generic/platform=iOS Simulator" -configuration Debug 2>&1 | tee "$LOGSDIR/build-iossimulator.log" - name: Test run: | IOS_SIM="$(xcrun simctl list devices available | grep "iPhone [0-9]" | sort -rV | head -n 1 | sed -E 's/(.+)[ ]*\([^)]*\)[ ]*\([^)]*\)/\1/' | awk '{$1=$1};1')" if [ "${#IOS_SIM}" == "0" ]; then - IOS_SIM = "iPhone 12 Pro" # Fallback Simulator + IOS_SIM="iPhone 12 Pro" # Fallback Simulator fi - xcodebuild -project KeyValueObservation.xcodeproj -scheme "KeyValueObservation" -testPlan "KeyValueObservationTests" -destination "platform=iOS Simulator,name=$IOS_SIM" -configuration Debug ONLY_ACTIVE_ARCH=YES test 2>&1 | tee "$LOGSDIR/test-ios.log" + xcodebuild -project "KeyValueObservation.xcodeproj" -scheme "KeyValueObservation" -testPlan "KeyValueObservationTests" -destination "platform=iOS Simulator,name=$IOS_SIM" -configuration Debug ONLY_ACTIVE_ARCH=YES test 2>&1 | tee "$LOGSDIR/test-ios.log" - name: Upload Logs uses: actions/upload-artifact@v2 @@ -66,11 +70,11 @@ jobs: - name: Build run: | - xcodebuild -project KeyValueObservation.xcodeproj -scheme "KeyValueObservation" -destination "generic/platform=macOS,variant=Mac Catalyst" -configuration Debug 2>&1 | tee "$LOGSDIR/build-maccatalyst.log" + xcodebuild -project "KeyValueObservation.xcodeproj" -scheme "KeyValueObservation" -destination "generic/platform=macOS,variant=Mac Catalyst" -configuration Debug 2>&1 | tee "$LOGSDIR/build-maccatalyst.log" - name: Test run: | - xcodebuild -project KeyValueObservation.xcodeproj -scheme "KeyValueObservation" -testPlan "KeyValueObservationTests" -destination "platform=macOS,variant=Mac Catalyst" -configuration Debug ONLY_ACTIVE_ARCH=YES test 2>&1 | tee "$LOGSDIR/test-maccatalyst.log" + xcodebuild -project "KeyValueObservation.xcodeproj" -scheme "KeyValueObservation" -testPlan "KeyValueObservationTests" -destination "platform=macOS,variant=Mac Catalyst" -configuration Debug ONLY_ACTIVE_ARCH=YES test 2>&1 | tee "$LOGSDIR/test-maccatalyst.log" - name: Upload Logs uses: actions/upload-artifact@v2 @@ -95,11 +99,11 @@ jobs: - name: Build run: | - xcodebuild -project KeyValueObservation.xcodeproj -scheme "KeyValueObservation macOS" -destination "generic/platform=macOS" -configuration Debug 2>&1 | tee "$LOGSDIR/build-macos.log" + xcodebuild -project "KeyValueObservation.xcodeproj" -scheme "KeyValueObservation macOS" -destination "generic/platform=macOS" -configuration Debug 2>&1 | tee "$LOGSDIR/build-macos.log" - name: Test run: | - xcodebuild -project KeyValueObservation.xcodeproj -scheme "KeyValueObservation macOS" -testPlan "KeyValueObservation macOS Tests" -derivedDataPath ".xcodebuild" -configuration Debug ONLY_ACTIVE_ARCH=YES test 2>&1 | tee "$LOGSDIR/test-macos.log" + xcodebuild -project "KeyValueObservation.xcodeproj" -scheme "KeyValueObservation macOS" -testPlan "KeyValueObservation macOS Tests" -derivedDataPath ".xcodebuild" -enableCodeCoverage YES -configuration Debug ONLY_ACTIVE_ARCH=YES test 2>&1 | tee "$LOGSDIR/test-macos.log" - name: Generate Code Coverage File if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} @@ -139,20 +143,20 @@ jobs: - name: Build tvOS run: | - xcodebuild -project KeyValueObservation.xcodeproj -scheme "KeyValueObservation tvOS" -destination "generic/platform=tvOS" -configuration Debug 2>&1 | tee "$LOGSDIR/build-tvos.log" + xcodebuild -project "KeyValueObservation.xcodeproj" -scheme "KeyValueObservation tvOS" -destination "generic/platform=tvOS" -configuration Debug 2>&1 | tee "$LOGSDIR/build-tvos.log" - name: Build tvOS Simulator run: | - xcodebuild -project KeyValueObservation.xcodeproj -scheme "KeyValueObservation tvOS" -destination "generic/platform=tvOS Simulator" -configuration Debug 2>&1 | tee "$LOGSDIR/build-tvossimulator.log" + xcodebuild -project "KeyValueObservation.xcodeproj" -scheme "KeyValueObservation tvOS" -destination "generic/platform=tvOS Simulator" -configuration Debug 2>&1 | tee "$LOGSDIR/build-tvossimulator.log" - name: Test run: | TVOS_SIM="$(xcrun simctl list devices available | grep "Apple TV" | sort -V | head -n 1 | sed -E 's/(.+)[ ]*\([^)]*\)[ ]*\([^)]*\)/\1/' | awk '{$1=$1};1')" if [ "${#TVOS_SIM}" == "0" ]; then - TVOS_SIM = "Apple TV" # Fallback Simulator + TVOS_SIM="Apple TV" # Fallback Simulator fi - xcodebuild -project KeyValueObservation.xcodeproj -scheme "KeyValueObservation tvOS" -testPlan "KeyValueObservation tvOS Tests" -destination "platform=tvOS Simulator,name=$TVOS_SIM" -configuration Debug ONLY_ACTIVE_ARCH=YES test 2>&1 | tee "$LOGSDIR/test-tvos.log" + xcodebuild -project "KeyValueObservation.xcodeproj" -scheme "KeyValueObservation tvOS" -testPlan "KeyValueObservation tvOS Tests" -destination "platform=tvOS Simulator,name=$TVOS_SIM" -configuration Debug ONLY_ACTIVE_ARCH=YES test 2>&1 | tee "$LOGSDIR/test-tvos.log" - name: Upload Logs uses: actions/upload-artifact@v2 @@ -177,20 +181,20 @@ jobs: - name: Build watchOS run: | - xcodebuild -project KeyValueObservation.xcodeproj -scheme "KeyValueObservation watchOS" -destination "generic/platform=watchOS" -configuration Debug 2>&1 | tee "$LOGSDIR/build-watchos.log" + xcodebuild -project "KeyValueObservation.xcodeproj" -scheme "KeyValueObservation watchOS" -destination "generic/platform=watchOS" -configuration Debug 2>&1 | tee "$LOGSDIR/build-watchos.log" - name: Build watchOS Simulator run: | - xcodebuild -project KeyValueObservation.xcodeproj -scheme "KeyValueObservation watchOS" -destination "generic/platform=watchOS Simulator" -configuration Debug 2>&1 | tee "$LOGSDIR/build-watchossimulator.log" + xcodebuild -project "KeyValueObservation.xcodeproj" -scheme "KeyValueObservation watchOS" -destination "generic/platform=watchOS Simulator" -configuration Debug 2>&1 | tee "$LOGSDIR/build-watchossimulator.log" - name: Test run: | WATCHOS_SIM="$(xcrun simctl list devices available | grep "Apple Watch" | sort -rV | head -n 1 | sed -E 's/(.+)[ ]*\([^)]*\)[ ]*\([^)]*\)/\1/' | awk '{$1=$1};1')" if [ "${#WATCHOS_SIM}" == "0" ]; then - WATCHOS_SIM = "Apple Watch Series 6 - 44mm" # Fallback Simulator + WATCHOS_SIM="Apple Watch Series 6 - 44mm" # Fallback Simulator fi - xcodebuild -project KeyValueObservation.xcodeproj -scheme "KeyValueObservation watchOS" -testPlan "KeyValueObservation watchOS Tests" -destination "platform=watchOS Simulator,name=$WATCHOS_SIM" -configuration Debug ONLY_ACTIVE_ARCH=YES test 2>&1 | tee "$LOGSDIR/test-watchos.log" + xcodebuild -project "KeyValueObservation.xcodeproj" -scheme "KeyValueObservation watchOS" -testPlan "KeyValueObservation watchOS Tests" -destination "platform=watchOS Simulator,name=$WATCHOS_SIM" -configuration Debug ONLY_ACTIVE_ARCH=YES test 2>&1 | tee "$LOGSDIR/test-watchos.log" - name: Upload Logs uses: actions/upload-artifact@v2 diff --git a/KeyValueObservation.podspec b/KeyValueObservation.podspec index 7fb4cb2..b5228bb 100644 --- a/KeyValueObservation.podspec +++ b/KeyValueObservation.podspec @@ -1,12 +1,12 @@ Pod::Spec.new do |s| - + s.name = "KeyValueObservation" - s.version = "1.0.5" + s.version = "1.0.6" s.summary = "A small KVO helper library" s.description = <<-DESC A small KVO helper library that provides a NSObject and a NSArray category for observing key value changes using blocks DESC - + s.homepage = "https://github.com/SomeRandomiOSDev/KeyValueObservation" s.license = "MIT" s.author = { "Joe Newton" => "somerandomiosdev@gmail.com" } @@ -30,5 +30,5 @@ Pod::Spec.new do |s| ts.preserve_paths = 'Sources/KeyValueObservation/include/*.modulemap' ts.source_files = 'Tests/KeyValueObservationTests/*.m' end - + end diff --git a/KeyValueObservation.xcodeproj/project.pbxproj b/KeyValueObservation.xcodeproj/project.pbxproj index 63b3151..c232e44 100644 --- a/KeyValueObservation.xcodeproj/project.pbxproj +++ b/KeyValueObservation.xcodeproj/project.pbxproj @@ -21,63 +21,63 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + DD4389FD2740BF8300F0A1F6 /* KeyValueObservationTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DD4389FC2740BF8300F0A1F6 /* KeyValueObservationTests.m */; }; + DD4389FE2740BF8300F0A1F6 /* KeyValueObservationTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DD4389FC2740BF8300F0A1F6 /* KeyValueObservationTests.m */; }; + DD4389FF2740BF8300F0A1F6 /* KeyValueObservationTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DD4389FC2740BF8300F0A1F6 /* KeyValueObservationTests.m */; }; + DD438A002740BF8300F0A1F6 /* KeyValueObservationTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DD4389FC2740BF8300F0A1F6 /* KeyValueObservationTests.m */; }; + DD438A112740BF9000F0A1F6 /* SRDKeyValueObservation+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = DD438A022740BF9000F0A1F6 /* SRDKeyValueObservation+Internal.h */; }; + DD438A122740BF9000F0A1F6 /* SRDKeyValueObservation+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = DD438A022740BF9000F0A1F6 /* SRDKeyValueObservation+Internal.h */; }; + DD438A132740BF9000F0A1F6 /* SRDKeyValueObservation+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = DD438A022740BF9000F0A1F6 /* SRDKeyValueObservation+Internal.h */; }; + DD438A142740BF9000F0A1F6 /* SRDKeyValueObservation+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = DD438A022740BF9000F0A1F6 /* SRDKeyValueObservation+Internal.h */; }; + DD438A152740BF9000F0A1F6 /* NSArray+KeyValueObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = DD438A032740BF9000F0A1F6 /* NSArray+KeyValueObservation.m */; }; + DD438A162740BF9000F0A1F6 /* NSArray+KeyValueObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = DD438A032740BF9000F0A1F6 /* NSArray+KeyValueObservation.m */; }; + DD438A172740BF9000F0A1F6 /* NSArray+KeyValueObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = DD438A032740BF9000F0A1F6 /* NSArray+KeyValueObservation.m */; }; + DD438A182740BF9000F0A1F6 /* NSArray+KeyValueObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = DD438A032740BF9000F0A1F6 /* NSArray+KeyValueObservation.m */; }; + DD438A192740BF9000F0A1F6 /* SRDKeyValueObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = DD438A042740BF9000F0A1F6 /* SRDKeyValueObservation.m */; }; + DD438A1A2740BF9000F0A1F6 /* SRDKeyValueObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = DD438A042740BF9000F0A1F6 /* SRDKeyValueObservation.m */; }; + DD438A1B2740BF9000F0A1F6 /* SRDKeyValueObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = DD438A042740BF9000F0A1F6 /* SRDKeyValueObservation.m */; }; + DD438A1C2740BF9000F0A1F6 /* SRDKeyValueObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = DD438A042740BF9000F0A1F6 /* SRDKeyValueObservation.m */; }; + DD438A1D2740BF9000F0A1F6 /* NSObject+KeyValueObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = DD438A052740BF9000F0A1F6 /* NSObject+KeyValueObservation.m */; }; + DD438A1E2740BF9000F0A1F6 /* NSObject+KeyValueObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = DD438A052740BF9000F0A1F6 /* NSObject+KeyValueObservation.m */; }; + DD438A1F2740BF9000F0A1F6 /* NSObject+KeyValueObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = DD438A052740BF9000F0A1F6 /* NSObject+KeyValueObservation.m */; }; + DD438A202740BF9000F0A1F6 /* NSObject+KeyValueObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = DD438A052740BF9000F0A1F6 /* NSObject+KeyValueObservation.m */; }; + DD438A212740BF9000F0A1F6 /* SRDKeyValueObservedChange.m in Sources */ = {isa = PBXBuildFile; fileRef = DD438A062740BF9000F0A1F6 /* SRDKeyValueObservedChange.m */; }; + DD438A222740BF9000F0A1F6 /* SRDKeyValueObservedChange.m in Sources */ = {isa = PBXBuildFile; fileRef = DD438A062740BF9000F0A1F6 /* SRDKeyValueObservedChange.m */; }; + DD438A232740BF9000F0A1F6 /* SRDKeyValueObservedChange.m in Sources */ = {isa = PBXBuildFile; fileRef = DD438A062740BF9000F0A1F6 /* SRDKeyValueObservedChange.m */; }; + DD438A242740BF9000F0A1F6 /* SRDKeyValueObservedChange.m in Sources */ = {isa = PBXBuildFile; fileRef = DD438A062740BF9000F0A1F6 /* SRDKeyValueObservedChange.m */; }; + DD438A252740BF9000F0A1F6 /* SRDKVOInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = DD438A072740BF9000F0A1F6 /* SRDKVOInfo.m */; }; + DD438A262740BF9000F0A1F6 /* SRDKVOInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = DD438A072740BF9000F0A1F6 /* SRDKVOInfo.m */; }; + DD438A272740BF9000F0A1F6 /* SRDKVOInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = DD438A072740BF9000F0A1F6 /* SRDKVOInfo.m */; }; + DD438A282740BF9000F0A1F6 /* SRDKVOInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = DD438A072740BF9000F0A1F6 /* SRDKVOInfo.m */; }; + DD438A292740BF9000F0A1F6 /* SRDKeyValueObservedChange+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = DD438A082740BF9000F0A1F6 /* SRDKeyValueObservedChange+Internal.h */; }; + DD438A2A2740BF9000F0A1F6 /* SRDKeyValueObservedChange+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = DD438A082740BF9000F0A1F6 /* SRDKeyValueObservedChange+Internal.h */; }; + DD438A2B2740BF9000F0A1F6 /* SRDKeyValueObservedChange+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = DD438A082740BF9000F0A1F6 /* SRDKeyValueObservedChange+Internal.h */; }; + DD438A2C2740BF9000F0A1F6 /* SRDKeyValueObservedChange+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = DD438A082740BF9000F0A1F6 /* SRDKeyValueObservedChange+Internal.h */; }; + DD438A2D2740BF9000F0A1F6 /* SRDKVOInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = DD438A0A2740BF9000F0A1F6 /* SRDKVOInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DD438A2E2740BF9000F0A1F6 /* SRDKVOInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = DD438A0A2740BF9000F0A1F6 /* SRDKVOInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DD438A2F2740BF9000F0A1F6 /* SRDKVOInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = DD438A0A2740BF9000F0A1F6 /* SRDKVOInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DD438A302740BF9000F0A1F6 /* SRDKVOInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = DD438A0A2740BF9000F0A1F6 /* SRDKVOInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DD438A312740BF9000F0A1F6 /* KeyValueObservation.h in Headers */ = {isa = PBXBuildFile; fileRef = DD438A0B2740BF9000F0A1F6 /* KeyValueObservation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DD438A322740BF9000F0A1F6 /* KeyValueObservation.h in Headers */ = {isa = PBXBuildFile; fileRef = DD438A0B2740BF9000F0A1F6 /* KeyValueObservation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DD438A332740BF9000F0A1F6 /* KeyValueObservation.h in Headers */ = {isa = PBXBuildFile; fileRef = DD438A0B2740BF9000F0A1F6 /* KeyValueObservation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DD438A342740BF9000F0A1F6 /* KeyValueObservation.h in Headers */ = {isa = PBXBuildFile; fileRef = DD438A0B2740BF9000F0A1F6 /* KeyValueObservation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DD438A352740BF9000F0A1F6 /* NSArray+KeyValueObservation.h in Headers */ = {isa = PBXBuildFile; fileRef = DD438A0C2740BF9000F0A1F6 /* NSArray+KeyValueObservation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DD438A362740BF9000F0A1F6 /* NSArray+KeyValueObservation.h in Headers */ = {isa = PBXBuildFile; fileRef = DD438A0C2740BF9000F0A1F6 /* NSArray+KeyValueObservation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DD438A372740BF9000F0A1F6 /* NSArray+KeyValueObservation.h in Headers */ = {isa = PBXBuildFile; fileRef = DD438A0C2740BF9000F0A1F6 /* NSArray+KeyValueObservation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DD438A382740BF9000F0A1F6 /* NSArray+KeyValueObservation.h in Headers */ = {isa = PBXBuildFile; fileRef = DD438A0C2740BF9000F0A1F6 /* NSArray+KeyValueObservation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DD438A392740BF9000F0A1F6 /* SRDKeyValueObservedChange.h in Headers */ = {isa = PBXBuildFile; fileRef = DD438A0D2740BF9000F0A1F6 /* SRDKeyValueObservedChange.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DD438A3A2740BF9000F0A1F6 /* SRDKeyValueObservedChange.h in Headers */ = {isa = PBXBuildFile; fileRef = DD438A0D2740BF9000F0A1F6 /* SRDKeyValueObservedChange.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DD438A3B2740BF9000F0A1F6 /* SRDKeyValueObservedChange.h in Headers */ = {isa = PBXBuildFile; fileRef = DD438A0D2740BF9000F0A1F6 /* SRDKeyValueObservedChange.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DD438A3C2740BF9000F0A1F6 /* SRDKeyValueObservedChange.h in Headers */ = {isa = PBXBuildFile; fileRef = DD438A0D2740BF9000F0A1F6 /* SRDKeyValueObservedChange.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DD438A3D2740BF9000F0A1F6 /* NSObject+KeyValueObservation.h in Headers */ = {isa = PBXBuildFile; fileRef = DD438A0E2740BF9000F0A1F6 /* NSObject+KeyValueObservation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DD438A3E2740BF9000F0A1F6 /* NSObject+KeyValueObservation.h in Headers */ = {isa = PBXBuildFile; fileRef = DD438A0E2740BF9000F0A1F6 /* NSObject+KeyValueObservation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DD438A3F2740BF9000F0A1F6 /* NSObject+KeyValueObservation.h in Headers */ = {isa = PBXBuildFile; fileRef = DD438A0E2740BF9000F0A1F6 /* NSObject+KeyValueObservation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DD438A402740BF9000F0A1F6 /* NSObject+KeyValueObservation.h in Headers */ = {isa = PBXBuildFile; fileRef = DD438A0E2740BF9000F0A1F6 /* NSObject+KeyValueObservation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DD438A412740BF9000F0A1F6 /* SRDKeyValueObservation.h in Headers */ = {isa = PBXBuildFile; fileRef = DD438A0F2740BF9000F0A1F6 /* SRDKeyValueObservation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DD438A422740BF9000F0A1F6 /* SRDKeyValueObservation.h in Headers */ = {isa = PBXBuildFile; fileRef = DD438A0F2740BF9000F0A1F6 /* SRDKeyValueObservation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DD438A432740BF9000F0A1F6 /* SRDKeyValueObservation.h in Headers */ = {isa = PBXBuildFile; fileRef = DD438A0F2740BF9000F0A1F6 /* SRDKeyValueObservation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DD438A442740BF9000F0A1F6 /* SRDKeyValueObservation.h in Headers */ = {isa = PBXBuildFile; fileRef = DD438A0F2740BF9000F0A1F6 /* SRDKeyValueObservation.h */; settings = {ATTRIBUTES = (Public, ); }; }; DD48BC98270E0DE800D842BC /* KeyValueObservation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DD86D5C423D11D140046E63E /* KeyValueObservation.framework */; }; - DD66300D2732C1C800CFF12F /* SRDKVOInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = DD662FFE2732C1C800CFF12F /* SRDKVOInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DD66300E2732C1C800CFF12F /* SRDKVOInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = DD662FFE2732C1C800CFF12F /* SRDKVOInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DD66300F2732C1C800CFF12F /* SRDKVOInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = DD662FFE2732C1C800CFF12F /* SRDKVOInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DD6630102732C1C800CFF12F /* SRDKVOInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = DD662FFE2732C1C800CFF12F /* SRDKVOInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DD6630112732C1C800CFF12F /* KeyValueObservation.h in Headers */ = {isa = PBXBuildFile; fileRef = DD662FFF2732C1C800CFF12F /* KeyValueObservation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DD6630122732C1C800CFF12F /* KeyValueObservation.h in Headers */ = {isa = PBXBuildFile; fileRef = DD662FFF2732C1C800CFF12F /* KeyValueObservation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DD6630132732C1C800CFF12F /* KeyValueObservation.h in Headers */ = {isa = PBXBuildFile; fileRef = DD662FFF2732C1C800CFF12F /* KeyValueObservation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DD6630142732C1C800CFF12F /* KeyValueObservation.h in Headers */ = {isa = PBXBuildFile; fileRef = DD662FFF2732C1C800CFF12F /* KeyValueObservation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DD6630152732C1C800CFF12F /* NSArray+KeyValueObservation.h in Headers */ = {isa = PBXBuildFile; fileRef = DD6630002732C1C800CFF12F /* NSArray+KeyValueObservation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DD6630162732C1C800CFF12F /* NSArray+KeyValueObservation.h in Headers */ = {isa = PBXBuildFile; fileRef = DD6630002732C1C800CFF12F /* NSArray+KeyValueObservation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DD6630172732C1C800CFF12F /* NSArray+KeyValueObservation.h in Headers */ = {isa = PBXBuildFile; fileRef = DD6630002732C1C800CFF12F /* NSArray+KeyValueObservation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DD6630182732C1C800CFF12F /* NSArray+KeyValueObservation.h in Headers */ = {isa = PBXBuildFile; fileRef = DD6630002732C1C800CFF12F /* NSArray+KeyValueObservation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DD6630192732C1C800CFF12F /* SRDKeyValueObservedChange.h in Headers */ = {isa = PBXBuildFile; fileRef = DD6630012732C1C800CFF12F /* SRDKeyValueObservedChange.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DD66301A2732C1C800CFF12F /* SRDKeyValueObservedChange.h in Headers */ = {isa = PBXBuildFile; fileRef = DD6630012732C1C800CFF12F /* SRDKeyValueObservedChange.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DD66301B2732C1C800CFF12F /* SRDKeyValueObservedChange.h in Headers */ = {isa = PBXBuildFile; fileRef = DD6630012732C1C800CFF12F /* SRDKeyValueObservedChange.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DD66301C2732C1C800CFF12F /* SRDKeyValueObservedChange.h in Headers */ = {isa = PBXBuildFile; fileRef = DD6630012732C1C800CFF12F /* SRDKeyValueObservedChange.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DD66301D2732C1C800CFF12F /* NSObject+KeyValueObservation.h in Headers */ = {isa = PBXBuildFile; fileRef = DD6630022732C1C800CFF12F /* NSObject+KeyValueObservation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DD66301E2732C1C800CFF12F /* NSObject+KeyValueObservation.h in Headers */ = {isa = PBXBuildFile; fileRef = DD6630022732C1C800CFF12F /* NSObject+KeyValueObservation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DD66301F2732C1C800CFF12F /* NSObject+KeyValueObservation.h in Headers */ = {isa = PBXBuildFile; fileRef = DD6630022732C1C800CFF12F /* NSObject+KeyValueObservation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DD6630202732C1C800CFF12F /* NSObject+KeyValueObservation.h in Headers */ = {isa = PBXBuildFile; fileRef = DD6630022732C1C800CFF12F /* NSObject+KeyValueObservation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DD6630212732C1C800CFF12F /* SRDKeyValueObservation.h in Headers */ = {isa = PBXBuildFile; fileRef = DD6630032732C1C800CFF12F /* SRDKeyValueObservation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DD6630222732C1C800CFF12F /* SRDKeyValueObservation.h in Headers */ = {isa = PBXBuildFile; fileRef = DD6630032732C1C800CFF12F /* SRDKeyValueObservation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DD6630232732C1C900CFF12F /* SRDKeyValueObservation.h in Headers */ = {isa = PBXBuildFile; fileRef = DD6630032732C1C800CFF12F /* SRDKeyValueObservation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DD6630242732C1C900CFF12F /* SRDKeyValueObservation.h in Headers */ = {isa = PBXBuildFile; fileRef = DD6630032732C1C800CFF12F /* SRDKeyValueObservation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DD6630252732C1C900CFF12F /* SRDKeyValueObservation+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = DD6630062732C1C800CFF12F /* SRDKeyValueObservation+Internal.h */; }; - DD6630262732C1C900CFF12F /* SRDKeyValueObservation+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = DD6630062732C1C800CFF12F /* SRDKeyValueObservation+Internal.h */; }; - DD6630272732C1C900CFF12F /* SRDKeyValueObservation+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = DD6630062732C1C800CFF12F /* SRDKeyValueObservation+Internal.h */; }; - DD6630282732C1C900CFF12F /* SRDKeyValueObservation+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = DD6630062732C1C800CFF12F /* SRDKeyValueObservation+Internal.h */; }; - DD6630292732C1C900CFF12F /* NSArray+KeyValueObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = DD6630072732C1C800CFF12F /* NSArray+KeyValueObservation.m */; }; - DD66302A2732C1C900CFF12F /* NSArray+KeyValueObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = DD6630072732C1C800CFF12F /* NSArray+KeyValueObservation.m */; }; - DD66302B2732C1C900CFF12F /* NSArray+KeyValueObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = DD6630072732C1C800CFF12F /* NSArray+KeyValueObservation.m */; }; - DD66302C2732C1C900CFF12F /* NSArray+KeyValueObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = DD6630072732C1C800CFF12F /* NSArray+KeyValueObservation.m */; }; - DD66302D2732C1C900CFF12F /* SRDKeyValueObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = DD6630082732C1C800CFF12F /* SRDKeyValueObservation.m */; }; - DD66302E2732C1C900CFF12F /* SRDKeyValueObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = DD6630082732C1C800CFF12F /* SRDKeyValueObservation.m */; }; - DD66302F2732C1C900CFF12F /* SRDKeyValueObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = DD6630082732C1C800CFF12F /* SRDKeyValueObservation.m */; }; - DD6630302732C1C900CFF12F /* SRDKeyValueObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = DD6630082732C1C800CFF12F /* SRDKeyValueObservation.m */; }; - DD6630312732C1C900CFF12F /* NSObject+KeyValueObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = DD6630092732C1C800CFF12F /* NSObject+KeyValueObservation.m */; }; - DD6630322732C1C900CFF12F /* NSObject+KeyValueObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = DD6630092732C1C800CFF12F /* NSObject+KeyValueObservation.m */; }; - DD6630332732C1C900CFF12F /* NSObject+KeyValueObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = DD6630092732C1C800CFF12F /* NSObject+KeyValueObservation.m */; }; - DD6630342732C1C900CFF12F /* NSObject+KeyValueObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = DD6630092732C1C800CFF12F /* NSObject+KeyValueObservation.m */; }; - DD6630352732C1C900CFF12F /* SRDKeyValueObservedChange.m in Sources */ = {isa = PBXBuildFile; fileRef = DD66300A2732C1C800CFF12F /* SRDKeyValueObservedChange.m */; }; - DD6630362732C1C900CFF12F /* SRDKeyValueObservedChange.m in Sources */ = {isa = PBXBuildFile; fileRef = DD66300A2732C1C800CFF12F /* SRDKeyValueObservedChange.m */; }; - DD6630372732C1C900CFF12F /* SRDKeyValueObservedChange.m in Sources */ = {isa = PBXBuildFile; fileRef = DD66300A2732C1C800CFF12F /* SRDKeyValueObservedChange.m */; }; - DD6630382732C1C900CFF12F /* SRDKeyValueObservedChange.m in Sources */ = {isa = PBXBuildFile; fileRef = DD66300A2732C1C800CFF12F /* SRDKeyValueObservedChange.m */; }; - DD6630392732C1C900CFF12F /* SRDKVOInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = DD66300B2732C1C800CFF12F /* SRDKVOInfo.m */; }; - DD66303A2732C1C900CFF12F /* SRDKVOInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = DD66300B2732C1C800CFF12F /* SRDKVOInfo.m */; }; - DD66303B2732C1C900CFF12F /* SRDKVOInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = DD66300B2732C1C800CFF12F /* SRDKVOInfo.m */; }; - DD66303C2732C1C900CFF12F /* SRDKVOInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = DD66300B2732C1C800CFF12F /* SRDKVOInfo.m */; }; - DD66303D2732C1C900CFF12F /* SRDKeyValueObservedChange+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = DD66300C2732C1C800CFF12F /* SRDKeyValueObservedChange+Internal.h */; }; - DD66303E2732C1C900CFF12F /* SRDKeyValueObservedChange+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = DD66300C2732C1C800CFF12F /* SRDKeyValueObservedChange+Internal.h */; }; - DD66303F2732C1C900CFF12F /* SRDKeyValueObservedChange+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = DD66300C2732C1C800CFF12F /* SRDKeyValueObservedChange+Internal.h */; }; - DD6630402732C1C900CFF12F /* SRDKeyValueObservedChange+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = DD66300C2732C1C800CFF12F /* SRDKeyValueObservedChange+Internal.h */; }; - DD6630422732C29000CFF12F /* KeyValueObservationTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DD6630412732C29000CFF12F /* KeyValueObservationTests.m */; }; - DD6630432732C29000CFF12F /* KeyValueObservationTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DD6630412732C29000CFF12F /* KeyValueObservationTests.m */; }; - DD6630442732C29000CFF12F /* KeyValueObservationTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DD6630412732C29000CFF12F /* KeyValueObservationTests.m */; }; - DD6630452732C29000CFF12F /* KeyValueObservationTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DD6630412732C29000CFF12F /* KeyValueObservationTests.m */; }; DD86D54723D11B3E0046E63E /* KeyValueObservation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DD86D53D23D11B3E0046E63E /* KeyValueObservation.framework */; }; DD86D57923D11C860046E63E /* KeyValueObservation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DD86D57023D11C860046E63E /* KeyValueObservation.framework */; }; DD86D59523D11CA00046E63E /* KeyValueObservation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DD86D58C23D11CA00046E63E /* KeyValueObservation.framework */; }; @@ -116,26 +116,27 @@ /* Begin PBXFileReference section */ DD17A9F9257744BC00D30599 /* scripts */ = {isa = PBXFileReference; lastKnownFileType = folder; path = scripts; sourceTree = ""; }; + DD4389FC2740BF8300F0A1F6 /* KeyValueObservationTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KeyValueObservationTests.m; sourceTree = ""; }; + DD438A022740BF9000F0A1F6 /* SRDKeyValueObservation+Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "SRDKeyValueObservation+Internal.h"; sourceTree = ""; }; + DD438A032740BF9000F0A1F6 /* NSArray+KeyValueObservation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSArray+KeyValueObservation.m"; sourceTree = ""; }; + DD438A042740BF9000F0A1F6 /* SRDKeyValueObservation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SRDKeyValueObservation.m; sourceTree = ""; }; + DD438A052740BF9000F0A1F6 /* NSObject+KeyValueObservation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+KeyValueObservation.m"; sourceTree = ""; }; + DD438A062740BF9000F0A1F6 /* SRDKeyValueObservedChange.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SRDKeyValueObservedChange.m; sourceTree = ""; }; + DD438A072740BF9000F0A1F6 /* SRDKVOInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SRDKVOInfo.m; sourceTree = ""; }; + DD438A082740BF9000F0A1F6 /* SRDKeyValueObservedChange+Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "SRDKeyValueObservedChange+Internal.h"; sourceTree = ""; }; + DD438A0A2740BF9000F0A1F6 /* SRDKVOInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SRDKVOInfo.h; sourceTree = ""; }; + DD438A0B2740BF9000F0A1F6 /* KeyValueObservation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KeyValueObservation.h; sourceTree = ""; }; + DD438A0C2740BF9000F0A1F6 /* NSArray+KeyValueObservation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+KeyValueObservation.h"; sourceTree = ""; }; + DD438A0D2740BF9000F0A1F6 /* SRDKeyValueObservedChange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SRDKeyValueObservedChange.h; sourceTree = ""; }; + DD438A0E2740BF9000F0A1F6 /* NSObject+KeyValueObservation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+KeyValueObservation.h"; sourceTree = ""; }; + DD438A0F2740BF9000F0A1F6 /* SRDKeyValueObservation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SRDKeyValueObservation.h; sourceTree = ""; }; + DD438A102740BF9000F0A1F6 /* module.modulemap */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = "sourcecode.module-map"; path = module.modulemap; sourceTree = ""; }; DD48BC94270E0DE800D842BC /* KeyValueObservationTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = KeyValueObservationTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; DD48BC9F270E0F4500D842BC /* KeyValueObservationTests.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = KeyValueObservationTests.xctestplan; sourceTree = ""; }; DD48BCA0270E0F9A00D842BC /* KeyValueObservation macOS Tests.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = "KeyValueObservation macOS Tests.xctestplan"; sourceTree = ""; }; DD48BCA1270E0FE200D842BC /* KeyValueObservation tvOS Tests.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = "KeyValueObservation tvOS Tests.xctestplan"; sourceTree = ""; }; DD48BCA2270E101D00D842BC /* KeyValueObservation watchOS Tests.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = "KeyValueObservation watchOS Tests.xctestplan"; sourceTree = ""; }; DD5D044A261FA56400BA0FC2 /* KeyValueObservationTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "KeyValueObservationTests-Info.plist"; path = "Plists/KeyValueObservationTests-Info.plist"; sourceTree = ""; }; - DD662FFE2732C1C800CFF12F /* SRDKVOInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SRDKVOInfo.h; sourceTree = ""; }; - DD662FFF2732C1C800CFF12F /* KeyValueObservation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KeyValueObservation.h; sourceTree = ""; }; - DD6630002732C1C800CFF12F /* NSArray+KeyValueObservation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+KeyValueObservation.h"; sourceTree = ""; }; - DD6630012732C1C800CFF12F /* SRDKeyValueObservedChange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SRDKeyValueObservedChange.h; sourceTree = ""; }; - DD6630022732C1C800CFF12F /* NSObject+KeyValueObservation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+KeyValueObservation.h"; sourceTree = ""; }; - DD6630032732C1C800CFF12F /* SRDKeyValueObservation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SRDKeyValueObservation.h; sourceTree = ""; }; - DD6630062732C1C800CFF12F /* SRDKeyValueObservation+Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "SRDKeyValueObservation+Internal.h"; sourceTree = ""; }; - DD6630072732C1C800CFF12F /* NSArray+KeyValueObservation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSArray+KeyValueObservation.m"; sourceTree = ""; }; - DD6630082732C1C800CFF12F /* SRDKeyValueObservation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SRDKeyValueObservation.m; sourceTree = ""; }; - DD6630092732C1C800CFF12F /* NSObject+KeyValueObservation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+KeyValueObservation.m"; sourceTree = ""; }; - DD66300A2732C1C800CFF12F /* SRDKeyValueObservedChange.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SRDKeyValueObservedChange.m; sourceTree = ""; }; - DD66300B2732C1C800CFF12F /* SRDKVOInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SRDKVOInfo.m; sourceTree = ""; }; - DD66300C2732C1C800CFF12F /* SRDKeyValueObservedChange+Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "SRDKeyValueObservedChange+Internal.h"; sourceTree = ""; }; - DD6630412732C29000CFF12F /* KeyValueObservationTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KeyValueObservationTests.m; sourceTree = ""; }; DD86D53D23D11B3E0046E63E /* KeyValueObservation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = KeyValueObservation.framework; sourceTree = BUILT_PRODUCTS_DIR; }; DD86D54123D11B3E0046E63E /* KeyValueObservation-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "KeyValueObservation-Info.plist"; path = "Plists/KeyValueObservation-Info.plist"; sourceTree = ""; }; DD86D54623D11B3E0046E63E /* KeyValueObservationTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = KeyValueObservationTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -147,7 +148,7 @@ DD86D5DE23D22DB90046E63E /* LICENSE */ = {isa = PBXFileReference; lastKnownFileType = text; path = LICENSE; sourceTree = SOURCE_ROOT; }; DD86D5E023D22DB90046E63E /* KeyValueObservation.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; path = KeyValueObservation.podspec; sourceTree = SOURCE_ROOT; }; DD86D5E123D22DB90046E63E /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = SOURCE_ROOT; }; - DDA26DBD256EA4D700E1C6D7 /* workflows */ = {isa = PBXFileReference; lastKnownFileType = folder; name = workflows; path = .github/workflows; sourceTree = ""; }; + DDA42148273E153D00F2B0BC /* github */ = {isa = PBXFileReference; lastKnownFileType = folder; name = github; path = .github; sourceTree = ""; }; DDB1DE5C2405EEE300C20FED /* codecov.yml */ = {isa = PBXFileReference; lastKnownFileType = text.yaml; path = codecov.yml; sourceTree = ""; }; /* End PBXFileReference section */ @@ -215,59 +216,60 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - DD48BC9E270E0F1300D842BC /* Test Plans */ = { + DD438A012740BF9000F0A1F6 /* src */ = { isa = PBXGroup; children = ( - DD48BC9F270E0F4500D842BC /* KeyValueObservationTests.xctestplan */, - DD48BCA0270E0F9A00D842BC /* KeyValueObservation macOS Tests.xctestplan */, - DD48BCA1270E0FE200D842BC /* KeyValueObservation tvOS Tests.xctestplan */, - DD48BCA2270E101D00D842BC /* KeyValueObservation watchOS Tests.xctestplan */, + DD438A032740BF9000F0A1F6 /* NSArray+KeyValueObservation.m */, + DD438A052740BF9000F0A1F6 /* NSObject+KeyValueObservation.m */, + DD438A022740BF9000F0A1F6 /* SRDKeyValueObservation+Internal.h */, + DD438A042740BF9000F0A1F6 /* SRDKeyValueObservation.m */, + DD438A082740BF9000F0A1F6 /* SRDKeyValueObservedChange+Internal.h */, + DD438A062740BF9000F0A1F6 /* SRDKeyValueObservedChange.m */, + DD438A072740BF9000F0A1F6 /* SRDKVOInfo.m */, ); - path = "Test Plans"; + path = src; sourceTree = ""; }; - DD5D04E52621361600BA0FC2 /* KeyValueObservation */ = { + DD438A092740BF9000F0A1F6 /* include */ = { isa = PBXGroup; children = ( - DD662FFD2732C1C800CFF12F /* include */, - DD6630052732C1C800CFF12F /* src */, + DD438A102740BF9000F0A1F6 /* module.modulemap */, + DD438A0B2740BF9000F0A1F6 /* KeyValueObservation.h */, + DD438A0C2740BF9000F0A1F6 /* NSArray+KeyValueObservation.h */, + DD438A0E2740BF9000F0A1F6 /* NSObject+KeyValueObservation.h */, + DD438A0F2740BF9000F0A1F6 /* SRDKeyValueObservation.h */, + DD438A0D2740BF9000F0A1F6 /* SRDKeyValueObservedChange.h */, + DD438A0A2740BF9000F0A1F6 /* SRDKVOInfo.h */, ); - path = KeyValueObservation; + path = include; sourceTree = ""; }; - DD5D04F22621362400BA0FC2 /* KeyValueObservationTests */ = { + DD48BC9E270E0F1300D842BC /* Test Plans */ = { isa = PBXGroup; children = ( - DD6630412732C29000CFF12F /* KeyValueObservationTests.m */, + DD48BC9F270E0F4500D842BC /* KeyValueObservationTests.xctestplan */, + DD48BCA0270E0F9A00D842BC /* KeyValueObservation macOS Tests.xctestplan */, + DD48BCA1270E0FE200D842BC /* KeyValueObservation tvOS Tests.xctestplan */, + DD48BCA2270E101D00D842BC /* KeyValueObservation watchOS Tests.xctestplan */, ); - path = KeyValueObservationTests; + path = "Test Plans"; sourceTree = ""; }; - DD662FFD2732C1C800CFF12F /* include */ = { + DD5D04E52621361600BA0FC2 /* KeyValueObservation */ = { isa = PBXGroup; children = ( - DD662FFF2732C1C800CFF12F /* KeyValueObservation.h */, - DD6630002732C1C800CFF12F /* NSArray+KeyValueObservation.h */, - DD6630022732C1C800CFF12F /* NSObject+KeyValueObservation.h */, - DD6630032732C1C800CFF12F /* SRDKeyValueObservation.h */, - DD6630012732C1C800CFF12F /* SRDKeyValueObservedChange.h */, - DD662FFE2732C1C800CFF12F /* SRDKVOInfo.h */, + DD438A092740BF9000F0A1F6 /* include */, + DD438A012740BF9000F0A1F6 /* src */, ); - path = include; + path = KeyValueObservation; sourceTree = ""; }; - DD6630052732C1C800CFF12F /* src */ = { + DD5D04F22621362400BA0FC2 /* KeyValueObservationTests */ = { isa = PBXGroup; children = ( - DD6630072732C1C800CFF12F /* NSArray+KeyValueObservation.m */, - DD6630092732C1C800CFF12F /* NSObject+KeyValueObservation.m */, - DD6630062732C1C800CFF12F /* SRDKeyValueObservation+Internal.h */, - DD6630082732C1C800CFF12F /* SRDKeyValueObservation.m */, - DD66300C2732C1C800CFF12F /* SRDKeyValueObservedChange+Internal.h */, - DD66300A2732C1C800CFF12F /* SRDKeyValueObservedChange.m */, - DD66300B2732C1C800CFF12F /* SRDKVOInfo.m */, + DD4389FC2740BF8300F0A1F6 /* KeyValueObservationTests.m */, ); - path = src; + path = KeyValueObservationTests; sourceTree = ""; }; DD86D53323D11B3E0046E63E = { @@ -306,8 +308,8 @@ DD86D55B23D11BA80046E63E /* Supporting Files */ = { isa = PBXGroup; children = ( + DDA42148273E153D00F2B0BC /* github */, DD17A9F9257744BC00D30599 /* scripts */, - DDA26DBD256EA4D700E1C6D7 /* workflows */, DD86D5E023D22DB90046E63E /* KeyValueObservation.podspec */, DDB1DE5C2405EEE300C20FED /* codecov.yml */, DD86D5E123D22DB90046E63E /* README.md */, @@ -342,14 +344,14 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - DD66301D2732C1C800CFF12F /* NSObject+KeyValueObservation.h in Headers */, - DD66303D2732C1C900CFF12F /* SRDKeyValueObservedChange+Internal.h in Headers */, - DD6630192732C1C800CFF12F /* SRDKeyValueObservedChange.h in Headers */, - DD66300D2732C1C800CFF12F /* SRDKVOInfo.h in Headers */, - DD6630252732C1C900CFF12F /* SRDKeyValueObservation+Internal.h in Headers */, - DD6630152732C1C800CFF12F /* NSArray+KeyValueObservation.h in Headers */, - DD6630112732C1C800CFF12F /* KeyValueObservation.h in Headers */, - DD6630212732C1C800CFF12F /* SRDKeyValueObservation.h in Headers */, + DD438A2D2740BF9000F0A1F6 /* SRDKVOInfo.h in Headers */, + DD438A412740BF9000F0A1F6 /* SRDKeyValueObservation.h in Headers */, + DD438A312740BF9000F0A1F6 /* KeyValueObservation.h in Headers */, + DD438A392740BF9000F0A1F6 /* SRDKeyValueObservedChange.h in Headers */, + DD438A352740BF9000F0A1F6 /* NSArray+KeyValueObservation.h in Headers */, + DD438A3D2740BF9000F0A1F6 /* NSObject+KeyValueObservation.h in Headers */, + DD438A112740BF9000F0A1F6 /* SRDKeyValueObservation+Internal.h in Headers */, + DD438A292740BF9000F0A1F6 /* SRDKeyValueObservedChange+Internal.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -357,14 +359,14 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - DD66301E2732C1C800CFF12F /* NSObject+KeyValueObservation.h in Headers */, - DD66303E2732C1C900CFF12F /* SRDKeyValueObservedChange+Internal.h in Headers */, - DD66301A2732C1C800CFF12F /* SRDKeyValueObservedChange.h in Headers */, - DD66300E2732C1C800CFF12F /* SRDKVOInfo.h in Headers */, - DD6630262732C1C900CFF12F /* SRDKeyValueObservation+Internal.h in Headers */, - DD6630162732C1C800CFF12F /* NSArray+KeyValueObservation.h in Headers */, - DD6630122732C1C800CFF12F /* KeyValueObservation.h in Headers */, - DD6630222732C1C800CFF12F /* SRDKeyValueObservation.h in Headers */, + DD438A2E2740BF9000F0A1F6 /* SRDKVOInfo.h in Headers */, + DD438A422740BF9000F0A1F6 /* SRDKeyValueObservation.h in Headers */, + DD438A322740BF9000F0A1F6 /* KeyValueObservation.h in Headers */, + DD438A3A2740BF9000F0A1F6 /* SRDKeyValueObservedChange.h in Headers */, + DD438A362740BF9000F0A1F6 /* NSArray+KeyValueObservation.h in Headers */, + DD438A3E2740BF9000F0A1F6 /* NSObject+KeyValueObservation.h in Headers */, + DD438A122740BF9000F0A1F6 /* SRDKeyValueObservation+Internal.h in Headers */, + DD438A2A2740BF9000F0A1F6 /* SRDKeyValueObservedChange+Internal.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -372,14 +374,14 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - DD66301F2732C1C800CFF12F /* NSObject+KeyValueObservation.h in Headers */, - DD66303F2732C1C900CFF12F /* SRDKeyValueObservedChange+Internal.h in Headers */, - DD66301B2732C1C800CFF12F /* SRDKeyValueObservedChange.h in Headers */, - DD66300F2732C1C800CFF12F /* SRDKVOInfo.h in Headers */, - DD6630272732C1C900CFF12F /* SRDKeyValueObservation+Internal.h in Headers */, - DD6630172732C1C800CFF12F /* NSArray+KeyValueObservation.h in Headers */, - DD6630132732C1C800CFF12F /* KeyValueObservation.h in Headers */, - DD6630232732C1C900CFF12F /* SRDKeyValueObservation.h in Headers */, + DD438A2F2740BF9000F0A1F6 /* SRDKVOInfo.h in Headers */, + DD438A432740BF9000F0A1F6 /* SRDKeyValueObservation.h in Headers */, + DD438A332740BF9000F0A1F6 /* KeyValueObservation.h in Headers */, + DD438A3B2740BF9000F0A1F6 /* SRDKeyValueObservedChange.h in Headers */, + DD438A372740BF9000F0A1F6 /* NSArray+KeyValueObservation.h in Headers */, + DD438A3F2740BF9000F0A1F6 /* NSObject+KeyValueObservation.h in Headers */, + DD438A132740BF9000F0A1F6 /* SRDKeyValueObservation+Internal.h in Headers */, + DD438A2B2740BF9000F0A1F6 /* SRDKeyValueObservedChange+Internal.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -387,14 +389,14 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - DD6630202732C1C800CFF12F /* NSObject+KeyValueObservation.h in Headers */, - DD6630402732C1C900CFF12F /* SRDKeyValueObservedChange+Internal.h in Headers */, - DD66301C2732C1C800CFF12F /* SRDKeyValueObservedChange.h in Headers */, - DD6630102732C1C800CFF12F /* SRDKVOInfo.h in Headers */, - DD6630282732C1C900CFF12F /* SRDKeyValueObservation+Internal.h in Headers */, - DD6630182732C1C800CFF12F /* NSArray+KeyValueObservation.h in Headers */, - DD6630142732C1C800CFF12F /* KeyValueObservation.h in Headers */, - DD6630242732C1C900CFF12F /* SRDKeyValueObservation.h in Headers */, + DD438A302740BF9000F0A1F6 /* SRDKVOInfo.h in Headers */, + DD438A442740BF9000F0A1F6 /* SRDKeyValueObservation.h in Headers */, + DD438A342740BF9000F0A1F6 /* KeyValueObservation.h in Headers */, + DD438A3C2740BF9000F0A1F6 /* SRDKeyValueObservedChange.h in Headers */, + DD438A382740BF9000F0A1F6 /* NSArray+KeyValueObservation.h in Headers */, + DD438A402740BF9000F0A1F6 /* NSObject+KeyValueObservation.h in Headers */, + DD438A142740BF9000F0A1F6 /* SRDKeyValueObservation+Internal.h in Headers */, + DD438A2C2740BF9000F0A1F6 /* SRDKeyValueObservedChange+Internal.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -704,7 +706,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - DD6630452732C29000CFF12F /* KeyValueObservationTests.m in Sources */, + DD438A002740BF8300F0A1F6 /* KeyValueObservationTests.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -712,11 +714,11 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - DD66302D2732C1C900CFF12F /* SRDKeyValueObservation.m in Sources */, - DD6630352732C1C900CFF12F /* SRDKeyValueObservedChange.m in Sources */, - DD6630292732C1C900CFF12F /* NSArray+KeyValueObservation.m in Sources */, - DD6630312732C1C900CFF12F /* NSObject+KeyValueObservation.m in Sources */, - DD6630392732C1C900CFF12F /* SRDKVOInfo.m in Sources */, + DD438A192740BF9000F0A1F6 /* SRDKeyValueObservation.m in Sources */, + DD438A212740BF9000F0A1F6 /* SRDKeyValueObservedChange.m in Sources */, + DD438A1D2740BF9000F0A1F6 /* NSObject+KeyValueObservation.m in Sources */, + DD438A252740BF9000F0A1F6 /* SRDKVOInfo.m in Sources */, + DD438A152740BF9000F0A1F6 /* NSArray+KeyValueObservation.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -724,7 +726,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - DD6630422732C29000CFF12F /* KeyValueObservationTests.m in Sources */, + DD4389FD2740BF8300F0A1F6 /* KeyValueObservationTests.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -732,11 +734,11 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - DD66302E2732C1C900CFF12F /* SRDKeyValueObservation.m in Sources */, - DD6630362732C1C900CFF12F /* SRDKeyValueObservedChange.m in Sources */, - DD66302A2732C1C900CFF12F /* NSArray+KeyValueObservation.m in Sources */, - DD6630322732C1C900CFF12F /* NSObject+KeyValueObservation.m in Sources */, - DD66303A2732C1C900CFF12F /* SRDKVOInfo.m in Sources */, + DD438A1A2740BF9000F0A1F6 /* SRDKeyValueObservation.m in Sources */, + DD438A222740BF9000F0A1F6 /* SRDKeyValueObservedChange.m in Sources */, + DD438A1E2740BF9000F0A1F6 /* NSObject+KeyValueObservation.m in Sources */, + DD438A262740BF9000F0A1F6 /* SRDKVOInfo.m in Sources */, + DD438A162740BF9000F0A1F6 /* NSArray+KeyValueObservation.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -744,7 +746,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - DD6630432732C29000CFF12F /* KeyValueObservationTests.m in Sources */, + DD4389FE2740BF8300F0A1F6 /* KeyValueObservationTests.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -752,11 +754,11 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - DD66302F2732C1C900CFF12F /* SRDKeyValueObservation.m in Sources */, - DD6630372732C1C900CFF12F /* SRDKeyValueObservedChange.m in Sources */, - DD66302B2732C1C900CFF12F /* NSArray+KeyValueObservation.m in Sources */, - DD6630332732C1C900CFF12F /* NSObject+KeyValueObservation.m in Sources */, - DD66303B2732C1C900CFF12F /* SRDKVOInfo.m in Sources */, + DD438A1B2740BF9000F0A1F6 /* SRDKeyValueObservation.m in Sources */, + DD438A232740BF9000F0A1F6 /* SRDKeyValueObservedChange.m in Sources */, + DD438A1F2740BF9000F0A1F6 /* NSObject+KeyValueObservation.m in Sources */, + DD438A272740BF9000F0A1F6 /* SRDKVOInfo.m in Sources */, + DD438A172740BF9000F0A1F6 /* NSArray+KeyValueObservation.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -764,7 +766,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - DD6630442732C29000CFF12F /* KeyValueObservationTests.m in Sources */, + DD4389FF2740BF8300F0A1F6 /* KeyValueObservationTests.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -772,11 +774,11 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - DD6630302732C1C900CFF12F /* SRDKeyValueObservation.m in Sources */, - DD6630382732C1C900CFF12F /* SRDKeyValueObservedChange.m in Sources */, - DD66302C2732C1C900CFF12F /* NSArray+KeyValueObservation.m in Sources */, - DD6630342732C1C900CFF12F /* NSObject+KeyValueObservation.m in Sources */, - DD66303C2732C1C900CFF12F /* SRDKVOInfo.m in Sources */, + DD438A1C2740BF9000F0A1F6 /* SRDKeyValueObservation.m in Sources */, + DD438A242740BF9000F0A1F6 /* SRDKeyValueObservedChange.m in Sources */, + DD438A202740BF9000F0A1F6 /* NSObject+KeyValueObservation.m in Sources */, + DD438A282740BF9000F0A1F6 /* SRDKVOInfo.m in Sources */, + DD438A182740BF9000F0A1F6 /* NSArray+KeyValueObservation.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/README.md b/README.md index 7073463..dbfb3a7 100644 --- a/README.md +++ b/README.md @@ -7,10 +7,10 @@ [![Platform](https://img.shields.io/cocoapods/p/KeyValueObservation.svg)](https://cocoapods.org/pods/KeyValueObservation) [![Code Coverage](https://codecov.io/gh/SomeRandomiOSDev/KeyValueObservation/branch/master/graph/badge.svg)](https://codecov.io/gh/SomeRandomiOSDev/KeyValueObservation) -![Carthage](https://github.com/SomeRandomiOSDev/KeyValueObservation/workflows/Carthage/badge.svg) -![Cocoapods](https://github.com/SomeRandomiOSDev/KeyValueObservation/workflows/Cocoapods/badge.svg) -![XCFramework](https://github.com/SomeRandomiOSDev/KeyValueObservation/actions/workflows/xcframework.yml/badge.svg) -![Xcode Project](https://github.com/SomeRandomiOSDev/KeyValueObservation/workflows/Xcode%20Project/badge.svg) +[![Carthage](https://github.com/SomeRandomiOSDev/KeyValueObservation/actions/workflows/carthage.yml/badge.svg)](https://github.com/SomeRandomiOSDev/KeyValueObservation/actions/workflows/carthage.yml) +[![Cocoapods](https://github.com/SomeRandomiOSDev/KeyValueObservation/actions/workflows/cocoapods.yml/badge.svg)](https://github.com/SomeRandomiOSDev/KeyValueObservation/actions/workflows/cocoapods.yml) +[![XCFramework](https://github.com/SomeRandomiOSDev/KeyValueObservation/actions/workflows/xcframework.yml/badge.svg)](https://github.com/SomeRandomiOSDev/KeyValueObservation/actions/workflows/xcframework.yml) +[![Xcode Project](https://github.com/SomeRandomiOSDev/KeyValueObservation/actions/workflows/xcodebuild.yml/badge.svg)](https://github.com/SomeRandomiOSDev/KeyValueObservation/actions/workflows/xcodebuild.yml) Block based key-value observations in Objective-C @@ -109,11 +109,11 @@ An additional capability of this library is the ability to easily ignore certain In lieu of having to add flags to your object to determine when or when not to ignore particular Key-Value Observations one can simply do it from the context of a handler block. Any observations that match any of the `SRDKVOInfo` objects passed in to the method will be automatically ignored while executing the block. After the block finishes executing, the observations are once again passed through as normal. -Note that `-[NSObject performWhileIgnoringObservations:handler:]` uses method implementation swizzling to be able to ignore the specified observations, therefore it is important that you do not do any swizzling for the method `-[NSObject observeValueForKeyPath:ofObject:change:context:]` for the receiving class from the context of the handler block. Doing so could lead to unexpected results. +Note that `-[NSObject performWhileIgnoringObservations:handler:]` uses method implementation swizzling to be able to ignore the specified observations, therefore it is important that you do not do any swizzling for the method `-[NSObject observeValueForKeyPath:ofObject:change:context:]` for the receiving class from the context of the handler block. Doing so could lead to unexpected results. ## Contributing -If you have need for a specific feature or you encounter a bug, please open an issue. If you extend the functionality of **KeyValueObservation** yourself or you feel like fixing a bug yourself, please submit a pull request. +Whether it's submitting a feature request, reporting a bug, or writing code yourself, all contributions to this library are welcome! Please see [CONTRIBUTING](.github/CONTRIBUTING.md) for more information on how you can contribute. ## Author diff --git a/scripts/findproject.sh b/scripts/findproject.sh index 8717a0c..ebbbf41 100755 --- a/scripts/findproject.sh +++ b/scripts/findproject.sh @@ -47,6 +47,7 @@ while [[ $# -gt 0 ]]; do echo -e "Unknown argument: $1\n" 1>&2 EXIT_CODE=1 printhelp + ;; esac done diff --git a/scripts/workflowtests.sh b/scripts/workflowtests.sh index 9f35a29..104167b 100755 --- a/scripts/workflowtests.sh +++ b/scripts/workflowtests.sh @@ -95,6 +95,7 @@ while [[ $# -gt 0 ]]; do "$SCRIPTS_DIR/printformat.sh" "foreground:red" "Unknown argument: $1\n" 1>&2 EXIT_CODE=1 printhelp + ;; esac done @@ -198,7 +199,7 @@ function errormessage() { local ERROR_MESSAGE="$1" if [[ "$NO_CLEAN" == "1" ]] || [[ "$NO_CLEAN_ON_FAIL" == "1" ]]; then - ERROR_MESSAGE="$("$SCRIPTS_DIR/printformat.sh" "foreground:default" "${1%.}. See xcodebuild log for more details: $("$SCRIPTS_DIR/printformat.sh" "foreground:yellow" "$2")")" + ERROR_MESSAGE="$("$SCRIPTS_DIR/printformat.sh" "foreground:default" "${1%.}. See log for more details: $("$SCRIPTS_DIR/printformat.sh" "foreground:yellow" "$2")")" elif [ "$VERBOSE" != "1" ]; then ERROR_MESSAGE="$("$SCRIPTS_DIR/printformat.sh" "foreground:default" "${1%.}. Use the '--no-clean' or '--no-clean-on-fail' flag to inspect the logs.")" fi @@ -270,7 +271,7 @@ if which pod >/dev/null; then "$SCRIPTS_DIR/versions.sh" "$PODS_VERSION" "1.7.3" if [ $? -ge 0 ]; then - echo "CocoaPods: $(pod --version)" + echo "CocoaPods: $PODS_VERSION" else checkresult -1 "These unit tests require version 1.7.3 or later of CocoaPods: $("$SCRIPTS_DIR/printformat.sh" "foreground:blue;underline" "https://guides.cocoapods.org/using/getting-started.html#updating-cocoapods")" fi @@ -280,7 +281,7 @@ fi # Run Tests -printstep "Running Tests..." +printstep "Running Tests...\n" ### Carthage Workflow @@ -324,9 +325,11 @@ printstep "'xcframework.yml' Workflow Tests Passed\n" printstep "Testing 'upload-assets.yml' Workflow..." +echo -e "$("$SCRIPTS_DIR/printformat.sh" "foreground:blue" "***") Creating zip archive for $("$SCRIPTS_DIR/printformat.sh" "bold" "$PROJECT_NAME.xcframework")" zip -rX "$PROJECT_NAME.xcframework.zip" "$PROJECT_NAME.xcframework" >/dev/null 2>&1 checkresult $? "'Create Zip' step of 'upload-assets.yml' workflow failed." +echo -e "$("$SCRIPTS_DIR/printformat.sh" "foreground:blue" "***") Creating tar archive for $("$SCRIPTS_DIR/printformat.sh" "bold" "$PROJECT_NAME.xcframework")" tar -zcvf "$PROJECT_NAME.xcframework.tar.gz" "$PROJECT_NAME.xcframework" >/dev/null 2>&1 checkresult $? "'Create Tar' step of 'upload-assets.yml' workflow failed." diff --git a/scripts/xcframework.sh b/scripts/xcframework.sh index 01432d2..5be1681 100755 --- a/scripts/xcframework.sh +++ b/scripts/xcframework.sh @@ -10,6 +10,9 @@ SCRIPTS_DIR="$(dirname "$SCRIPT")" ROOT_DIR="$(dirname "$SCRIPTS_DIR")" CURRENT_DIR="$(pwd -P)" +IS_PARSING_BUILD_ARGS=0 +BUILD_ARGS=() + EXIT_CODE=0 # Help @@ -20,7 +23,9 @@ function printhelp() { HELP+="xcframework.sh [--help | -h] [--output ( | )]\n" HELP+=" [--configuration ] [--project-name ]\n" HELP+=" [--exclude-dsyms] [--verbose] [--no-clean | --no-clean-on-fail]\n" - HELP+=" [--build-dir ]\n" + HELP+="xcframework.sh [options] -- ...\n" + HELP+="\n" + HELP+="OPTIONS:\n" HELP+="\n" HELP+="--help, -h) Print this help message and exit.\n" HELP+="\n" @@ -54,6 +59,12 @@ function printhelp() { HELP+=" and logs. The directory will be created if needed. If\n" HELP+=" specified this directory will not be deleted when the\n" HELP+=" script finishes running.\n" + HELP+="\n" + HELP+="ARGUMENTS:\n" + HELP+="\n" + HELP+=" Any arguments that appear after a '--' argument are treated\n" + HELP+=" as Xcode build arguments and are passed as is to `xcodebuild`\n" + HELP+=" when building the architectures for the XCFramework.\n" IFS='%' echo -e $HELP 1>&2 @@ -65,60 +76,71 @@ function printhelp() { # Parse Arguments while [[ $# -gt 0 ]]; do - case "$1" in - --output) - OUTPUT="$2" - shift # --output - shift # - ;; - - --configuration) - CONFIGURATION="$2" - shift # --configuration - shift # - ;; - - --project-name) - PROJECT_NAME="$2" - shift # --project-name - shift # - ;; - - --exclude-dsyms) - EXCLUDE_DSYMS=1 - shift # --exclude-dsyms - ;; - - --no-clean) - NO_CLEAN=1 - shift # --no-clean - ;; - - --no-clean-on-fail) - NO_CLEAN_ON_FAIL=1 - shift # --no-clean-on-fail - ;; - - --build-dir) - BUILD_DIR="$2" - shift # --build-dir - shift # - ;; - - --verbose) - VERBOSE=1 - shift # --verbose - ;; - - --help | -h) - printhelp - ;; - - *) - "$SCRIPTS_DIR/printformat.sh" "foreground:red" "Unknown argument: $1\n" 1>&2 - EXIT_CODE=1 - printhelp - esac + if [ "$IS_PARSING_BUILD_ARGS" == "1" ]; then + BUILD_ARGS=("${BUILD_ARGS[@]}" "$1") + shift + else + case "$1" in + --output) + OUTPUT="$2" + shift # --output + shift # + ;; + + --configuration) + CONFIGURATION="$2" + shift # --configuration + shift # + ;; + + --project-name) + PROJECT_NAME="$2" + shift # --project-name + shift # + ;; + + --exclude-dsyms) + EXCLUDE_DSYMS=1 + shift # --exclude-dsyms + ;; + + --no-clean) + NO_CLEAN=1 + shift # --no-clean + ;; + + --no-clean-on-fail) + NO_CLEAN_ON_FAIL=1 + shift # --no-clean-on-fail + ;; + + --build-dir) + BUILD_DIR="$2" + shift # --build-dir + shift # + ;; + + --verbose) + VERBOSE=1 + shift # --verbose + ;; + + --help | -h) + printhelp + ;; + + --) + IS_PARSING_BUILD_ARGS=1 + shift # -- + ;; + + *) + "$SCRIPTS_DIR/printformat.sh" "foreground:red" "Unknown argument: $1\n" 1>&2 + EXIT_CODE=1 + printhelp + ;; + esac + fi done # @@ -164,6 +186,10 @@ else fi fi +# Create Temporary Directory + +TEMP_DIR="$(mktemp -d -t ".$(echo "$PROJECT_NAME" | tr '[:upper:]' '[:lower:]').xcframework.build")" + # Function Declarations function cleanup() { @@ -285,14 +311,14 @@ for PLATFORM in "iOS" "iOS Simulator" "Mac Catalyst" "macOS" "tvOS" "tvOS Simula # if [ "$VERBOSE" == "1" ]; then - xcodebuild -project "${PROJECT_NAME}.xcodeproj" -scheme "$SCHEME" -destination "generic/platform=$PLATFORM" -archivePath "${BUILD_DIR}/$ARCHIVE.xcarchive" -configuration ${CONFIGURATION} SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES ONLY_ACTIVE_ARCH=NO ARCHS="$ARCHS" archive + xcodebuild -project "${PROJECT_NAME}.xcodeproj" -scheme "$SCHEME" -destination "generic/platform=$PLATFORM" -archivePath "${BUILD_DIR}/$ARCHIVE.xcarchive" -configuration ${CONFIGURATION} SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES ONLY_ACTIVE_ARCH=NO ARCHS="$ARCHS" "${BUILD_ARGS[@]}" archive else LOG="$(createlogfile "$ARCHIVE-build")" ERROR_MESSAGE="$(errormessage "$LOG")" # - xcodebuild -project "${PROJECT_NAME}.xcodeproj" -scheme "$SCHEME" -destination "generic/platform=$PLATFORM" -archivePath "${BUILD_DIR}/$ARCHIVE.xcarchive" -configuration ${CONFIGURATION} SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES ONLY_ACTIVE_ARCH=NO ARCHS="$ARCHS" archive > "$LOG" 2>&1 + xcodebuild -project "${PROJECT_NAME}.xcodeproj" -scheme "$SCHEME" -destination "generic/platform=$PLATFORM" -archivePath "${BUILD_DIR}/$ARCHIVE.xcarchive" -configuration ${CONFIGURATION} SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES ONLY_ACTIVE_ARCH=NO ARCHS="$ARCHS" "${BUILD_ARGS[@]}" archive > "$LOG" 2>&1 fi checkresult $? "$ERROR_MESSAGE" From 0b0ca5f31f2a7af62599d776650939a947853c0f Mon Sep 17 00:00:00 2001 From: Joe Newton Date: Sat, 13 Nov 2021 23:55:44 -0500 Subject: [PATCH 2/2] Updated all workflows to run using `macOS-11` --- .github/workflows/carthage.yml | 2 +- .github/workflows/cocoapods.yml | 2 +- .github/workflows/publish-cocoapods.yml | 2 +- .github/workflows/upload-assets.yml | 2 +- .github/workflows/xcframework.yml | 2 +- .github/workflows/xcodebuild.yml | 8 ++++---- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/carthage.yml b/.github/workflows/carthage.yml index 52921b2..2eeb18f 100644 --- a/.github/workflows/carthage.yml +++ b/.github/workflows/carthage.yml @@ -19,7 +19,7 @@ on: jobs: build: name: Build - runs-on: macOS-latest + runs-on: macOS-11 env: LOGSDIR: /tmp/.keyvalueobservation.carthage/Logs diff --git a/.github/workflows/cocoapods.yml b/.github/workflows/cocoapods.yml index 08859b4..343fc73 100644 --- a/.github/workflows/cocoapods.yml +++ b/.github/workflows/cocoapods.yml @@ -21,7 +21,7 @@ jobs: linttype: [Dynamic, Static] name: Lint - runs-on: macOS-latest + runs-on: macOS-11 env: LOGSDIR: /tmp/.keyvalueobservation.cocoapods/Logs/${{ matrix.linttype }} LINT_TYPE: ${{ matrix.linttype }} diff --git a/.github/workflows/publish-cocoapods.yml b/.github/workflows/publish-cocoapods.yml index e8ed875..d5619aa 100644 --- a/.github/workflows/publish-cocoapods.yml +++ b/.github/workflows/publish-cocoapods.yml @@ -6,7 +6,7 @@ on: jobs: publish: name: Publish CocoaPods - runs-on: macOS-latest + runs-on: macOS-11 env: LOGSDIR: /tmp/.keyvalueobservation.cocoapods/Logs COCOAPODS_TRUNK_TOKEN: ${{ secrets.COCOAPODS_TRUNK_TOKEN }} diff --git a/.github/workflows/upload-assets.yml b/.github/workflows/upload-assets.yml index f616418..d8ad327 100644 --- a/.github/workflows/upload-assets.yml +++ b/.github/workflows/upload-assets.yml @@ -6,7 +6,7 @@ on: jobs: xcframework: name: Upload XCFramework Assets - runs-on: macOS-latest + runs-on: macOS-11 env: TMPDIR: /tmp/.keyvalueobservation.assets-xcframework.build diff --git a/.github/workflows/xcframework.yml b/.github/workflows/xcframework.yml index d3d81f2..cc64645 100644 --- a/.github/workflows/xcframework.yml +++ b/.github/workflows/xcframework.yml @@ -19,7 +19,7 @@ on: jobs: build: name: Build - runs-on: macOS-latest + runs-on: macOS-11 env: TMPDIR: /tmp/.keyvalueobservation.xcframework.build diff --git a/.github/workflows/xcodebuild.yml b/.github/workflows/xcodebuild.yml index 7373052..7be2e1e 100644 --- a/.github/workflows/xcodebuild.yml +++ b/.github/workflows/xcodebuild.yml @@ -18,7 +18,7 @@ on: jobs: ios: name: iOS - runs-on: macOS-latest + runs-on: macOS-11 env: LOGSDIR: /tmp/.keyvalueobservation.xcodebuild/iOS/Logs @@ -56,7 +56,7 @@ jobs: maccatalyst: name: Mac Catalyst - runs-on: macOS-latest + runs-on: macOS-11 env: LOGSDIR: /tmp/.keyvalueobservation.xcodebuild/macCatalyst/Logs @@ -85,7 +85,7 @@ jobs: macos: name: macOS - runs-on: macOS-latest + runs-on: macOS-11 env: LOGSDIR: /tmp/.keyvalueobservation.xcodebuild/macOS/Logs @@ -129,7 +129,7 @@ jobs: tvos: name: tvOS - runs-on: macOS-latest + runs-on: macOS-11 env: LOGSDIR: /tmp/.keyvalueobservation.xcodebuild/tvOS/Logs