diff --git a/.github/workflows/automation-trigger-test.yml b/.github/workflows/automation-trigger-test.yml index 6888e7e4b..ae39e1c37 100644 --- a/.github/workflows/automation-trigger-test.yml +++ b/.github/workflows/automation-trigger-test.yml @@ -23,7 +23,7 @@ jobs: BROWSERSTACK_USER: ${{ secrets.BROWSER_STACK_USER }} steps: - name: Check out code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Install the Apple certificate and provisioning profile env: BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }} @@ -67,20 +67,20 @@ jobs: response=$(curl -X POST https://api-cloud.browserstack.com/app-automate/upload -u "${{ secrets.BROWSER_STACK_USER }}:${{ secrets.BROWSER_STACK_KEY }}" -F "file=@DeepLinkDemo/IPA/DeepLinkDemo.ipa") parsed=$(echo $response | jq ".app_url") echo "::add-mask::$parsed" - echo "APP_URL=$parsed" >> "$GITHUB_ENV" + echo "BrowserStackIOSBuildKey=$parsed" >> "$GITHUB_ENV" - name: Cheout Automation Code - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: repository: BranchMetrics/qentelli-saas-sdk-testing-automation token: ${{ secrets.BRANCHLET_ACCESS_TOKEN_PUBLIC }} - name: Set up JDK 11 - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: java-version: '11' distribution: 'temurin' cache: maven - name: Setup Node.js environment - uses: actions/setup-node@v3.6.0 + uses: actions/setup-node@v4.0.1 - name: Build with Maven id: build_maven run: | diff --git a/.github/workflows/dependabot-merger.yml b/.github/workflows/dependabot-merger.yml index 2804f0588..43c5d836c 100644 --- a/.github/workflows/dependabot-merger.yml +++ b/.github/workflows/dependabot-merger.yml @@ -1,4 +1,5 @@ name: Merge Dependabot PRs + on: schedule: - cron: "0 9 * * 1" # Run this workflow every Monday at 9:00 @@ -7,120 +8,151 @@ on: jobs: merge: runs-on: ubuntu-latest - steps: - - name: Check out code - uses: actions/checkout@v3 - with: - ref: master - - name: Authenticate GitHub CLI - run: echo "${{ secrets.DEPENDABOT_MERGER_PAT }}" | gh auth login --with-token - - - name: Set Git user identity + steps: + - name: Get current on-call + id: on-call run: | - git config user.email "dependabot-merger-bot@branch.io" - git config user.name "Dependabot Merger Bot" + now=$(date -u +%Y-%m-%dT%H:%M:%SZ) + end_time=$(date -u -d '+24 hour' +%Y-%m-%dT%H:%M:%SZ) - - name: Get current date and time - id: datetime - run: echo "date=$(date +'%m-%d-%Y-%H-%M')" >> $GITHUB_OUTPUT + oncall=$(curl --request GET \ + --url "https://api.pagerduty.com/oncalls?since=$now&until=$end_time&schedule_ids[]=PQLHTOP" \ + --header 'Accept: application/vnd.pagerduty+json;version=2' \ + --header "Authorization: Token token=${{ secrets.PAGERDUTY_TOKEN }}" \ + --header 'Content-Type: application/json' ) - - name: Create new branch based on date and time - run: | - NEW_BRANCH="dependabot-test-${{ steps.datetime.outputs.date }}" - git checkout -b $NEW_BRANCH - git push origin $NEW_BRANCH - - - name: Get list of PRs from dependabot - id: pr_list - run: | - PR_LIST=$(gh pr list --json number,author,headRefName --jq '.[] | select( .author.is_bot == true and .author.login == "app/dependabot" ) | "\(.number) \(.headRefName)"') - PR_LIST=$(echo "$PR_LIST" | tr -d '\r') - if [ -z "$PR_LIST" ]; then - echo "No PRs from dependabot found." - exit 0 - fi + engineer_name=$(echo "$oncall" | jq -r '.oncalls[0].user.summary') - PR_COUNT=$(echo "$PR_LIST" | wc -l) - echo "$PR_COUNT PR's to be merged." + declare -A engineer_to_slackid + engineer_to_slackid=( + ["Nipun Singh"]="U02AMC70R6E" + ["Jagadeesh Karicherla"]="U038BDE0XUZ" + ["Gabe De Luna"]="U02MDA0PHK5" + ["Ernest Cho"]="UCV77QDSL" + ["Nidhi Dixit"]="U02GDFBP88N" + ) - EOF=$(dd if=/dev/urandom bs=15 count=1 status=none | base64) - echo "prs<<$EOF" >> $GITHUB_OUTPUT - echo "$PR_LIST" >> $GITHUB_OUTPUT - echo "$EOF" >> $GITHUB_OUTPUT + slack_id=${engineer_to_slackid["$engineer_name"]} + echo "oncall_slack_id=$slack_id" >> $GITHUB_OUTPUT - - name: Merge PRs into new branch - run: | - NEW_BRANCH="dependabot-test-${{ steps.datetime.outputs.date }}" - git checkout $NEW_BRANCH - PR_LIST="${{ steps.pr_list.outputs.prs }}" - while IFS= read -r line; do - IFS=' ' read -r PR_NUMBER BRANCH_NAME <<< "$line" - echo "Merging PR #$PR_NUMBER from branch $BRANCH_NAME into $NEW_BRANCH..." - git fetch origin $BRANCH_NAME - git merge --no-commit --allow-unrelated-histories --strategy-option=theirs origin/$BRANCH_NAME - echo "Pushing changes to $NEW_BRANCH..." - git commit -m "Merged PR #$PR_NUMBER into $NEW_BRANCH" - git push origin $NEW_BRANCH - done <<< "$PR_LIST" + - name: Create PR + uses: actions/github-script@v7 + id: create-pr + with: + script: | + const uniqueBranchName = 'dependabot-combined-prs-' + Date.now().toString(); + const pulls = await github.paginate('GET /repos/:owner/:repo/pulls', { + owner: context.repo.owner, + repo: context.repo.repo + }); + let branchesAndPRStrings = []; + let baseBranch = null; + let baseBranchSHA = null; + for (const pull of pulls) { + const branch = pull['head']['ref']; + if (branch.startsWith('dependabot/')) { + console.log('Branch matched prefix. Adding to array: ' + branch); + const prString = '#' + pull['number'] + ' ' + pull['title']; + branchesAndPRStrings.push({ branch, prString }); + baseBranch = pull['base']['ref']; + baseBranchSHA = pull['base']['sha']; + } + } + if (branchesAndPRStrings.length == 0) { + core.setFailed('There are no open dependabot PRs.'); + return; + } + try { + await github.rest.git.createRef({ + owner: context.repo.owner, + repo: context.repo.repo, + ref: 'refs/heads/' + uniqueBranchName, + sha: baseBranchSHA + }); + } catch (error) { + console.log(error); + core.setFailed('Failed to create combined branch'); + return; + } - - name: Merge process status - run: | - echo "Merging process completed successfully!" - echo "New branch name: dependabot-test-${{ steps.datetime.outputs.date }}" + let combinedPRs = []; + let mergeFailedPRs = []; + for(const { branch, prString } of branchesAndPRStrings) { + try { + await github.rest.repos.merge({ + owner: context.repo.owner, + repo: context.repo.repo, + base: uniqueBranchName, + head: branch, + }); + console.log('Merged branch ' + branch); + combinedPRs.push(prString); + } catch (error) { + console.log('Failed to merge branch ' + branch); + mergeFailedPRs.push(prString); + } + } - - name: Generate PR links - id: pr_links - run: | - PR_LIST="${{ steps.pr_list.outputs.prs }}" - PR_LINKS="" - while IFS= read -r line; do - IFS=' ' read -r PR_NUMBER BRANCH_NAME <<< "$line" - PR_URL="https://github.com/${GITHUB_REPOSITORY}/pull/$PR_NUMBER" - PR_LINKS+="\n• <$PR_URL|#${PR_NUMBER}: ${BRANCH_NAME}>" - done <<< "$PR_LIST" - EOF=$(dd if=/dev/urandom bs=15 count=1 status=none | base64) - echo "pr_links<<$EOF" >> $GITHUB_OUTPUT - echo "$PR_LINKS" >> $GITHUB_OUTPUT - echo "$EOF" >> $GITHUB_OUTPUT + console.log('Creating combined PR'); + const combinedPRsString = combinedPRs.join('\n'); + let body = '✅ This PR was created by the Merge Dependabot PRs action by combining the following dependabot PRs:\n' + combinedPRsString; + if(mergeFailedPRs.length > 0) { + const mergeFailedPRsString = mergeFailedPRs.join('\n'); + body += '\n\n⚠️ The following dependabot PRs were left out due to merge conflicts:\n' + mergeFailedPRsString + } + let response = await github.rest.pulls.create({ + owner: context.repo.owner, + repo: context.repo.repo, + title: 'Combined Dependabot PR', + head: uniqueBranchName, + base: baseBranch, + body: body + }); + console.log('Created combined PR: ' + response.data.html_url); + core.setOutput('pr_url', response.data.html_url); + core.setOutput('pr_list', combinedPRsString); - name: Post to a Slack channel uses: slackapi/slack-github-action@v1.24.0 + id: slack with: channel-id: "C03RTLRKJQP" payload: | { - "blocks": [ + "text": "iOS: New Dependabot PR Awaiting Review", + "blocks": [ { - "type": "header", - "text": { + "type": "header", + "text": { "type": "plain_text", - "text": "⚡️ New iOS Dependabot Testing Branch", + "text":"📱🔧 iOS: New Dependabot PR Awaiting Review", "emoji": true - } + } }, { - "type": "section", - "text": { + "type": "section", + "text": { "type": "mrkdwn", - "text": "*Included PRs:*${{ steps.pr_links.outputs.pr_links }}" - } + "text": "*Included PRs:*\n${{ toJSON(steps.create-pr.outputs.pr_list) }}\n\n\nCurrent On-Call: *<${{ steps.on-call.outputs.oncall_slack_id }}>*" + } }, { - "type": "actions", - "elements": [ - { - "type": "button", - "text": { - "type": "plain_text", - "text": "Checkout Test Branch", - "emoji": true - }, - "value": "branch-button", - "url": "https://github.com/${{ github.repository }}/tree/dependabot-test-${{ steps.datetime.outputs.date }}", - "action_id": "link-action" - } - ] + "type": "actions", + "elements": [ + { + "type": "button", + "text": { + "type": "plain_text", + "text": ":github-pull-request-open: View Combined PR", + "emoji": true + }, + "value": "pr-button", + "url": "${{ steps.create-pr.outputs.pr_url }}", + "action_id": "link-action", + "style": "primary" + } + ] } ] } diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index 1f3a9a1dd..079e2cf9e 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -9,7 +9,7 @@ jobs: runs-on: macos-latest steps: - name: Check out code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Set up Ruby 2.7 uses: ruby/setup-ruby@v1 with: diff --git a/.github/workflows/post-release-qa.yml b/.github/workflows/post-release-qa.yml index 758e6a14d..869796deb 100644 --- a/.github/workflows/post-release-qa.yml +++ b/.github/workflows/post-release-qa.yml @@ -8,7 +8,7 @@ jobs: runs-on: macos-latest steps: - name: Check out code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Install pod, build project and run tests run: | ./scripts/getSimulator @@ -20,7 +20,7 @@ jobs: runs-on: macos-latest steps: - name: Check out code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Run carthage command, build project and run tests run: | ./scripts/getSimulator @@ -32,7 +32,7 @@ jobs: runs-on: macos-latest steps: - name: Check out code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: build project and run tests run: | ./scripts/getSimulator @@ -43,7 +43,7 @@ jobs: runs-on: macos-latest steps: - name: Check out code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Install pod, build project and run tests run: | ./scripts/getSimulator diff --git a/.github/workflows/pre-release-qa.yml b/.github/workflows/pre-release-qa.yml index 2494bf6ce..2178d9faf 100644 --- a/.github/workflows/pre-release-qa.yml +++ b/.github/workflows/pre-release-qa.yml @@ -7,7 +7,7 @@ jobs: runs-on: macos-latest steps: - name: Check out code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Install pod, build project and run tests run: | echo "branch=${{ github.ref }}" >> $GITHUB_OUTPUT @@ -20,7 +20,7 @@ jobs: runs-on: macos-latest steps: - name: Check out code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Create Cart File, run carthage command, build project and run tests env: BRANCH_NAME: ${{ github.head_ref || github.ref_name }} @@ -36,7 +36,7 @@ jobs: runs-on: macos-latest steps: - name: Check out code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: build project and run tests run: | ./scripts/getSimulator @@ -47,7 +47,7 @@ jobs: runs-on: macos-latest steps: - name: Check out code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: build xcframework, then build project and run tests run: | ./scripts/getSimulator @@ -59,7 +59,7 @@ jobs: runs-on: macos-latest steps: - name: Check out code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: build static xcframework, then build project and run tests run: | ./scripts/getSimulator @@ -71,7 +71,7 @@ jobs: runs-on: macos-latest steps: - name: Check out code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Install pod, build project and run tests run: | ./scripts/getSimulator @@ -83,7 +83,7 @@ jobs: runs-on: macos-latest steps: - name: Check out code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Verify Integration using Carthage for tvOS run: | ./scripts/getSimulator @@ -94,7 +94,7 @@ jobs: runs-on: macos-latest steps: - name: Check out code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: build xcframework, then build project and run tests run: | ./scripts/getSimulator diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 93c2160f3..e7f5aba60 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -20,7 +20,7 @@ jobs: runs-on: macos-latest steps: - name: Check out code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Run static analysis run: | xcodebuild analyze -project BranchSDK.xcodeproj @@ -31,7 +31,7 @@ jobs: # needs: [static-analysis] # steps: # - name: Check out code - # uses: actions/checkout@v3 + # uses: actions/checkout@v4 # - name: Update Version # run: | # if [[ ${{ inputs.version }} == "patch" ]]; then @@ -56,12 +56,12 @@ jobs: needs: [static-analysis] steps: - name: Check out code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Build xcframework run: | ./scripts/prep_xcframework.sh - name: Upload build artifacts - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: release_framework path: | @@ -74,12 +74,12 @@ jobs: needs: [static-analysis] steps: - name: Check out code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Build xcframework run: | ./scripts/prep_xcframework_noidfa.sh - name: Upload build artifacts - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: framework-noidfa path: | @@ -92,12 +92,12 @@ jobs: needs: [static-analysis] steps: - name: Check out code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Build static xcframework run: | ./scripts/prep_static_xcframework.sh - name: Upload build artifacts - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: static-framework path: | @@ -110,12 +110,12 @@ jobs: needs: [static-analysis] steps: - name: Check out code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Build static xcframework run: | ./scripts/prep_static_xcframework_noidfa.sh - name: Upload build artifacts - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: static-framework-noidfa path: | @@ -127,7 +127,7 @@ jobs: needs: [build-framework, build-static-framework, build-noidfa-framework, build-static-noidfa-framework] steps: - name: Check out code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Set up Ruby 2.7 uses: ruby/setup-ruby@v1 with: @@ -150,7 +150,7 @@ jobs: bundle config set --local path vendor bundle check || bundle install - name: Download build artifacts - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 - name: Publish to CocoaPods run: | # TODO: Authenticate using repo secret @@ -164,7 +164,7 @@ jobs: echo "Current version is $(cat fastlane/.version)." echo "version=$(cat fastlane/.version)" >> $GITHUB_OUTPUT - name: Create GitHub Release - uses: actions/github-script@v6 + uses: actions/github-script@v7 with: script: | const createRelease = require('./.github/custom-scripts/create-release'); @@ -178,7 +178,7 @@ jobs: version: tagName, }); - name: Upload Release Assets - uses: actions/github-script@v6 + uses: actions/github-script@v7 with: script: | const uploadAsset = require('./.github/custom-scripts/upload-asset'); diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 3adc37e2c..aae9016da 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -17,9 +17,9 @@ jobs: issues: write steps: - - uses: actions/stale@v8 + - uses: actions/stale@v9 with: - repo-token: ${{ secrets.STALE_PERSONAL_ACCESS_TOKEN }} + repo-token: ${{ github.token }} days-before-issue-stale: 60 days-before-close: 7 stale-issue-message: 'This issue has been automatically marked as stale due to inactivity for 60 days. If this issue is still relevant, please respond with any updates or this issue will be closed in 7 days. If you believe this is a mistake, please comment to let us know. Thank you for your contributions.' diff --git a/.github/workflows/sync-readme-changelog.yml b/.github/workflows/sync-readme-changelog.yml index b19b9c1a6..6a97def6f 100644 --- a/.github/workflows/sync-readme-changelog.yml +++ b/.github/workflows/sync-readme-changelog.yml @@ -42,7 +42,7 @@ jobs: - name: Announce New Release in Slack uses: slackapi/slack-github-action@v1.24.0 with: - channel-id: "CDFGXRM9S" + channel-id: "C063MQJMKJN" #sdk-releases payload: | { "text": "New Release: Branch iOS SDK v${{ github.event.release.tag_name }}", diff --git a/.github/workflows/verify.yml b/.github/workflows/verify.yml index 2e6e534eb..b7eb8c880 100644 --- a/.github/workflows/verify.yml +++ b/.github/workflows/verify.yml @@ -10,7 +10,7 @@ jobs: runs-on: macos-latest steps: - name: Check out code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Set up Ruby 2.7 uses: ruby/setup-ruby@v1 with: @@ -31,8 +31,8 @@ jobs: # This happens automatically with the unit_tests lane, but adding it here # makes it easier to keep track of installation time via GHA without # adding execution time to the next step. - - name: Install CocoaPods dependencies - run: bundle exec fastlane prepare_pods + #- name: Install CocoaPods dependencies + # run: bundle exec fastlane prepare_pods - name: Run unit tests run: bundle exec fastlane unit_tests - name: Upload test results diff --git a/.github/workflows/version-bump.yml b/.github/workflows/version-bump.yml index a621c4fcc..38b7f9842 100644 --- a/.github/workflows/version-bump.yml +++ b/.github/workflows/version-bump.yml @@ -15,7 +15,7 @@ jobs: runs-on: macos-latest steps: - name: Check out code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Set up Ruby 2.7 uses: ruby/setup-ruby@v1 with: diff --git a/Branch-TestBed/Branch-SDK-Tests/BNCAPIServerTest.m b/Branch-TestBed/Branch-SDK-Tests/BNCAPIServerTest.m index 5f70fcb68..b7df6da68 100644 --- a/Branch-TestBed/Branch-SDK-Tests/BNCAPIServerTest.m +++ b/Branch-TestBed/Branch-SDK-Tests/BNCAPIServerTest.m @@ -11,6 +11,7 @@ #import "BNCSystemObserver.h" #import "BNCConfig.h" #import "BranchConstants.h" +#import "Branch.h" @interface BNCAPIServerTest : XCTestCase @@ -370,4 +371,42 @@ - (void)testValidationServiceURL_EUTracking { XCTAssertTrue([url hasPrefix:expectedUrlPrefix]); } +- (void)testDefaultAPIURL { + BNCServerAPI *serverAPI = [BNCServerAPI new]; + XCTAssertNil(serverAPI.customAPIURL); + + NSString *storedUrl = [[BNCServerAPI sharedInstance] installServiceURL]; + NSString *expectedUrl = [BNC_API_URL stringByAppendingString: @"/v1/install"]; + XCTAssertEqualObjects(storedUrl, expectedUrl); +} + +- (void)testSetAPIURL_Example { + NSString *url = @"https://www.example.com"; + [Branch setAPIUrl:url]; + + NSString *storedUrl = [[BNCServerAPI sharedInstance] installServiceURL]; + NSString *expectedUrl = [url stringByAppendingString: @"/v1/install"]; + XCTAssertEqualObjects(storedUrl, expectedUrl); + + [Branch setAPIUrl:BNC_API_URL]; +} + +- (void)testSetAPIURL_InvalidHttp { + NSString *url = @"Invalid://www.example.com"; + [Branch setAPIUrl:url]; + + NSString *storedUrl = [[BNCServerAPI sharedInstance] installServiceURL]; + NSString *expectedUrl = [BNC_API_URL stringByAppendingString: @"/v1/install"]; + XCTAssertEqualObjects(storedUrl, expectedUrl); +} + +- (void)testSetAPIURL_InvalidEmpty { + NSString *url = @""; + [Branch setAPIUrl:url]; + + NSString *storedUrl = [[BNCServerAPI sharedInstance] installServiceURL]; + NSString *expectedUrl = [BNC_API_URL stringByAppendingString: @"/v1/install"]; + XCTAssertEqualObjects(storedUrl, expectedUrl); +} + @end diff --git a/Branch-TestBed/Branch-SDK-Tests/BNCApplication+BNCTest.h b/Branch-TestBed/Branch-SDK-Tests/BNCApplication+BNCTest.h deleted file mode 100644 index 0c50af6d4..000000000 --- a/Branch-TestBed/Branch-SDK-Tests/BNCApplication+BNCTest.h +++ /dev/null @@ -1,20 +0,0 @@ -/** - @file BNCApplication+BNCTest.h - @package Branch-SDK-Tests - @brief Expose BNCApplication interfaces for testing. - - @author Edward Smith - @date May 4, 2018 - @copyright Copyright © 2018 Branch. All rights reserved. -*/ - -#import -#import "BNCApplication.h" - -@interface BNCApplication (BNCTest) - -- (void) setAppOriginalInstallDate:(NSDate*)originalInstallDate - firstInstallDate:(NSDate*)firstInstallDate - lastUpdateDate:(NSDate*)lastUpdateDate; - -@end diff --git a/Branch-TestBed/Branch-SDK-Tests/BNCApplication+BNCTest.m b/Branch-TestBed/Branch-SDK-Tests/BNCApplication+BNCTest.m deleted file mode 100644 index 72de10fde..000000000 --- a/Branch-TestBed/Branch-SDK-Tests/BNCApplication+BNCTest.m +++ /dev/null @@ -1,11 +0,0 @@ -/** - @file BNCApplication+BNCTest.m - @package Branch-SDK-Tests - @brief Expose BNCApplication interfaces for testing. - - @author Edward Smith - @date May 4, 2018 - @copyright Copyright © 2018 Branch. All rights reserved. -*/ - -#import "BNCApplication+BNCTest.h" diff --git a/Branch-TestBed/Branch-SDK-Tests/BNCApplication.Test.m b/Branch-TestBed/Branch-SDK-Tests/BNCApplicationTests.m similarity index 87% rename from Branch-TestBed/Branch-SDK-Tests/BNCApplication.Test.m rename to Branch-TestBed/Branch-SDK-Tests/BNCApplicationTests.m index e32c1c359..eb48b00e6 100644 --- a/Branch-TestBed/Branch-SDK-Tests/BNCApplication.Test.m +++ b/Branch-TestBed/Branch-SDK-Tests/BNCApplicationTests.m @@ -6,14 +6,22 @@ // Copyright © 2018 Branch, Inc. All rights reserved. // -#import "BNCTestCase.h" +#import #import "BNCApplication.h" #import "BNCKeyChain.h" -@interface BNCApplicationTest : BNCTestCase +@interface BNCApplicationTests : XCTestCase @end -@implementation BNCApplicationTest +@implementation BNCApplicationTests + +- (void)setUp { + // Put setup code here. This method is called before the invocation of each test method in the class. +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the class. +} - (void)testApplication { // Test general info: diff --git a/Branch-TestBed/Branch-SDK-Tests/BNCClassSerializationTests.m b/Branch-TestBed/Branch-SDK-Tests/BNCClassSerializationTests.m new file mode 100644 index 000000000..f1af287d9 --- /dev/null +++ b/Branch-TestBed/Branch-SDK-Tests/BNCClassSerializationTests.m @@ -0,0 +1,120 @@ +// +// BNCClassSerializationTests.m +// Branch-SDK-Tests +// +// Created by Ernest Cho on 3/28/24. +// Copyright © 2024 Branch, Inc. All rights reserved. +// + +#import +#import "BranchEvent.h" +#import "BranchOpenRequest.h" +#import "BranchInstallRequest.h" + +@interface BranchEvent() +// private BranchEvent methods used to build a BranchEventRequest +- (NSDictionary *)buildEventDictionary; +@end + +@interface BranchOpenRequest() +- (NSString *)getActionName; +@end + +@interface BNCClassSerializationTests : XCTestCase + +@end + +// Test serialization of replayable requests +@implementation BNCClassSerializationTests + +- (void)setUp { + // Put setup code here. This method is called before the invocation of each test method in the class. +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the class. +} + +// BranchEventRequest is creation is tightly coupled with the BranchEvent class +// In order to test building it, we need to expose some private methods. :( +- (BranchEventRequest *)buildBranchEventRequest { + BranchEvent *event = [BranchEvent standardEvent:BranchStandardEventPurchase]; + NSURL *url = [NSURL URLWithString:@"https://api3.branch.io/v2/event/standard"]; + NSDictionary *eventDictionary = [event buildEventDictionary]; + + BranchEventRequest *request = [[BranchEventRequest alloc] initWithServerURL:url eventDictionary:eventDictionary completion:nil]; + return request; +} + +- (void)testBranchEventRequestArchive { + BranchEventRequest *request = [self buildBranchEventRequest]; + + // archive the event + NSError *error = nil; + NSData *data = [NSKeyedArchiver archivedDataWithRootObject:request requiringSecureCoding:YES error:&error]; + XCTAssertNil(error); + XCTAssertNotNil(data); + + // unarchive the event + id object = [NSKeyedUnarchiver unarchivedObjectOfClasses:[NSSet setWithArray:@[BranchEventRequest.class]] fromData:data error:&error]; + XCTAssertNil(error); + XCTAssertNotNil(object); + + // check object + XCTAssertTrue([object isKindOfClass:BranchEventRequest.class]); + BranchEventRequest *unarchivedRequest = (BranchEventRequest *)object; + + XCTAssertTrue([request.serverURL.absoluteString isEqualToString:unarchivedRequest.serverURL.absoluteString]); + XCTAssertTrue(request.eventDictionary.count == unarchivedRequest.eventDictionary.count); + XCTAssertNil(unarchivedRequest.completion); +} + +- (void)testBranchOpenRequestArchive { + BranchOpenRequest *request = [[BranchOpenRequest alloc] initWithCallback:nil]; + request.urlString = @"https://branch.io"; + + // archive the event + NSError *error = nil; + NSData *data = [NSKeyedArchiver archivedDataWithRootObject:request requiringSecureCoding:YES error:&error]; + XCTAssertNil(error); + XCTAssertNotNil(data); + + // unarchive the event + id object = [NSKeyedUnarchiver unarchivedObjectOfClasses:[NSSet setWithArray:@[BranchOpenRequest.class]] fromData:data error:&error]; + XCTAssertNil(error); + XCTAssertNotNil(object); + + // check object + XCTAssertTrue([object isKindOfClass:BranchOpenRequest.class]); + BranchOpenRequest *unarchivedRequest = (BranchOpenRequest *)object; + + XCTAssertTrue([request.urlString isEqualToString:unarchivedRequest.urlString]); + XCTAssertNil(unarchivedRequest.callback); + XCTAssertTrue([@"open" isEqualToString:[unarchivedRequest getActionName]]); +} + +- (void)testBranchInstallRequestArchive { + BranchInstallRequest *request = [[BranchInstallRequest alloc] initWithCallback:nil]; + request.urlString = @"https://branch.io"; + + // archive the event + NSError *error = nil; + NSData *data = [NSKeyedArchiver archivedDataWithRootObject:request requiringSecureCoding:YES error:&error]; + XCTAssertNil(error); + XCTAssertNotNil(data); + + // unarchive the event + id object = [NSKeyedUnarchiver unarchivedObjectOfClasses:[NSSet setWithArray:@[BranchInstallRequest.class]] fromData:data error:&error]; + XCTAssertNil(error); + XCTAssertNotNil(object); + + // check object + XCTAssertTrue([object isKindOfClass:BranchInstallRequest.class]); + BranchInstallRequest *unarchivedRequest = (BranchInstallRequest *)object; + + XCTAssertTrue([request.urlString isEqualToString:unarchivedRequest.urlString]); + XCTAssertNil(unarchivedRequest.callback); + XCTAssertTrue([@"install" isEqualToString:[unarchivedRequest getActionName]]); +} + +@end diff --git a/Branch-TestBed/Branch-SDK-Tests/BNCCrashlyticsWrapper.Test.m b/Branch-TestBed/Branch-SDK-Tests/BNCCrashlyticsWrapperTests.m similarity index 76% rename from Branch-TestBed/Branch-SDK-Tests/BNCCrashlyticsWrapper.Test.m rename to Branch-TestBed/Branch-SDK-Tests/BNCCrashlyticsWrapperTests.m index d6d8fc3d7..4b9be75a4 100644 --- a/Branch-TestBed/Branch-SDK-Tests/BNCCrashlyticsWrapper.Test.m +++ b/Branch-TestBed/Branch-SDK-Tests/BNCCrashlyticsWrapperTests.m @@ -6,8 +6,8 @@ // Copyright © 2017 Branch Metrics. All rights reserved. // +#import #import "BNCCrashlyticsWrapper.h" -#import "BNCTestCase.h" #pragma mark Crashlytics SDK Stand-In @@ -42,13 +42,20 @@ -(id)getCustomValueForKey:(NSString *)key { #pragma mark - BNCCrashlyticsWrapperTest -@interface BNCCrashlyticsWrapperTest : BNCTestCase +@interface BNCCrashlyticsWrapperTests : XCTestCase @end -@implementation BNCCrashlyticsWrapperTest +@implementation BNCCrashlyticsWrapperTests -- (void) testSetValue { +- (void)setUp { + // Put setup code here. This method is called before the invocation of each test method in the class. +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the class. +} +- (void)testSetValue { BNCCrashlyticsWrapper *wrapper = [BNCCrashlyticsWrapper wrapper]; NSString *value = @"TestString"; NSString *key = @"TestKey"; diff --git a/Branch-TestBed/Branch-SDK-Tests/BNCEncodingUtils.Test.m b/Branch-TestBed/Branch-SDK-Tests/BNCEncodingUtilsTests.m similarity index 98% rename from Branch-TestBed/Branch-SDK-Tests/BNCEncodingUtils.Test.m rename to Branch-TestBed/Branch-SDK-Tests/BNCEncodingUtilsTests.m index f851e8573..0b18fe51a 100644 --- a/Branch-TestBed/Branch-SDK-Tests/BNCEncodingUtils.Test.m +++ b/Branch-TestBed/Branch-SDK-Tests/BNCEncodingUtilsTests.m @@ -8,13 +8,20 @@ #import #import "BNCEncodingUtils.h" -#import "BNCTestCase.h" -@interface BNCEncodingUtilsTests : BNCTestCase +@interface BNCEncodingUtilsTests : XCTestCase @end @implementation BNCEncodingUtilsTests +- (void)setUp { + // Put setup code here. This method is called before the invocation of each test method in the class. +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the class. +} + #pragma mark - EncodeDictionaryToJsonString tests - (void)testEncodeDictionaryToJsonStringWithExpectedParams { @@ -284,8 +291,8 @@ - (void)testDecodeQueryStringToDictionary { #pragma mark - Test Util methods - (NSString *)stringForDate:(NSDate *)date { - static NSDateFormatter *dateFormatter; - static dispatch_once_t onceToken; + static NSDateFormatter *dateFormatter = nil; + static dispatch_once_t onceToken = 0; dispatch_once(&onceToken, ^{ dateFormatter = [[NSDateFormatter alloc] init]; diff --git a/Branch-TestBed/Branch-SDK-Tests/BNCLinkDataTests.m b/Branch-TestBed/Branch-SDK-Tests/BNCLinkDataTests.m index 9f1096811..10eb3cb25 100644 --- a/Branch-TestBed/Branch-SDK-Tests/BNCLinkDataTests.m +++ b/Branch-TestBed/Branch-SDK-Tests/BNCLinkDataTests.m @@ -6,14 +6,22 @@ // Copyright (c) 2015 Branch Metrics. All rights reserved. // -#import "BNCTestCase.h" +#import #import "BNCLinkData.h" -@interface BNCLinkDataTests : BNCTestCase +@interface BNCLinkDataTests : XCTestCase @end @implementation BNCLinkDataTests +- (void)setUp { + // Put setup code here. This method is called before the invocation of each test method in the class. +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the class. +} + - (void)testBasicObjectHash { BNCLinkData *a = [[BNCLinkData alloc] init]; BNCLinkData *b = [[BNCLinkData alloc] init]; diff --git a/Branch-TestBed/Branch-SDK-Tests/BNCLog.Test.m b/Branch-TestBed/Branch-SDK-Tests/BNCLog.Test.m deleted file mode 100644 index c7349bf31..000000000 --- a/Branch-TestBed/Branch-SDK-Tests/BNCLog.Test.m +++ /dev/null @@ -1,36 +0,0 @@ -/** - @file BNCLog.Test.m - @package BranchTests - @brief Tests for BNCLog. - - @author Edward Smith - @date October 2016 - @copyright Copyright © 2016 Branch. All rights reserved. -*/ - -#import -#import "BNCLog.h" -#import "BNCTestCase.h" - -@interface BNCLogTest : BNCTestCase -@end - -@implementation BNCLogTest - -- (void) testLogLevelString { - XCTAssertEqual(BNCLogLevelAll, BNCLogLevelFromString(@"BNCLogLevelAll")); - XCTAssertEqual(BNCLogLevelDebugSDK, BNCLogLevelFromString(@"BNCLogLevelDebugSDK")); - XCTAssertEqual(BNCLogLevelWarning, BNCLogLevelFromString(@"BNCLogLevelWarning")); - XCTAssertEqual(BNCLogLevelNone, BNCLogLevelFromString(@"BNCLogLevelNone")); - XCTAssertEqual(BNCLogLevelMax, BNCLogLevelFromString(@"BNCLogLevelMax")); -} - -- (void) testLogLevelEnum { - XCTAssertEqualObjects(@"BNCLogLevelAll", BNCLogStringFromLogLevel(BNCLogLevelAll)); - XCTAssertEqualObjects(@"BNCLogLevelAll", BNCLogStringFromLogLevel(BNCLogLevelDebugSDK)); - XCTAssertEqualObjects(@"BNCLogLevelWarning", BNCLogStringFromLogLevel(BNCLogLevelWarning)); - XCTAssertEqualObjects(@"BNCLogLevelNone", BNCLogStringFromLogLevel(BNCLogLevelNone)); - XCTAssertEqualObjects(@"BNCLogLevelMax", BNCLogStringFromLogLevel(BNCLogLevelMax)); -} - -@end diff --git a/Branch-TestBed/Branch-SDK-Tests/BNCPreferenceHelperTests.m b/Branch-TestBed/Branch-SDK-Tests/BNCPreferenceHelperTests.m index e1a12126e..5269501b3 100644 --- a/Branch-TestBed/Branch-SDK-Tests/BNCPreferenceHelperTests.m +++ b/Branch-TestBed/Branch-SDK-Tests/BNCPreferenceHelperTests.m @@ -10,7 +10,6 @@ #import "BNCPreferenceHelper.h" #import "BNCEncodingUtils.h" #import "Branch.h" -#import "BranchPluginSupport.h" #import "BNCConfig.h" @interface BNCPreferenceHelper() @@ -32,7 +31,7 @@ - (void)setUp { } - (void)tearDown { - + } - (void)testPreferenceDefaults { @@ -52,8 +51,7 @@ - (void)testPreferenceSets { XCTAssertEqual(self.prefHelper.timeout, NSIntegerMax); } -/* - // This test is not reliable when run concurrently with other tests that set the patterListURL +// This test is not reliable when run concurrently with other tests that set the patterListURL - (void)testURLFilter { XCTAssertTrue([@"https://cdn.branch.io" isEqualToString:self.prefHelper.patternListURL]); @@ -61,7 +59,6 @@ - (void)testURLFilter { self.prefHelper.patternListURL = customURL; XCTAssertTrue([customURL isEqualToString:self.prefHelper.patternListURL]); } - */ - (void)testSerializeDict_Nil { NSMutableDictionary *dict = nil; @@ -202,62 +199,219 @@ - (void)testURLSkipList { XCTAssert([filterDesc isEqualToString:valueDesc]); } -/* -- (void)testSetAPIURL_Example { +- (void)testSetCDNBaseURL_Example { NSString *url = @"https://www.example.com/"; - [BranchPluginSupport setAPIUrl:url] ; + [self.prefHelper setPatternListURL:url]; - NSString *urlStored = [BNCPreferenceHelper sharedInstance].branchAPIURL ; + NSString *urlStored = self.prefHelper.patternListURL ; XCTAssert([url isEqualToString:urlStored]); } -- (void)testSetAPIURL_InvalidHttp { +- (void)testSetCDNBaseURL_InvalidHttp { NSString *url = @"Invalid://www.example.com/"; - [BranchPluginSupport setAPIUrl:url] ; + [self.prefHelper setPatternListURL:url] ; - NSString *urlStored = [BNCPreferenceHelper sharedInstance].branchAPIURL ; + NSString *urlStored = self.prefHelper.patternListURL ; XCTAssert(![url isEqualToString:urlStored]); - XCTAssert([urlStored isEqualToString:BNC_API_BASE_URL]); + XCTAssert([urlStored isEqualToString:BNC_CDN_URL]); } -- (void)testSetAPIURL_InvalidEmpty { +- (void)testSetCDNBaseURL_InvalidEmpty { - [BranchPluginSupport setAPIUrl:@""] ; + [self.prefHelper setPatternListURL:@""] ; - NSString *urlStored = [BNCPreferenceHelper sharedInstance].branchAPIURL ; + NSString *urlStored = self.prefHelper.patternListURL ; XCTAssert(![urlStored isEqualToString:@""]); - XCTAssert([urlStored isEqualToString:BNC_API_BASE_URL]); + XCTAssert([urlStored isEqualToString:BNC_CDN_URL]); } -- (void)testSetCDNBaseURL_Example { +- (void)testSetPatternListURL { + NSString *expectedURL = @"https://example.com"; + [self.prefHelper setPatternListURL:expectedURL]; - NSString *url = @"https://www.example.com/"; - [BranchPluginSupport setCDNBaseUrl:url] ; + NSString *patternListURL = self.prefHelper.patternListURL; + XCTAssert([patternListURL isEqualToString: expectedURL]); +} + +- (void)testSetLastStrongMatchDate { + NSDate *expectedDate = [NSDate date]; + [self.prefHelper setLastStrongMatchDate: expectedDate]; - NSString *urlStored = [BNCPreferenceHelper sharedInstance].patternListURL ; - XCTAssert([url isEqualToString:urlStored]); + NSDate *actualDate = [self.prefHelper lastStrongMatchDate]; + XCTAssertEqualObjects(expectedDate, actualDate); } -- (void)testSetCDNBaseURL_InvalidHttp { +- (void)testSetAppVersion { + NSString *expectedVersion = @"1.0.0"; + [self.prefHelper setAppVersion: expectedVersion]; - NSString *url = @"Invalid://www.example.com/"; - [BranchPluginSupport setCDNBaseUrl:url] ; + NSString *actualVersion = [self.prefHelper appVersion]; + XCTAssertEqualObjects(expectedVersion, actualVersion); +} + +- (void)testSetLocalUrl { + NSString *expectedLocalURL = @"https://local.example.com"; + [self.prefHelper setLocalUrl:expectedLocalURL]; - NSString *urlStored = [BNCPreferenceHelper sharedInstance].patternListURL ; - XCTAssert(![url isEqualToString:urlStored]); - XCTAssert([urlStored isEqualToString:BNC_CDN_URL]); + NSString *localURL = [self.prefHelper localUrl]; + XCTAssertEqualObjects(localURL, expectedLocalURL); } -- (void)testSetCDNBaseURL_InvalidEmpty { +- (void)testSetInitialReferrer { + NSString *expectedReferrer = @"referrer.example.com"; + [self.prefHelper setInitialReferrer:expectedReferrer]; - [BranchPluginSupport setCDNBaseUrl:@""] ; + NSString *actualReferrer = [self.prefHelper initialReferrer]; + XCTAssertEqualObjects(actualReferrer, expectedReferrer); +} + +- (void)testSetAppleAttributionTokenChecked { + BOOL expectedValue = YES; + [self.prefHelper setAppleAttributionTokenChecked:expectedValue]; - NSString *urlStored = [BNCPreferenceHelper sharedInstance].patternListURL ; - XCTAssert(![urlStored isEqualToString:@""]); - XCTAssert([urlStored isEqualToString:BNC_CDN_URL]); + BOOL actualValue = [self.prefHelper appleAttributionTokenChecked]; + XCTAssertEqual(expectedValue, actualValue); +} + +- (void)testSetHasOptedInBefore { + BOOL expectedValue = YES; + [self.prefHelper setHasOptedInBefore:expectedValue]; + + BOOL actualValue = [self.prefHelper hasOptedInBefore]; + XCTAssertEqual(expectedValue, actualValue); +} + +- (void)testSetHasCalledHandleATTAuthorizationStatus { + BOOL expectedValue = YES; + [self.prefHelper setHasCalledHandleATTAuthorizationStatus:expectedValue]; + + BOOL actualValue = [self.prefHelper hasCalledHandleATTAuthorizationStatus]; + XCTAssertEqual(expectedValue, actualValue); +} + +- (void)testSetRequestMetadataKeyValidKeyValue { + NSString *key = @"testKey"; + NSString *value = @"testValue"; + + [self.prefHelper setRequestMetadataKey:key value:value]; + + NSObject *retrievedValue = [self.prefHelper.requestMetadataDictionary objectForKey:key]; + XCTAssertEqualObjects(retrievedValue, value); +} + +- (void)testSetRequestMetadataKeyValidKeyNilValue { + NSString *key = @"testKey"; + NSString *value = @"testValue"; + + [self.prefHelper.requestMetadataDictionary setObject:value forKey:key]; + + [self.prefHelper setRequestMetadataKey:key value:nil]; + + NSObject *retrievedValue = [self.prefHelper.requestMetadataDictionary objectForKey:key]; + XCTAssertNil(retrievedValue); +} + +- (void)testSetRequestMetadataKeyValidKeyNilValueKeyNotExists { + NSString *key = @"testKeyNotExists"; + + NSUInteger initialDictCount = [self.prefHelper.requestMetadataDictionary count]; + + [self.prefHelper setRequestMetadataKey:key value:nil]; + + NSUInteger postActionDictCount = [self.prefHelper.requestMetadataDictionary count]; + XCTAssertEqual(initialDictCount, postActionDictCount); +} + +- (void)testSetRequestMetadataKeyNilKey { + NSString *value = @"testValue"; + NSUInteger initialDictCount = [self.prefHelper.requestMetadataDictionary count]; + + [self.prefHelper setRequestMetadataKey:nil value:value]; + + NSUInteger postActionDictCount = [self.prefHelper.requestMetadataDictionary count]; + XCTAssertEqual(initialDictCount, postActionDictCount); +} + +- (void)testSetLimitFacebookTracking { + BOOL expectedValue = YES; + + [self.prefHelper setLimitFacebookTracking:expectedValue]; + + BOOL storedValue = [self.prefHelper limitFacebookTracking]; + + XCTAssertEqual(expectedValue, storedValue); +} + +- (void)testSetTrackingDisabled_YES { + [self.prefHelper setTrackingDisabled:YES]; + + BOOL storedValue = [self.prefHelper trackingDisabled]; + XCTAssertTrue(storedValue); + [self.prefHelper setTrackingDisabled:NO]; +} + +- (void)testSetTrackingDisabled_NO { + [self.prefHelper setTrackingDisabled:NO]; + + BOOL storedValue = [self.prefHelper trackingDisabled]; + XCTAssertFalse(storedValue); +} + +// TODO: rethink this test as these values are not set in a freshly instantiated prefHelper +- (void)testClearTrackingInformation { + [self.prefHelper clearTrackingInformation]; + + XCTAssertNil(self.prefHelper.sessionID); + XCTAssertNil(self.prefHelper.linkClickIdentifier); + XCTAssertNil(self.prefHelper.spotlightIdentifier); + XCTAssertNil(self.prefHelper.referringURL); + XCTAssertNil(self.prefHelper.universalLinkUrl); + XCTAssertNil(self.prefHelper.initialReferrer); + XCTAssertNil(self.prefHelper.installParams); + XCTAssertNil(self.prefHelper.sessionParams); + XCTAssertNil(self.prefHelper.externalIntentURI); + XCTAssertNil(self.prefHelper.savedAnalyticsData); + XCTAssertNil(self.prefHelper.previousAppBuildDate); + XCTAssertEqual(self.prefHelper.requestMetadataDictionary.count, 0); + XCTAssertNil(self.prefHelper.lastStrongMatchDate); + XCTAssertNil(self.prefHelper.userIdentity); + XCTAssertNil(self.prefHelper.referringURLQueryParameters); + XCTAssertNil(self.prefHelper.anonID); +} + +- (void)testSaveBranchAnalyticsData { + NSString *dummySessionID = @"testSession123"; + NSDictionary *dummyAnalyticsData = @{ @"key1": @"value1", @"key2": @"value2" }; + + self.prefHelper.sessionID = dummySessionID; + + [self.prefHelper saveBranchAnalyticsData:dummyAnalyticsData]; + + NSMutableDictionary *retrievedData = [self.prefHelper getBranchAnalyticsData]; + + NSArray *viewDataArray = [retrievedData objectForKey:dummySessionID]; + XCTAssertNotNil(viewDataArray); + XCTAssertEqual(viewDataArray.count, 1); + XCTAssertEqualObjects(viewDataArray.firstObject, dummyAnalyticsData); +} + +- (void)testClearBranchAnalyticsData { + [self.prefHelper clearBranchAnalyticsData]; + + NSMutableDictionary *retrievedData = [self.prefHelper getBranchAnalyticsData]; + XCTAssertEqual(retrievedData.count, 0); +} + +- (void)testSaveContentAnalyticsManifest { + NSDictionary *dummyManifest = @{ @"manifestKey1": @"manifestValue1", @"manifestKey2": @"manifestValue2" }; + + [self.prefHelper saveContentAnalyticsManifest:dummyManifest]; + + NSDictionary *retrievedManifest = [self.prefHelper getContentAnalyticsManifest]; + + XCTAssertEqualObjects(retrievedManifest, dummyManifest); } - */ @end diff --git a/Branch-TestBed/Branch-SDK-Tests/BNCRequestFactoryTests.m b/Branch-TestBed/Branch-SDK-Tests/BNCRequestFactoryTests.m index c7eb51a09..c18505774 100644 --- a/Branch-TestBed/Branch-SDK-Tests/BNCRequestFactoryTests.m +++ b/Branch-TestBed/Branch-SDK-Tests/BNCRequestFactoryTests.m @@ -25,7 +25,7 @@ - (void)tearDown { - (void)testInitWithBranchKeyNil { BNCRequestFactory *factory = [[BNCRequestFactory alloc] initWithBranchKey:nil]; - NSDictionary *json = [factory dataForInstall]; + NSDictionary *json = [factory dataForInstallWithURLString:@"https://branch.io"]; XCTAssertNotNil(json); // key is omitted when nil @@ -34,7 +34,7 @@ - (void)testInitWithBranchKeyNil { - (void)testInitWithBranchKeyEmpty { BNCRequestFactory *factory = [[BNCRequestFactory alloc] initWithBranchKey:@""]; - NSDictionary *json = [factory dataForInstall]; + NSDictionary *json = [factory dataForInstallWithURLString:@"https://branch.io"]; XCTAssertNotNil(json); // empty string is allowed @@ -43,14 +43,14 @@ - (void)testInitWithBranchKeyEmpty { - (void)testInitWithBranchKey { BNCRequestFactory *factory = [[BNCRequestFactory alloc] initWithBranchKey:@"key_abcd"]; - NSDictionary *json = [factory dataForInstall]; + NSDictionary *json = [factory dataForInstallWithURLString:@"https://branch.io"]; XCTAssertNotNil(json); XCTAssertTrue([@"key_abcd" isEqualToString:[json objectForKey:@"branch_key"]]); } - (void)testDataForInstall { BNCRequestFactory *factory = [[BNCRequestFactory alloc] initWithBranchKey:@"key_abcd"]; - NSDictionary *json = [factory dataForInstall]; + NSDictionary *json = [factory dataForInstallWithURLString:@"https://branch.io"]; XCTAssertNotNil(json); XCTAssertTrue([@"key_abcd" isEqualToString:[json objectForKey:@"branch_key"]]); @@ -64,7 +64,7 @@ - (void)testDataForInstall { - (void)testDataForOpen { BNCRequestFactory *factory = [[BNCRequestFactory alloc] initWithBranchKey:@"key_abcd"]; - NSDictionary *json = [factory dataForOpen]; + NSDictionary *json = [factory dataForOpenWithURLString:@"https://branch.io"]; XCTAssertNotNil(json); XCTAssertTrue([@"key_abcd" isEqualToString:[json objectForKey:@"branch_key"]]); @@ -182,13 +182,13 @@ - (void)testDataForEventNil { - (void)testDataForShortURL { BNCRequestFactory *factory = [[BNCRequestFactory alloc] initWithBranchKey:@"key_abcd"]; - NSDictionary *json = [factory dataForInstall]; + NSDictionary *json = [factory dataForShortURLWithLinkDataDictionary:@{}.mutableCopy isSpotlightRequest:NO]; XCTAssertNotNil(json); } - (void)testDataForLATD { BNCRequestFactory *factory = [[BNCRequestFactory alloc] initWithBranchKey:@"key_abcd"]; - NSDictionary *json = [factory dataForInstall]; + NSDictionary *json = [factory dataForLATDWithDataDictionary:@{}.mutableCopy]; XCTAssertNotNil(json); } diff --git a/Branch-TestBed/Branch-SDK-Tests/BNCServerInterface.Test.m b/Branch-TestBed/Branch-SDK-Tests/BNCServerInterface.Test.m deleted file mode 100644 index c2b220f93..000000000 --- a/Branch-TestBed/Branch-SDK-Tests/BNCServerInterface.Test.m +++ /dev/null @@ -1,380 +0,0 @@ -// -// BNCServerInterface.Test.m -// Branch -// -// Created by Graham Mueller on 3/31/15. -// Copyright (c) 2015 Branch Metrics. All rights reserved. -// - -#import -#import "BNCTestCase.h" -#import "BNCServerInterface.h" -#import "BNCPreferenceHelper.h" -#import "BranchConstants.h" -#import -#import -#import - -typedef void (^UrlConnectionCallback)(NSURLResponse *, NSData *, NSError *); - -@interface BNCServerInterface() - -// private BNCServerInterface method/properties to prepare dictionary for requests -@property (copy, nonatomic) NSString *requestEndpoint; -- (NSMutableDictionary *)prepareParamDict:(NSDictionary *)params - key:(NSString *)key - retryNumber:(NSInteger)retryNumber - requestType:(NSString *)reqType; -@end - - - -@interface BNCServerInterfaceTests : BNCTestCase -@end - -@implementation BNCServerInterfaceTests - -#pragma mark - Tear Down - -- (void)tearDown { - [HTTPStubs removeAllStubs]; - [super tearDown]; -} - - -#pragma mark - Key tests - -//================================================================================== -// TEST 01 -// This test checks to see that the branch key has been added to the GET request - -- (void)testParamAddForBranchKey { - [HTTPStubs removeAllStubs]; - BNCServerInterface *serverInterface = [[BNCServerInterface alloc] init]; - XCTestExpectation* expectation = - [self expectationWithDescription:@"NSURLSessionDataTask completed"]; - - __block int callCount = 0; - [HTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { - // We're not sending a request, just verifying a "branch_key=key_xxx" is present. - callCount++; - NSLog(@"\n\nCall count %d.\nRequest: %@\n", callCount, request); - if (callCount == 1) { - BOOL foundIt = ([request.URL.query rangeOfString:@"branch_key=key_"].location != NSNotFound); - XCTAssertTrue(foundIt, @"Branch Key not added"); - BNCAfterSecondsPerformBlockOnMainThread(0.01, ^{ [expectation fulfill]; }); - return YES; - } - return NO; - } - withStubResponse:^HTTPStubsResponse *(NSURLRequest *request) { - NSDictionary* dummyJSONResponse = @{@"key": @"value"}; - return [HTTPStubsResponse responseWithJSONObject:dummyJSONResponse statusCode:200 headers:nil]; - } - ]; - - [serverInterface getRequest:nil url:@"http://foo" key:@"key_live_foo" callback:NULL]; - [self waitForExpectationsWithTimeout:5.0 handler:nil]; - [HTTPStubs removeAllStubs]; -} - -#pragma mark - Retry tests - -//================================================================================== -// TEST 03 -// This test simulates a poor network, with three failed GET attempts and one final success, -// for 4 connections. - -- (void)testGetRequestAsyncRetriesWhenAppropriate { - [HTTPStubs removeAllStubs]; - - //Set up nsurlsession and data task, catching response - BNCServerInterface *serverInterface = [[BNCServerInterface alloc] init]; - serverInterface.preferenceHelper = [[BNCPreferenceHelper alloc] init]; - serverInterface.preferenceHelper.retryCount = 3; - - XCTestExpectation* successExpectation = [self expectationWithDescription:@"success"]; - - __block NSInteger connectionAttempts = 0; - __block NSInteger failedConnections = 0; - __block NSInteger successfulConnections = 0; - - [HTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { - BOOL foundBranchKey = [request.URL.query rangeOfString:@"branch_key=key_"].location != NSNotFound; - XCTAssertEqual(foundBranchKey, TRUE); - return foundBranchKey; - - } withStubResponse:^HTTPStubsResponse*(NSURLRequest *request) { - @synchronized (self) { - connectionAttempts++; - NSLog(@"Attempt # %lu", (unsigned long)connectionAttempts); - if (connectionAttempts < 3) { - - // Return an error the first three times - NSDictionary* dummyJSONResponse = @{@"bad": @"data"}; - - ++failedConnections; - return [HTTPStubsResponse responseWithJSONObject:dummyJSONResponse statusCode:504 headers:nil]; - - } else if (connectionAttempts == 3) { - - // Return actual data afterwards - ++successfulConnections; - XCTAssertEqual(connectionAttempts, failedConnections + successfulConnections); - BNCAfterSecondsPerformBlockOnMainThread(0.01, ^{ - NSLog(@"==> Fullfill."); - [successExpectation fulfill]; - }); - - NSDictionary* dummyJSONResponse = @{@"key": @"value"}; - return [HTTPStubsResponse responseWithJSONObject:dummyJSONResponse statusCode:200 headers:nil]; - - } else { - - XCTFail(@"Too many connection attempts: %ld.", (long) connectionAttempts); - return [HTTPStubsResponse responseWithJSONObject:[NSDictionary new] statusCode:200 headers:nil]; - - } - } - }]; - - [serverInterface getRequest:nil url:@"http://foo" key:@"key_live_foo" callback:NULL]; - [self waitForExpectationsWithTimeout:10.0 handler:nil]; -} - -//================================================================================== -// TEST 04 -// This test checks to make sure that GET retries are not attempted when they have a retry -// count > 0, but retries aren't needed. Based on Test #3 above. - -- (void)testGetRequestAsyncRetriesWhenInappropriateResponse { - [HTTPStubs removeAllStubs]; - - BNCServerInterface *serverInterface = [[BNCServerInterface alloc] init]; - serverInterface.preferenceHelper = [[BNCPreferenceHelper alloc] init]; - serverInterface.preferenceHelper.retryCount = 3; - - XCTestExpectation* successExpectation = [self expectationWithDescription:@"success"]; - - __block NSUInteger connectionAttempts = 0; - - [HTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { - BOOL foundBranchKey = [request.URL.query rangeOfString:@"branch_key=key_"].location != NSNotFound; - XCTAssertEqual(foundBranchKey, TRUE); - return foundBranchKey; - - } withStubResponse:^HTTPStubsResponse*(NSURLRequest *request) { - @synchronized (self) { - // Return actual data on first attempt - NSDictionary* dummyJSONResponse = @{@"key": @"value"}; - connectionAttempts++; - XCTAssertEqual(connectionAttempts, 1); - BNCAfterSecondsPerformBlockOnMainThread(0.01, ^ { - [successExpectation fulfill]; - }); - return [HTTPStubsResponse responseWithJSONObject:dummyJSONResponse statusCode:200 headers:nil]; - } - }]; - - [serverInterface getRequest:nil url:@"http://foo" key:@"key_live_foo" callback:NULL]; - [self waitForExpectationsWithTimeout:2.0 handler:nil]; -} - -//================================================================================== -// TEST 05 -// This test checks to make sure that GET retries are not attempted when they have a retry -// count == 0, but retries aren't needed. Based on Test #4 above - -- (void)testGetRequestAsyncRetriesWhenInappropriateRetryCount { - [HTTPStubs removeAllStubs]; - - BNCServerInterface *serverInterface = [[BNCServerInterface alloc] init]; - serverInterface.preferenceHelper = [[BNCPreferenceHelper alloc] init]; - serverInterface.preferenceHelper.retryCount = 0; - - XCTestExpectation* successExpectation = [self expectationWithDescription:@"success"]; - - __block NSUInteger connectionAttempts = 0; - - [HTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { - BOOL foundBranchKey = [request.URL.query rangeOfString:@"branch_key=key_"].location != NSNotFound; - XCTAssertEqual(foundBranchKey, TRUE); - return foundBranchKey; - - } withStubResponse:^HTTPStubsResponse*(NSURLRequest *request) { - @synchronized (self) { - // Return actual data on first attempt - NSDictionary* dummyJSONResponse = @{@"key": @"value"}; - connectionAttempts++; - XCTAssertEqual(connectionAttempts, 1); - BNCAfterSecondsPerformBlockOnMainThread(0.01, ^{ - [successExpectation fulfill]; - }); - return [HTTPStubsResponse responseWithJSONObject:dummyJSONResponse statusCode:200 headers:nil]; - } - }]; - - [serverInterface getRequest:nil url:@"http://foo" key:@"key_live_foo" callback:NULL]; - [self waitForExpectationsWithTimeout:2.0 handler:nil]; -} - -//================================================================================== -// TEST 06 -// This test simulates a poor network, with three failed GET attempts and one final success, -// for 4 connections. Based on Test #3 above - -- (void)testPostRequestAsyncRetriesWhenAppropriate { - [HTTPStubs removeAllStubs]; - - //Set up nsurlsession and data task, catching response - BNCServerInterface *serverInterface = [[BNCServerInterface alloc] init]; - serverInterface.preferenceHelper = [[BNCPreferenceHelper alloc] init]; - serverInterface.preferenceHelper.retryCount = 3; - [serverInterface.preferenceHelper synchronize]; - - XCTestExpectation* successExpectation = [self expectationWithDescription:@"success"]; - - __block NSUInteger connectionAttempts = 0; - __block NSUInteger failedConnections = 0; - __block NSUInteger successfulConnections = 0; - - [HTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { - BOOL foundBranchKey = [request.URL.query rangeOfString:@"branch_key=key_"].location != NSNotFound; - XCTAssertEqual(foundBranchKey, TRUE); - return foundBranchKey; - - } withStubResponse:^HTTPStubsResponse*(NSURLRequest *request) { - connectionAttempts++; - NSLog(@"attempt # %lu", (unsigned long)connectionAttempts); - if (connectionAttempts < 3) { - // Return an error the first three times - NSDictionary* dummyJSONResponse = @{@"bad": @"data"}; - - ++failedConnections; - return [HTTPStubsResponse responseWithJSONObject:dummyJSONResponse statusCode:504 headers:nil]; - - } else if (connectionAttempts == 3) { - - // Return actual data afterwards - ++successfulConnections; - NSDictionary* dummyJSONResponse = @{@"key": @"value"}; - XCTAssertEqual(connectionAttempts, failedConnections + successfulConnections); - BNCAfterSecondsPerformBlockOnMainThread(0.01, ^ { - NSLog(@"==>> Fullfill <<=="); - [successExpectation fulfill]; - }); - return [HTTPStubsResponse responseWithJSONObject:dummyJSONResponse statusCode:200 headers:nil]; - - } else { - - XCTFail(@"Too many connection attempts: %ld.", (long) connectionAttempts); - return [HTTPStubsResponse responseWithJSONObject:[NSDictionary new] statusCode:200 headers:nil]; - - } - }]; - - [serverInterface postRequest:nil url:@"http://foo" key:@"key_live_foo" callback:NULL]; - [self waitForExpectationsWithTimeout:5.0 handler:nil]; -} - -//================================================================================== -// TEST 07 -// This test checks to make sure that POST retries are not attempted when they have a retry -// count == 0, and retries aren't needed. Based on Test #4 above - -- (void)testPostRequestAsyncRetriesWhenInappropriateResponse { - [HTTPStubs removeAllStubs]; - - BNCServerInterface *serverInterface = [[BNCServerInterface alloc] init]; - serverInterface.preferenceHelper = [[BNCPreferenceHelper alloc] init]; - serverInterface.preferenceHelper.retryCount = 3; - - XCTestExpectation* successExpectation = [self expectationWithDescription:@"success"]; - - __block NSUInteger connectionAttempts = 0; - - [HTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { - BOOL foundBranchKey = [request.URL.query rangeOfString:@"branch_key=key_"].location != NSNotFound; - XCTAssertEqual(foundBranchKey, TRUE); - return foundBranchKey; - - } withStubResponse:^HTTPStubsResponse*(NSURLRequest *request) { - // Return actual data on first attempt - NSDictionary* dummyJSONResponse = @{@"key": @"value"}; - connectionAttempts++; - XCTAssertEqual(connectionAttempts, 1); - BNCAfterSecondsPerformBlockOnMainThread(0.01, ^{ [successExpectation fulfill]; }); - return [HTTPStubsResponse responseWithJSONObject:dummyJSONResponse statusCode:200 headers:nil]; - - }]; - - [serverInterface postRequest:nil url:@"http://foo" key:@"key_live_foo" callback:NULL]; - [self waitForExpectationsWithTimeout:1.0 handler:nil]; - -} - -//================================================================================== -// TEST 08 -// This test checks to make sure that GET retries are not attempted when they have a retry -// count == 0, and retries aren't needed. Based on Test #4 above - -- (void)testPostRequestAsyncRetriesWhenInappropriateRetryCount { - [HTTPStubs removeAllStubs]; - - BNCServerInterface *serverInterface = [[BNCServerInterface alloc] init]; - serverInterface.preferenceHelper = [[BNCPreferenceHelper alloc] init]; - serverInterface.preferenceHelper.retryCount = 0; - - XCTestExpectation* successExpectation = [self expectationWithDescription:@"success"]; - - __block NSUInteger connectionAttempts = 0; - - [HTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { - BOOL foundBranchKey = [request.URL.query rangeOfString:@"branch_key=key_"].location != NSNotFound; - XCTAssertEqual(foundBranchKey, TRUE); - return foundBranchKey; - - } withStubResponse:^HTTPStubsResponse*(NSURLRequest *request) { - // Return actual data on first attempt - NSDictionary* dummyJSONResponse = @{@"key": @"value"}; - connectionAttempts++; - XCTAssertEqual(connectionAttempts, 1); - BNCAfterSecondsPerformBlockOnMainThread(0.01, ^{ [successExpectation fulfill]; }); - return [HTTPStubsResponse responseWithJSONObject:dummyJSONResponse statusCode:200 headers:nil]; - }]; - - [serverInterface getRequest:nil url:@"http://foo" key:@"key_live_foo" callback:NULL]; - [self waitForExpectationsWithTimeout:1.0 handler:nil]; -} - -//================================================================================== -// TEST 10 -// Test mapping of X-Branch-Request-Id to [BNCServerResponse requestId] - -- (void)testRequestIdFromHeader { - [HTTPStubs removeAllStubs]; - - BNCServerInterface *serverInterface = [[BNCServerInterface alloc] init]; - NSString *requestId = @"1325e434fa294d3bb7d461349118602d-2020102721"; - - XCTestExpectation* successExpectation = [self expectationWithDescription:@"success"]; - - [HTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { - // Return the following response for any request - return YES; - } withStubResponse:^HTTPStubsResponse *(NSURLRequest *request) { - // Stub out a response with a X-Branch-Request-Id header - return [HTTPStubsResponse responseWithJSONObject:@{} statusCode:200 headers:@{@"X-Branch-Request-Id": requestId}]; - }]; - - // POST to trigger the stubbed response. - [serverInterface postRequest:@{} url:@"https://api.branch.io/v1/open" key:@"key_live_xxxx" callback:^(BNCServerResponse *response, NSError *error) { - // Verify the request ID value on the BNCServerResponse - BNCAfterSecondsPerformBlockOnMainThread(0.01, ^{ [successExpectation fulfill]; }); - XCTAssertEqualObjects(response.requestId, requestId); - }]; - - [self waitForExpectationsWithTimeout:5.0 handler:nil]; -} - -@end diff --git a/Branch-TestBed/Branch-SDK-Tests/BNCServerRequestQueueOldTests.m b/Branch-TestBed/Branch-SDK-Tests/BNCServerRequestQueueOldTests.m deleted file mode 100644 index 9ca55fd3b..000000000 --- a/Branch-TestBed/Branch-SDK-Tests/BNCServerRequestQueueOldTests.m +++ /dev/null @@ -1,123 +0,0 @@ -// -// BNCServerRequestQueueTests.m -// Branch-TestBed -// -// Created by Graham Mueller on 6/17/15. -// Copyright (c) 2015 Branch Metrics. All rights reserved. -// - -#import "BNCTestCase.h" -#import "BNCServerRequestQueue.h" -#import "BranchOpenRequest.h" -#import -#import "Branch.h" - -@interface BNCServerRequestQueue (BNCTests) -- (void)retrieve; -- (void)cancelTimer; -@end - -@interface BNCServerRequestQueueOldTests : BNCTestCase -@end - -@implementation BNCServerRequestQueueOldTests - -#pragma mark - MoveOpenOrInstallToFront tests - -+ (void) setUp { - [self clearAllBranchSettings]; // Clear any saved data before our tests start. -// Branch*branch = [Branch getInstance:@"key_live_foo"]; -// [self clearAllBranchSettings]; -} - -- (void)testMoveOpenOrInstallToFrontWhenEmpty { - BNCServerRequestQueue *requestQueue = [[BNCServerRequestQueue alloc] init]; - XCTAssertNoThrow([requestQueue moveInstallOrOpenToFront:0]); -} - -- (void)testMoveOpenOrInstallToFrontWhenNotPresent { - BNCServerRequestQueue *requestQueue = [[BNCServerRequestQueue alloc] init]; - [requestQueue insert:[[BNCServerRequest alloc] init] at:0]; - [requestQueue insert:[[BNCServerRequest alloc] init] at:0]; - XCTAssertNoThrow([requestQueue moveInstallOrOpenToFront:0]); -} - -- (void)testMoveOpenOrInstallToFrontWhenAlreadyInFrontAndNoRequestsInProgress { - BNCServerRequestQueue *requestQueue = [[BNCServerRequestQueue alloc] init]; - [requestQueue insert:[[BranchOpenRequest alloc] init] at:0]; - - id requestQueueMock = OCMPartialMock(requestQueue); - [[requestQueueMock reject] removeAt:0]; - - [requestQueue moveInstallOrOpenToFront:0]; -} - -- (void)testMoveOpenOrInstallToFrontWhenAlreadyInFrontWithRequestsInProgress { - BNCServerRequestQueue *requestQueue = [[BNCServerRequestQueue alloc] init]; - [requestQueue insert:[[BranchOpenRequest alloc] init] at:0]; - - id requestQueueMock = OCMPartialMock(requestQueue); - [[requestQueueMock reject] removeAt:0]; - - [requestQueue moveInstallOrOpenToFront:1]; -} - -- (void)testMoveOpenOrInstallToFrontWhenSecondInLineWithRequestsInProgress { - BNCServerRequestQueue *requestQueue = [[BNCServerRequestQueue alloc] init]; - [requestQueue insert:[[BNCServerRequest alloc] init] at:0]; - [requestQueue insert:[[BranchOpenRequest alloc] init] at:1]; - - id requestQueueMock = OCMPartialMock(requestQueue); - [[requestQueueMock reject] removeAt:1]; - - [requestQueue moveInstallOrOpenToFront:1]; -} - -- (void)testMoveOpenOrInstallToFrontWhenSecondInLineWithNoRequestsInProgress { - BNCServerRequestQueue *requestQueue = [[BNCServerRequestQueue alloc] init]; - BranchOpenRequest *openRequest = [[BranchOpenRequest alloc] init]; - [requestQueue insert:[[BNCServerRequest alloc] init] at:0]; - [requestQueue insert:openRequest at:1]; - - id requestQueueMock = OCMPartialMock(requestQueue); - [[[requestQueueMock expect] andForwardToRealObject] removeAt:1]; - - [requestQueue moveInstallOrOpenToFront:0]; - XCTAssertEqual([requestQueue peek], openRequest); - - [requestQueueMock verify]; -} - -- (void)testMoveOpenOrInstallToFrontWhenThirdInLineWithRequestsInProgress { - BNCServerRequestQueue *requestQueue = [[BNCServerRequestQueue alloc] init]; - BranchOpenRequest *openRequest = [[BranchOpenRequest alloc] init]; - [requestQueue insert:[[BNCServerRequest alloc] init] at:0]; - [requestQueue insert:[[BNCServerRequest alloc] init] at:1]; - [requestQueue insert:openRequest at:2]; - - id requestQueueMock = OCMPartialMock(requestQueue); - [[[requestQueueMock expect] andForwardToRealObject] removeAt:2]; - - [requestQueue moveInstallOrOpenToFront:1]; - XCTAssertEqual([requestQueue peekAt:1], openRequest); - - [requestQueueMock verify]; -} - -- (void)testMoveOpenOrInstallToFrontWhenThirdInLineWithNoRequestsInProgress { - BNCServerRequestQueue *requestQueue = [[BNCServerRequestQueue alloc] init]; - BranchOpenRequest *openRequest = [[BranchOpenRequest alloc] init]; - [requestQueue insert:[[BNCServerRequest alloc] init] at:0]; - [requestQueue insert:[[BNCServerRequest alloc] init] at:1]; - [requestQueue insert:openRequest at:2]; - - id requestQueueMock = OCMPartialMock(requestQueue); - [[[requestQueueMock expect] andForwardToRealObject] removeAt:2]; - - [requestQueue moveInstallOrOpenToFront:0]; - XCTAssertEqual([requestQueue peek], openRequest); - - [requestQueueMock verify]; -} - -@end diff --git a/Branch-TestBed/Branch-SDK-Tests/BNCTestCase.Test.m b/Branch-TestBed/Branch-SDK-Tests/BNCTestCase.Test.m deleted file mode 100644 index 2bf549088..000000000 --- a/Branch-TestBed/Branch-SDK-Tests/BNCTestCase.Test.m +++ /dev/null @@ -1,31 +0,0 @@ -/** - @file BNCTestCase.Test.m - @package Branch-SDK - @brief Test cases for the underlying Branch test class. - - @author Edward Smith - @date April 2018 - @copyright Copyright © 2018 Branch. All rights reserved. -*/ - -#import "BNCTestCase.h" - -@interface BNCTestCaseTest : BNCTestCase -@end - -@implementation BNCTestCaseTest - -- (void) testFailure { - // Un-comment the next line to test a failure case: - // XCTAssert(NO, @"Testing a test failure!"); - XCTAssertTrue(YES, @"Test passes!"); - NSString * bundleID = [NSBundle mainBundle].bundleIdentifier; - NSLog(@"The test bundleID is '%@'.", bundleID); -} - -- (void) testLoadString { - NSString *string = [self stringFromBundleWithKey:@"BNCTestCaseString"]; - XCTAssertEqualObjects(string, @"Test success!"); -} - -@end diff --git a/Branch-TestBed/Branch-SDK-Tests/BNCTestCase.h b/Branch-TestBed/Branch-SDK-Tests/BNCTestCase.h deleted file mode 100644 index 7b9d2b7e7..000000000 --- a/Branch-TestBed/Branch-SDK-Tests/BNCTestCase.h +++ /dev/null @@ -1,43 +0,0 @@ -/** - @file BNCTestCase.h - @package Branch-SDK-Tests - @brief The Branch testing framework super class. - - @author Edward Smith - @date April 2017 - @copyright Copyright © 2017 Branch. All rights reserved. -*/ - -#import -#import -#import "NSString+Branch.h" -#import "BNCThreads.h" - -#define BNCTAssertEqualMaskedString(string, mask) { \ - if ((id)string != nil && (id)mask != nil && [string bnc_isEqualToMaskedString:mask]) { \ - } else { \ - XCTAssertEqualObjects(string, mask); \ - } \ -} - -extern BOOL BNCTestStringMatchesRegex(NSString *string, NSString *regex); - -#define XCTAssertStringMatchesRegex(string, regex) \ - XCTAssertTrue(BNCTestStringMatchesRegex(string, regex)) - -@interface BNCTestCase : XCTestCase - -- (void)safelyFulfillExpectation:(XCTestExpectation *)expectation; -- (void)awaitExpectations; -- (void)resetExpectations; -- (id)stringMatchingPattern:(NSString *)pattern; -- (double) systemVersion; - -// Load Resources from the test bundle: - -- (NSString*)stringFromBundleWithKey:(NSString*)key; -- (NSMutableDictionary*) mutableDictionaryFromBundleJSONWithKey:(NSString*)key; - -+ (void) clearAllBranchSettings; -+ (BOOL) isApplication; -@end diff --git a/Branch-TestBed/Branch-SDK-Tests/BNCTestCase.m b/Branch-TestBed/Branch-SDK-Tests/BNCTestCase.m deleted file mode 100644 index 5f49a0b03..000000000 --- a/Branch-TestBed/Branch-SDK-Tests/BNCTestCase.m +++ /dev/null @@ -1,130 +0,0 @@ -/** - @file BNCTestCase.m - @package Branch-SDK-Tests - @brief The Branch testing framework super class. - - @author Edward Smith - @date April 2017 - @copyright Copyright © 2017 Branch. All rights reserved. -*/ - -#import "BNCTestCase.h" -#import "BNCLog.h" -#import "Branch.h" -#import "BNCApplication+BNCTest.h" - -#import "BNCUserAgentCollector.h" - -@interface Branch (BNCTest) -+ (void) clearAll; -@end - -NSString* kTestStringResourceName = @"BNCTestCase"; // File is 'BNCTestCase.strings'. Omit the '.string'. - -#pragma mark - BNCTestStringMatchesRegex - -BOOL BNCTestStringMatchesRegex(NSString *string, NSString *regex) { - NSError *error = nil; - NSRegularExpression* nsregex = - [NSRegularExpression regularExpressionWithPattern:regex options:0 error:&error]; - if (error) { - NSLog(@"Error in regex pattern: %@.", error); - return NO; - } - NSRange stringRange = NSMakeRange(0, string.length); - NSTextCheckingResult *match = [nsregex firstMatchInString:string options:0 range:stringRange]; - return NSEqualRanges(match.range, stringRange); -} - -#pragma mark - BNCTestCase - -@interface BNCTestCase () -@property (assign, nonatomic) BOOL hasExceededExpectations; -@end - -@implementation BNCTestCase - -- (void)setUp { - [super setUp]; - [self resetExpectations]; -} - -- (void)resetExpectations { - self.hasExceededExpectations = NO; -} - -- (void)safelyFulfillExpectation:(XCTestExpectation *)expectation { - if (!self.hasExceededExpectations) { - [expectation fulfill]; - } -} - -- (void)awaitExpectations { - [self waitForExpectationsWithTimeout:5 handler:^(NSError *error) { - self.hasExceededExpectations = YES; - }]; -} - -- (id)stringMatchingPattern:(NSString *)pattern { - NSRegularExpression *regex = - [[NSRegularExpression alloc] - initWithPattern:pattern - options:NSRegularExpressionCaseInsensitive - error:nil]; - - return [OCMArg checkWithBlock:^BOOL(NSString *param) { - return [regex numberOfMatchesInString:param - options:kNilOptions range:NSMakeRange(0, param.length)] > 0; - }]; -} - -- (NSString*) stringFromBundleWithKey:(NSString*)key { - NSString *const kItemNotFound = @""; - NSString *resource = - [[NSBundle bundleForClass:self.class] - localizedStringForKey:key value:kItemNotFound table:kTestStringResourceName]; - if ([resource isEqualToString:kItemNotFound]) resource = nil; - return resource; -} - -- (NSMutableDictionary*) mutableDictionaryFromBundleJSONWithKey:(NSString*)key { - NSString *jsonString = [self stringFromBundleWithKey:key]; - XCTAssertTrue(jsonString, @"Can't load '%@' resource from bundle JSON!", key); - - NSError *error = nil; - NSDictionary *dictionary = - [NSJSONSerialization JSONObjectWithData:[jsonString dataUsingEncoding:NSUTF8StringEncoding] - options:0 error:&error]; - XCTAssertNil(error); - XCTAssert(dictionary); - NSMutableDictionary *mutableDictionary = [NSMutableDictionary dictionaryWithDictionary:dictionary]; - return mutableDictionary; -} - -- (double) systemVersion { - return [UIDevice currentDevice].systemVersion.floatValue; -} - -static NSString* savedRandomizedBundleToken = nil; - -+ (void) initialize { - if (self != [BNCTestCase self]) return; - BNCLogSetDisplayLevel(BNCLogLevelAll); - - savedRandomizedBundleToken = [BNCPreferenceHelper sharedInstance].randomizedBundleToken; - [Branch clearAll]; -} - -+ (void)tearDown { - [BNCPreferenceHelper sharedInstance].randomizedBundleToken = savedRandomizedBundleToken; -} - -+ (void) clearAllBranchSettings { - [Branch clearAll]; -} - -+ (BOOL) isApplication { - return [BNCApplication currentApplication].bundleID.length > 0; -} - -@end diff --git a/Branch-TestBed/Branch-SDK-Tests/BNCTestCase.strings b/Branch-TestBed/Branch-SDK-Tests/BNCTestCase.strings deleted file mode 100644 index 43dc2f622..000000000 --- a/Branch-TestBed/Branch-SDK-Tests/BNCTestCase.strings +++ /dev/null @@ -1,255 +0,0 @@ -/** - @file BNCTestCase.strings - @package Branch-SDK-Tests - @brief String resources for Branch-SDK-Tests. - - @author Edward Smith - @date October 2016 - @copyright Copyright © 2016 Branch. All rights reserved. -*/ - -"BNCTestCaseString" = "Test success!"; - -"DumpClassTest" = -" -Class 0x11a380018 is class 'DumpClass' of class 'NSObject': - Ivar 'stringVar' type 'NSString'. - Ivar 'intVar' type 'int'. - Ivar 'charPtrVar' type 'char*'. - Ivar 'classVar' type 'class'. - Ivar 'floatVar' type 'float'. - Ivar 'doubleVar' type 'double'. - Ivar 'shortVar' type 'short'. - Ivar 'boolVar' type 'BOOL'. - Ivar 'ucharVar' type 'unsigned char'. - Ivar 'uintVar' type 'unsigned int'. - Ivar 'ushortVar' type 'unsigned short'. - Ivar 'ulongVar' type 'unsigned long'. - Ivar 'doubleTroubleVar' type 'long double'. - Ivar 'UnhandledType' type '{UnhandledStruct=\"int1\"i\"int2\"i}' (un-handled type). - Ivar '_intProp' type 'int'. - Ivar '_stringProp' type 'NSString'. - Property name: 'intProp'. - Property name: 'stringProp'. - Class method name: 'classMethod'. - Method name: '.cxx_destruct'. - Method name: 'dealloc'. - Method name: 'init'. - Method name: 'setIntProp:'. - Method name: 'setStringProp:'. - Method name: 'methodThatTakesAnNSString:'. - Method name: 'intProp'. - Method name: 'stringProp'. -"; - -"DumpInstanceTest" = -" -Instance 0x132585f70 is of class 'DumpClass' of class 'NSObject': - Ivar 'stringVar' type '__NSCFConstantString' value 'Yope!'. - Ivar 'intVar' type 'int' value '1'. - Ivar 'charPtrVar' type 'char*' value 'YopeCharString'. - Ivar 'classVar' type 'class' value 'NSNumber'. - Ivar 'floatVar' type 'float' value '2.000000'. - Ivar 'doubleVar' type 'double' value '3.000000'. - Ivar 'shortVar' type 'short' value '4'. - Ivar 'boolVar' type 'BOOL' value 'NO'. - Ivar 'ucharVar' type 'unsigned char' value ''. - Ivar 'uintVar' type 'unsigned int' value '0'. - Ivar 'ushortVar' type 'unsigned short' value '0'. - Ivar 'ulongVar' type 'unsigned long' value '0'. - Ivar 'doubleTroubleVar' type 'long double' value '0.000000'. - Ivar 'UnhandledType' type '{UnhandledStruct=\"int1\"i\"int2\"i}' (un-handled type). - Ivar '_intProp' type 'int' value '5'. - Ivar '_stringProp' type '__NSCFConstantString' value 'Props!'. - Property name: 'intProp'. - Property name: 'stringProp'. - Class method name: 'classMethod'. - Method name: '.cxx_destruct'. - Method name: 'dealloc'. - Method name: 'init'. - Method name: 'setIntProp:'. - Method name: 'setStringProp:'. - Method name: 'methodThatTakesAnNSString:'. - Method name: 'intProp'. - Method name: 'stringProp'. -"; - -"BranchUniversalObjectJSON" = -" -{ - \"$content_schema\": \"COMMERCE_PRODUCT\", - \"$quantity\": 2, - \"$price\": 23.2, - \"$currency\": \"USD\", - \"$sku\": \"1994320302\", - \"$product_name\": \"my_product_name1\", - \"$product_brand\": \"my_prod_Brand1\", - \"$product_category\": \"Baby & Toddler\", - \"$product_variant\": \"3T\", - \"$rating_average\": 5, - \"$rating_count\": 5, - \"$rating_max\": 7, - \"$rating\": 6, - \"$condition\": \"FAIR\", - \"$address_street\": \"Street_name1\", - \"$address_city\": \"city1\", - \"$address_region\": \"Region1\", - \"$address_country\": \"Country1\", - \"$address_postal_code\": \"postal_code\", - \"$latitude\": 12.07, - \"$longitude\": -97.5, - \"$image_captions\": [\"my_img_caption1\", \"my_img_caption_2\"], - \"$og_title\": \"My Content Title\", - \"$canonical_identifier\": \"item\/12345\", - \"$canonical_url\": \"https:\/\/branch.io\/deepviews\", - \"$keywords\": [\"My_Keyword1\", \"My_Keyword2\"], - \"$og_description\": \"my_product_description1\", - \"$og_image_url\": \"https:\/\/test_img_url\", - \"$exp_date\": 212123232544, - \"$publicly_indexable\": false, - \"$locally_indexable\": true, - \"$creation_timestamp\": 1501869445321, - \"Custom_Content_metadata_key1\": \"Custom_Content_metadata_val1\", - \"Custom_Content_metadata_key2\": \"Custom_Content_metadata_val2\" -} -"; -"V2EventProperties" = -" -{ - \"affiliation\": \"test_affiliation\", - \"coupon\": \"test_coupon\", - \"currency\": \"USD\", - \"description\": \"Event _description\", - \"shipping\": 10.2, - \"tax\": 12.3, - \"revenue\": 1.5, - \"search_query\": \"Query\", - \"transaction_id\": \"12344555\", - \"custom_data\": { - \"Custom_Event_Property_Key1\": \"Custom_Event_Property_val1\", - \"Custom_Event_Property_Key2\": \"Custom_Event_Property_val2\" - } -} -"; -"V2EventJSON" = -" -{ - \"name\": \"PURCHASE\", - \"metadata\" : { - \"skan_time_window\": \"5184000.000000\" - }, - \"custom_data\": { - \"Custom_Event_Property_Key1\": \"Custom_Event_Property_val1\", - \"Custom_Event_Property_Key2\": \"Custom_Event_Property_val2\" - }, - \"customer_event_alias\": \"event alias\", - \"event_data\": { - \"affiliation\": \"test_affiliation\", - \"coupon\": \"test_coupon\", - \"currency\": \"USD\", - \"description\": \"Event _description\", - \"shipping\": 10.2, - \"tax\": 12.3, - \"revenue\": 1.5, - \"transaction_id\": \"12344555\", - \"search_query\": \"Query\" - }, - \"content_items\": [{ - \"$content_schema\": \"COMMERCE_PRODUCT\", - \"$quantity\": 2, - \"$price\": 23.2, - \"$currency\": \"USD\", - \"$condition\": \"FAIR\", - \"$sku\": \"1994320302\", - \"$product_name\": \"my_product_name1\", - \"$product_brand\": \"my_prod_Brand1\", - \"$product_category\": \"Baby & Toddler\", - \"$product_variant\": \"3T\", - \"$rating_average\": 5, - \"$rating_count\": 5, - \"$rating_max\": 7, - \"$rating\": 6, - \"$address_street\": \"Street_name1\", - \"$address_city\": \"city1\", - \"$address_region\": \"Region1\", - \"$address_country\": \"Country1\", - \"$address_postal_code\": \"postal_code\", - \"$latitude\": 12.07, - \"$longitude\": -97.5, - \"$image_captions\": [\"my_img_caption1\", \"my_img_caption_2\"], - \"Custom_Content_metadata_key1\": \"Custom_Content_metadata_val1\", - \"Custom_Content_metadata_key2\": \"Custom_Content_metadata_val2\", - \"$og_title\": \"My Content Title\", - \"$canonical_identifier\": \"item\/12345\", - \"$canonical_url\": \"https:\/\/branch.io\/deepviews\", - \"$keywords\": [\"My_Keyword1\", \"My_Keyword2\"], - \"$og_description\": \"my_product_description1\", - \"$og_image_url\": \"https:\/\/test_img_url\", - \"$exp_date\": 212123232544, - \"$locally_indexable\": true, - \"$creation_timestamp\": 1501869445321 - }], - \"user_data\": { - \"os\": \"iOS\", - \"os_version\": 25, - \"environment\": \"FULL_APP\", - \"idfa\": \"\", - \"idfv\": \"\", - \"user_agent\": \"\", - \"developer_identity\": \"edsojan\", - \"country\": \"US\", - \"language\": \"en\", - \"brand\": \"Apple\", - \"randomized_device_token\": \"\", - \"sdk\": \"ios0.17.10\", - \"app_version\": \"whatever\", - \"model\": \"x86_64\", - \"screen_dpi\": 3, - \"screen_height\": 2208, - \"screen_width\": 1242 - }, - \"branch_key\": \"key_live_foo\", - \"retryNumber\": 0 -} -"; -"BUODescription" = -""; -"BNCDeviceDictionaryV2" = -"{ - \"os\": \"iOS\", - \"os_version\": 25, - \"environment\": \"FULL_APP\", - \"idfa\": \"\", - \"idfv\": \"\", - \"user_agent\": \"\", - \"developer_identity\": \"edsojan\", - \"country\": \"US\", - \"language\": \"en\", - \"brand\": \"Apple\", - \"randomized_device_token\": \"\", - \"sdk\": \"ios\", - \"sdk_version\": \"0.17.10\", - \"app_version\": \"whatever\", - \"model\": \"x86_64\", - \"screen_dpi\": 3, - \"screen_height\": 2208, - \"screen_width\": 1242 -}"; - diff --git a/Branch-TestBed/Branch-SDK-Tests/BNCURLFilterSkiplistUpgradeTests.m b/Branch-TestBed/Branch-SDK-Tests/BNCURLFilterSkiplistUpgradeTests.m index 60d9fc4c3..ad7d5b029 100644 --- a/Branch-TestBed/Branch-SDK-Tests/BNCURLFilterSkiplistUpgradeTests.m +++ b/Branch-TestBed/Branch-SDK-Tests/BNCURLFilterSkiplistUpgradeTests.m @@ -9,13 +9,6 @@ #import #import "BNCURLFilter.h" -@interface BNCURLFilter(Test) - -// BNCURLFilter defines this as an ivar with a setter & getter, redefine it as a property -@property (nonatomic, strong, readwrite) NSArray *patternList; -@property (assign, nonatomic) NSInteger listVersion; -@end - @interface BNCURLFilterSkiplistUpgradeTests : XCTestCase @end @@ -77,26 +70,24 @@ - (void)tearDown { - (BNCURLFilter *)filterWithV0List { BNCURLFilter *filter = [BNCURLFilter new]; - [self migrateFilter:filter patternList:[self v1PatternList] version:1]; + [self migrateFilter:filter patternList:[self v1PatternList]]; return filter; } - (BNCURLFilter *)filterWithV1List { BNCURLFilter *filter = [BNCURLFilter new]; - [self migrateFilter:filter patternList:[self v1PatternList] version:1]; + [self migrateFilter:filter patternList:[self v1PatternList]]; return filter; } - (BNCURLFilter *)filterWithV2List { BNCURLFilter *filter = [BNCURLFilter new]; - [self migrateFilter:filter patternList:[self v2PatternList] version:2]; + [self migrateFilter:filter patternList:[self v2PatternList]]; return filter; } -- (void)migrateFilter:(BNCURLFilter *)filter patternList:(NSArray *)patternList version:(NSInteger)version { - // BNCURLFilter updates the global storage when these are set - filter.patternList = patternList; - filter.listVersion = version; +- (void)migrateFilter:(BNCURLFilter *)filter patternList:(NSArray *)patternList { + [filter useCustomPatternList:patternList]; } - (NSArray *)badURLs { diff --git a/Branch-TestBed/Branch-SDK-Tests/BNCURLFilterTests.m b/Branch-TestBed/Branch-SDK-Tests/BNCURLFilterTests.m index bc9c797f6..1573bc36e 100644 --- a/Branch-TestBed/Branch-SDK-Tests/BNCURLFilterTests.m +++ b/Branch-TestBed/Branch-SDK-Tests/BNCURLFilterTests.m @@ -8,207 +8,161 @@ @copyright Copyright © 2018 Branch. All rights reserved. */ -#import "BNCTestCase.h" +#import #import "BNCURLFilter.h" -#import "Branch.h" -#import "BNCLog.h" -@interface BNCURLFilter () -@property (readwrite) NSURL *jsonURL; -@end - -@interface BNCURLFilterTests : BNCTestCase +@interface BNCURLFilterTests : XCTestCase @end @implementation BNCURLFilterTests -- (void) setUp { - [BNCPreferenceHelper sharedInstance].savedURLPatternList = nil; - [BNCPreferenceHelper sharedInstance].savedURLPatternListVersion = 0; - [BNCPreferenceHelper sharedInstance].dropURLOpen = NO; +- (void)setUp { + // Put setup code here. This method is called before the invocation of each test method in the class. } -- (void) tearDown { - [BNCPreferenceHelper sharedInstance].dropURLOpen = NO; +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the class. } -/* - // Test is unreliable when run in parallel with other tests, it's using a persistent datastore... -- (void)testListDownLoad { - XCTestExpectation *expectation = [self expectationWithDescription:@"List Download"]; +- (void)testPatternMatchingURL_nil { BNCURLFilter *filter = [BNCURLFilter new]; - [filter updatePatternListWithCompletion:^ (NSError*error, NSArray*list) { - XCTAssertNil(error); - XCTAssertTrue(list.count > 0); - [expectation fulfill]; - }]; - [self awaitExpectations]; + NSURL *url = nil; + NSString *matchingRegex = [filter patternMatchingURL:url]; + XCTAssertNil(matchingRegex); } - */ -- (NSArray*) badURLs { - NSArray *kBadURLs = @[ +- (void)testPatternMatchingURL_emptyString { + BNCURLFilter *filter = [BNCURLFilter new]; + NSURL *url = [NSURL URLWithString:@""]; + NSString *matchingRegex = [filter patternMatchingURL:url]; + XCTAssertNil(matchingRegex); +} + +- (void)testPatternMatchingURL_fbRegexMatches { + NSString *pattern = @"^fb\\d+:((?!campaign_ids).)*$"; + NSString *sampleURL = @"fb12345://"; + + BNCURLFilter *filter = [BNCURLFilter new]; + NSURL *url = [NSURL URLWithString:sampleURL]; + NSString *matchingRegex = [filter patternMatchingURL:url]; + XCTAssertTrue([pattern isEqualToString:matchingRegex]); +} + +- (void)testPatternMatchingURL_fbRegexDoesNotMatch { + NSString *pattern = @"^fb\\d+:((?!campaign_ids).)*$"; + NSString *sampleURL = @"fb12345://campaign_ids"; + + BNCURLFilter *filter = [BNCURLFilter new]; + NSURL *url = [NSURL URLWithString:sampleURL]; + NSString *matchingRegex = [filter patternMatchingURL:url]; + XCTAssertFalse([pattern isEqualToString:matchingRegex]); +} + + +- (void)testIgnoredSuspectedAuthURLs { + NSArray *urls = @[ @"fb123456:login/464646", - @"twitterkit-.4545:", @"shsh:oauth/login", @"https://myapp.app.link/oauth_token=fred", @"https://myapp.app.link/auth_token=fred", @"https://myapp.app.link/authtoken=fred", @"https://myapp.app.link/auth=fred", - @"fb1234:", - @"fb1234:/", - @"fb1234:/this-is-some-extra-info/?whatever", - @"fb1234:/this-is-some-extra-info/?whatever:andstuff", @"myscheme:path/to/resource?oauth=747474", @"myscheme:oauth=747474", @"myscheme:/oauth=747474", @"myscheme://oauth=747474", @"myscheme://path/oauth=747474", @"myscheme://path/:oauth=747474", - @"https://google.com/userprofile/devonbanks=oauth?", + @"https://google.com/userprofile/devonbanks=oauth?" ]; - return kBadURLs; + + BNCURLFilter *filter = [BNCURLFilter new]; + for (NSString *string in urls) { + NSURL *URL = [NSURL URLWithString:string]; + XCTAssertTrue([filter shouldIgnoreURL:URL], @"Checking '%@'.", URL); + } } -- (NSArray*) goodURLs { - NSArray *kGoodURLs = @[ +- (void)testAllowedURLsSimilarToAuthURLs { + NSArray *urls = @[ @"shshs:/content/path", @"shshs:content/path", @"https://myapp.app.link/12345/link", - @"fb123x:/", @"https://myapp.app.link?authentic=true&tokemonsta=false", - @"myscheme://path/brauth=747474", + @"myscheme://path/brauth=747474" ]; - return kGoodURLs; -} - -- (void)testBadURLs { - // Test default list. + BNCURLFilter *filter = [BNCURLFilter new]; - for (NSString *string in self.badURLs) { + for (NSString *string in urls) { NSURL *URL = [NSURL URLWithString:string]; - XCTAssertTrue([filter shouldIgnoreURL:URL], @"Checking '%@'.", URL); + XCTAssertFalse([filter shouldIgnoreURL:URL], @"Checking '%@'", URL); } } -- (void) testDownloadBadURLs { - // Test download list. - XCTestExpectation *expectation = [self expectationWithDescription:@"List Download"]; +- (void)testIgnoredFacebookURLs { + // Most FB URIs are ignored + NSArray *urls = @[ + @"fb123456://login/464646", + @"fb1234:", + @"fb1234:/", + @"fb1234:/this-is-some-extra-info/?whatever", + @"fb1234:/this-is-some-extra-info/?whatever:andstuff" + ]; + BNCURLFilter *filter = [BNCURLFilter new]; - filter.jsonURL = [NSURL URLWithString:@"https://cdn.branch.io/sdk/uriskiplist_tv1.json"]; - [filter updatePatternListWithCompletion:^ (NSError*error, NSArray*list) { - XCTAssertNil(error); - XCTAssertTrue(list.count == 7); - [expectation fulfill]; - }]; - [self awaitExpectations]; - for (NSString *string in self.badURLs) { + for (NSString *string in urls) { NSURL *URL = [NSURL URLWithString:string]; XCTAssertTrue([filter shouldIgnoreURL:URL], @"Checking '%@'.", URL); } } -- (void)testGoodURLs { - // Test default list. +- (void)testAllowedFacebookURLs { + NSArray *urls = @[ + // Facebook URIs do not contain letters other than an fb prefix + @"fb123x://", + // FB URIs with campaign ids are allowed + @"fb1234://helloworld?al_applink_data=%7B%22target_url%22%3A%22http%3A%5C%2F%5C%2Fitunes.apple.com%5C%2Fapp%5C%2Fid880047117%22%2C%22extras%22%3A%7B%22fb_app_id%22%3A2020399148181142%7D%2C%22referer_app_link%22%3A%7B%22url%22%3A%22fb%3A%5C%2F%5C%2F%5C%2F%3Fapp_id%3D2020399148181142%22%2C%22app_name%22%3A%22Facebook%22%7D%2C%22acs_token%22%3A%22debuggingtoken%22%2C%22campaign_ids%22%3A%22ARFUlbyOurYrHT2DsknR7VksCSgN4tiH8TzG8RIvVoUQoYog5bVCvADGJil5kFQC6tQm-fFJQH0w8wCi3NbOmEHHrtgCNglkXNY-bECEL0aUhj908hIxnBB0tchJCqwxHjorOUqyk2v4bTF75PyWvxOksZ6uTzBmr7wJq8XnOav0bA%22%2C%22test_deeplink%22%3A1%7D" + ]; + BNCURLFilter *filter = [BNCURLFilter new]; - for (NSString *string in self.goodURLs) { + for (NSString *string in urls) { NSURL *URL = [NSURL URLWithString:string]; XCTAssertFalse([filter shouldIgnoreURL:URL], @"Checking '%@'", URL); } } -- (void) testDownloadGoodURLs { - // Test download list. - XCTestExpectation *expectation = [self expectationWithDescription:@"List Download"]; +- (void)testCustomPatternList { BNCURLFilter *filter = [BNCURLFilter new]; - filter.jsonURL = [NSURL URLWithString:@"https://cdn.branch.io/sdk/uriskiplist_tv1.json"]; - [filter updatePatternListWithCompletion:^ (NSError*error, NSArray*list) { - XCTAssertNil(error); - XCTAssertTrue(list.count == 7); - [expectation fulfill]; - }]; - [self awaitExpectations]; - for (NSString *string in self.goodURLs) { - NSURL *URL = [NSURL URLWithString:string]; - XCTAssertFalse([filter shouldIgnoreURL:URL], @"Checking '%@'.", URL); - } + + // sanity check default pattern list + XCTAssertTrue([filter shouldIgnoreURL:[NSURL URLWithString:@"fb123://"]]); + XCTAssertFalse([filter shouldIgnoreURL:[NSURL URLWithString:@"branch123://"]]); + + // confirm new pattern list is enforced + [filter useCustomPatternList:@[@"^branch\\d+:"]]; + XCTAssertFalse([filter shouldIgnoreURL:[NSURL URLWithString:@"fb123://"]]); + XCTAssertTrue([filter shouldIgnoreURL:[NSURL URLWithString:@"branch123://"]]); } -- (void) testStandardList { - BNCLogSetDisplayLevel(BNCLogLevelAll); - Branch *branch = (Branch.branchKey.length) ? Branch.getInstance : [Branch getInstance:@"key_live_foo"]; - id serverInterfaceMock = OCMPartialMock(branch.serverInterface); - XCTestExpectation *expectation = [self expectationWithDescription:@"OpenRequest Expectation"]; - - OCMStub( - [serverInterfaceMock postRequest:[OCMArg any] - url:[OCMArg any] - key:[OCMArg any] - callback:[OCMArg any]] - ).andDo(^(NSInvocation *invocation) { - __unsafe_unretained NSDictionary *dictionary = nil; - __unsafe_unretained NSString *url = nil; - [invocation getArgument:&dictionary atIndex:2]; - [invocation getArgument:&url atIndex:3]; - - NSLog(@"d: %@", dictionary); - NSString* link = dictionary[@"external_intent_uri"]; - NSString *pattern1 = @"^(?i)((http|https):\\/\\/).*[\\/|?|#].*\\b(password|o?auth|o?auth.?token|access|access.?token)\\b"; - NSString *pattern2 = @"^(?i).+:.*[?].*\\b(password|o?auth|o?auth.?token|access|access.?token)\\b"; - NSLog(@"\n Link: '%@'\nPattern1: '%@'\nPattern2: '%@'.", link, pattern1, pattern2); - if ([link isEqualToString:pattern1] || [link isEqualToString:pattern2]) { - [expectation fulfill]; - } - else - if ([url containsString:@"install"]) { - [expectation fulfill]; - } - }); - [branch clearNetworkQueue]; - [branch handleDeepLink:[NSURL URLWithString:@"https://myapp.app.link/bob/link?oauth=true"]]; - [self waitForExpectationsWithTimeout:5.0 handler:nil]; - [serverInterfaceMock stopMocking]; - [BNCPreferenceHelper sharedInstance].referringURL = nil; - [[BNCPreferenceHelper sharedInstance] synchronize]; -} +// This is an end to end test and relies on a server call +- (void)testUpdatePatternListFromServer { + BNCURLFilter *filter = [BNCURLFilter new]; -- (void) testUserList { - BNCLogSetDisplayLevel(BNCLogLevelAll); - Branch *branch = (Branch.branchKey.length) ? Branch.getInstance : [Branch getInstance:@"key_live_foo"]; - [branch clearNetworkQueue]; - branch.urlPatternsToIgnore = @[ - @"\\/bob\\/" - ]; - id serverInterfaceMock = OCMPartialMock(branch.serverInterface); - XCTestExpectation *expectation = [self expectationWithDescription:@"OpenRequest Expectation"]; - - OCMStub( - [serverInterfaceMock postRequest:[OCMArg any] - url:[OCMArg any] - key:[OCMArg any] - callback:[OCMArg any]] - ).andDo(^(NSInvocation *invocation) { - __unsafe_unretained NSDictionary *dictionary = nil; - __unsafe_unretained NSString *URL = nil; - [invocation getArgument:&dictionary atIndex:2]; - [invocation getArgument:&URL atIndex:3]; - - NSString* link = dictionary[@"external_intent_uri"]; - NSString *pattern = @"\\/bob\\/"; - NSLog(@"\n URL: '%@'\n Link: '%@'\nPattern: '%@'\n.", URL, link, pattern); - if ([link isEqualToString:pattern]) { - [expectation fulfill]; - } - else - if ([URL containsString:@"install"]) { - [expectation fulfill]; - } - }); - [branch handleDeepLink:[NSURL URLWithString:@"https://myapp.app.link/bob/link"]]; - [self waitForExpectationsWithTimeout:5.0 handler:nil]; - [serverInterfaceMock stopMocking]; - [BNCPreferenceHelper sharedInstance].referringURL = nil; - [[BNCPreferenceHelper sharedInstance] synchronize]; + // confirm new pattern list is enforced + [filter useCustomPatternList:@[@"^branch\\d+:"]]; + XCTAssertFalse([filter shouldIgnoreURL:[NSURL URLWithString:@"fb123://"]]); + XCTAssertTrue([filter shouldIgnoreURL:[NSURL URLWithString:@"branch123://"]]); + + __block XCTestExpectation *expectation = [self expectationWithDescription:@"List updated"]; + [filter updatePatternListFromServerWithCompletion:^{ + [expectation fulfill]; + }]; + + [self waitForExpectationsWithTimeout:5.0 handler:^(NSError * _Nullable error) { }]; + + // the retrieved list should match default pattern list + XCTAssertTrue([filter shouldIgnoreURL:[NSURL URLWithString:@"fb123://"]]); + XCTAssertFalse([filter shouldIgnoreURL:[NSURL URLWithString:@"branch123://"]]); } @end diff --git a/Branch-TestBed/Branch-SDK-Tests/Branch-SDK-Tests-Bridging-Header.h b/Branch-TestBed/Branch-SDK-Tests/Branch-SDK-Tests-Bridging-Header.h index 1e7530a59..169bd50f3 100644 --- a/Branch-TestBed/Branch-SDK-Tests/Branch-SDK-Tests-Bridging-Header.h +++ b/Branch-TestBed/Branch-SDK-Tests/Branch-SDK-Tests-Bridging-Header.h @@ -2,5 +2,4 @@ // Module headers for Branch SDK unit testing. // -#import "BNCTestCase.h" #import "Branch.h" diff --git a/Branch-TestBed/Branch-SDK-Tests/BranchActivityItemTests.m b/Branch-TestBed/Branch-SDK-Tests/BranchActivityItemTests.m new file mode 100644 index 000000000..f117859f7 --- /dev/null +++ b/Branch-TestBed/Branch-SDK-Tests/BranchActivityItemTests.m @@ -0,0 +1,39 @@ +// +// BranchActivityItemTests.m +// Branch-SDK-Tests +// +// Created by Nipun Singh on 9/21/23. +// Copyright © 2023 Branch, Inc. All rights reserved. +// + +#import +#import "Branch.h" + +@interface BranchActivityItemTests: XCTestCase +@end + +@implementation BranchActivityItemTests + +// Rework this test, it's not reliable. +//- (void)testGetBranchActivityItemWithAllParams { +// NSDictionary *params = @{@"key": @"value"}; +// NSString *feature = @"feature4"; +// NSString *stage = @"stage3"; +// NSArray *tags = @[@"tag3", @"tag4"]; +// NSString *campaign = @"campaign1"; +// NSString *alias = [[NSUUID UUID] UUIDString]; +// BranchActivityItemProvider *provider = [Branch getBranchActivityItemWithParams:params feature:feature stage:stage campaign:campaign tags:tags alias:alias]; +// sleep(2000); +// if ([[provider item] isKindOfClass:[NSURL class]]) { +// NSURL *urlObject = (NSURL *)[provider item]; +// NSString *url = [urlObject absoluteString]; +// +// NSLog(@"Provider URL as String: %@", url); +// +// XCTAssertTrue([url isEqualToString:[@"https://bnctestbed.app.link/" stringByAppendingString:alias]]); +// } else { +// XCTFail("Provider Data is not of type NSURL"); +// } +//} + +@end diff --git a/Branch-TestBed/Branch-SDK-Tests/BranchClassTests.m b/Branch-TestBed/Branch-SDK-Tests/BranchClassTests.m new file mode 100644 index 000000000..9d337a14e --- /dev/null +++ b/Branch-TestBed/Branch-SDK-Tests/BranchClassTests.m @@ -0,0 +1,244 @@ +// +// BranchClassTests.m +// Branch-SDK-Tests +// +// Created by Nipun Singh on 9/25/23. +// Copyright © 2023 Branch, Inc. All rights reserved. +// + +#import +#import "Branch.h" +#import "BranchConstants.h" +#import "BNCPasteboard.h" +#import "BNCAppGroupsData.h" +#import "BNCPartnerParameters.h" + +@interface BNCPreferenceHelper(Test) +// Expose internal private method to clear EEA data +- (void)writeObjectToDefaults:(NSString *)key value:(NSObject *)value; +@end + +@interface BranchClassTests : XCTestCase +@property (nonatomic, strong) Branch *branch; +@end + +@implementation BranchClassTests + +- (void)setUp { + [super setUp]; + self.branch = [Branch getInstance]; +} + +- (void)tearDown { + self.branch = nil; + [super tearDown]; +} + +- (void)testIsUserIdentified { + [self.branch setIdentity: @"userId"]; + XCTAssertTrue([self.branch isUserIdentified], @"User should be identified"); +} + +- (void)testDisableAdNetworkCallouts { + [self.branch disableAdNetworkCallouts:YES]; + XCTAssertTrue([BNCPreferenceHelper sharedInstance].disableAdNetworkCallouts, @"AdNetwork callouts should be disabled"); +} + +- (void)testSetNetworkTimeout { + [self.branch setNetworkTimeout:5.0]; + XCTAssertEqual([BNCPreferenceHelper sharedInstance].timeout, 5.0, @"Network timeout should be set to 5.0"); +} + +//- (void)testSetMaxRetries { +// [self.branch setMaxRetries:3]; +// XCTAssertEqual([BNCPreferenceHelper sharedInstance].retryCount, 3, @"Max retries should be set to 3"); +//} + +- (void)testSetRetryInterval { + [self.branch setRetryInterval:2.0]; + XCTAssertEqual([BNCPreferenceHelper sharedInstance].retryInterval, 2.0, @"Retry interval should be set to 2.0"); +} + +- (void)testSetRequestMetadataKeyAndValue { + [self.branch setRequestMetadataKey:@"key" value:@"value"]; + NSDictionary *metadata = [BNCPreferenceHelper sharedInstance].requestMetadataDictionary; + XCTAssertEqualObjects(metadata[@"key"], @"value"); +} + +- (void)testSetTrackingDisabled { + XCTAssertFalse([BNCPreferenceHelper sharedInstance].trackingDisabled); + + [Branch setTrackingDisabled:YES]; + XCTAssertTrue([BNCPreferenceHelper sharedInstance].trackingDisabled); + + [Branch setTrackingDisabled:NO]; + XCTAssertFalse([BNCPreferenceHelper sharedInstance].trackingDisabled); +} + +- (void)testCheckPasteboardOnInstall { + [self.branch checkPasteboardOnInstall]; + BOOL checkOnInstall = [BNCPasteboard sharedInstance].checkOnInstall; + XCTAssertTrue(checkOnInstall); +} + +- (void)testWillShowPasteboardToast_ShouldReturnYes { + [BNCPreferenceHelper sharedInstance].randomizedBundleToken = nil; + [BNCPasteboard sharedInstance].checkOnInstall = YES; + UIPasteboard.generalPasteboard.URL = [NSURL URLWithString:@"https://example.com"]; + + BOOL result = [self.branch willShowPasteboardToast]; + XCTAssertTrue(result); +} + +- (void)testWillShowPasteboardToast_ShouldReturnNo { + [BNCPreferenceHelper sharedInstance].randomizedBundleToken = @"some_token"; + [BNCPasteboard sharedInstance].checkOnInstall = NO; + + BOOL result = [self.branch willShowPasteboardToast]; + XCTAssertFalse(result); +} + +- (void)testSetAppClipAppGroup { + NSString *testAppGroup = @"testAppGroup"; + [self.branch setAppClipAppGroup:testAppGroup]; + NSString *actualAppGroup = [BNCAppGroupsData shared].appGroup; + + XCTAssertEqualObjects(testAppGroup, actualAppGroup); +} + +- (void)testClearPartnerParameters { + [self.branch addFacebookPartnerParameterWithName:@"ph" value:@"123456789"]; + [[BNCPartnerParameters shared] clearAllParameters]; + + NSDictionary *result = [[BNCPartnerParameters shared] parameterJson]; + XCTAssertEqual([result count], 0, @"Parameters should be empty after calling clearAllParameters"); +} + +- (void)testAddFacebookParameterWithName_Value { + [self.branch addFacebookPartnerParameterWithName:@"name" value:@"3D4F2BF07DC1BE38B20C653EE9A7E446158F84E525BBB98FEDF721CB5A40A346"]; + + NSDictionary *result = [[BNCPartnerParameters shared] parameterJson][@"fb"]; + XCTAssertEqualObjects(result[@"name"], @"3D4F2BF07DC1BE38B20C653EE9A7E446158F84E525BBB98FEDF721CB5A40A346", @"Should add parameter for Facebook"); +} + +- (void)testAddSnapParameterWithName_Value { + [self.branch addSnapPartnerParameterWithName:@"name" value:@"3D4F2BF07DC1BE38B20C653EE9A7E446158F84E525BBB98FEDF721CB5A40A346"]; + + NSDictionary *result = [[BNCPartnerParameters shared] parameterJson][@"snap"]; + XCTAssertEqualObjects(result[@"name"], @"3D4F2BF07DC1BE38B20C653EE9A7E446158F84E525BBB98FEDF721CB5A40A346", @"Should add parameter for Snap"); +} + +- (void)testGetFirstReferringBranchUniversalObject_ClickedBranchLink { + NSString *installParamsString = @"{\"$canonical_identifier\":\"content/12345\",\"$creation_timestamp\":1694557342247,\"$desktop_url\":\"https://example.com/home\",\"$og_description\":\"My Content Description\",\"$og_title\":\"My Content Title\",\"+click_timestamp\":1695749249,\"+clicked_branch_link\":1,\"+is_first_session\":1,\"+match_guaranteed\":1,\"custom\":\"data\",\"key1\":\"value1\",\"~campaign\":\"content 123 launch\",\"~channel\":\"facebook\",\"~creation_source\":3,\"~feature\":\"sharing\",\"~id\":1230269548213984984,\"~referring_link\":\"https://bnctestbed.app.link/uSPHktjO2Cb\"}"; + [[BNCPreferenceHelper sharedInstance] setInstallParams: installParamsString]; + + BranchUniversalObject *result = [self.branch getFirstReferringBranchUniversalObject];\ + XCTAssertNotNil(result); + XCTAssertEqualObjects(result.title, @"My Content Title"); + XCTAssertEqualObjects(result.canonicalIdentifier, @"content/12345"); +} + +- (void)testGetFirstReferringBranchUniversalObject_NotClickedBranchLink { + NSString *installParamsString = @"{\"+clicked_branch_link\":false,\"+is_first_session\":true}"; + [[BNCPreferenceHelper sharedInstance] setInstallParams: installParamsString]; + + BranchUniversalObject *result = [self.branch getFirstReferringBranchUniversalObject]; + XCTAssertNil(result); +} + +- (void)testGetFirstReferringBranchLinkProperties_ClickedBranchLink { + NSString *installParamsString = @"{\"+clicked_branch_link\":1,\"+is_first_session\":1,\"~campaign\":\"content 123 launch\"}"; + [[BNCPreferenceHelper sharedInstance] setInstallParams:installParamsString]; + + BranchLinkProperties *result = [self.branch getFirstReferringBranchLinkProperties]; + XCTAssertNotNil(result); + XCTAssertEqualObjects(result.campaign, @"content 123 launch"); +} + +- (void)testGetFirstReferringBranchLinkProperties_NotClickedBranchLink { + NSString *installParamsString = @"{\"+clicked_branch_link\":false,\"+is_first_session\":true}"; + [[BNCPreferenceHelper sharedInstance] setInstallParams:installParamsString]; + + BranchLinkProperties *result = [self.branch getFirstReferringBranchLinkProperties]; + XCTAssertNil(result); +} + +- (void)testGetFirstReferringParams { + NSString *installParamsString = @"{\"+clicked_branch_link\":true,\"+is_first_session\":true}"; + [[BNCPreferenceHelper sharedInstance] setInstallParams:installParamsString]; + + NSDictionary *result = [self.branch getFirstReferringParams]; + XCTAssertEqualObjects([result objectForKey:@"+clicked_branch_link"], @true); +} + +- (void)testGetLatestReferringParams { + NSString *sessionParamsString = @"{\"+clicked_branch_link\":true,\"+is_first_session\":false}"; + [[BNCPreferenceHelper sharedInstance] setSessionParams:sessionParamsString]; + + NSDictionary *result = [self.branch getLatestReferringParams]; + XCTAssertEqualObjects([result objectForKey:@"+clicked_branch_link"], @true); +} + +//- (void)testGetLatestReferringParamsSynchronous { +// NSString *sessionParamsString = @"{\"+clicked_branch_link\":true,\"+is_first_session\":false}"; +// [[BNCPreferenceHelper sharedInstance] setSessionParams:sessionParamsString]; +// +// NSDictionary *result = [self.branch getLatestReferringParamsSynchronous]; +// XCTAssertEqualObjects([result objectForKey:@"+clicked_branch_link"], @true); +//} + +- (void)testGetLatestReferringBranchUniversalObject_ClickedBranchLink { + NSString *sessionParamsString = @"{\"+clicked_branch_link\":1,\"+is_first_session\":false,\"$og_title\":\"My Latest Content\"}"; + [[BNCPreferenceHelper sharedInstance] setSessionParams:sessionParamsString]; + + BranchUniversalObject *result = [self.branch getLatestReferringBranchUniversalObject]; + XCTAssertNotNil(result); + XCTAssertEqualObjects(result.title, @"My Latest Content"); +} + +- (void)testGetLatestReferringBranchLinkProperties_ClickedBranchLink { + NSString *sessionParamsString = @"{\"+clicked_branch_link\":true,\"+is_first_session\":false,\"~campaign\":\"latest campaign\"}"; + [[BNCPreferenceHelper sharedInstance] setSessionParams:sessionParamsString]; + + BranchLinkProperties *result = [self.branch getLatestReferringBranchLinkProperties]; + XCTAssertNotNil(result); + XCTAssertEqualObjects(result.campaign, @"latest campaign"); +} + +- (void)testGetShortURL { + NSString *shortURL = [self.branch getShortURL]; + XCTAssertNotNil(shortURL, @"URL should not be nil"); + XCTAssertTrue([shortURL hasPrefix:@"https://"], @"URL should start with 'https://'"); +} + +- (void)testGetLongURLWithParamsAndChannelAndTagsAndFeatureAndStageAndAlias { + NSDictionary *params = @{@"key": @"value"}; + NSString *channel = @"channel1"; + NSArray *tags = @[@"tag1", @"tag2"]; + NSString *feature = @"feature1"; + NSString *stage = @"stage1"; + NSString *alias = @"alias1"; + + NSString *generatedURL = [self.branch getLongURLWithParams:params andChannel:channel andTags:tags andFeature:feature andStage:stage andAlias:alias]; + NSString *expectedURL = @"https://bnc.lt/a/key_live_hcnegAumkH7Kv18M8AOHhfgiohpXq5tB?tags=tag1&tags=tag2&alias=alias1&feature=feature1&stage=stage1&source=ios&data=eyJrZXkiOiJ2YWx1ZSJ9"; + + XCTAssertEqualObjects(generatedURL, expectedURL, @"URL should match the expected format"); +} + +- (void)testSetDMAParamsForEEA { + XCTAssertFalse([[BNCPreferenceHelper sharedInstance] eeaRegionInitialized]); + + [Branch setDMAParamsForEEA:FALSE AdPersonalizationConsent:TRUE AdUserDataUsageConsent:TRUE]; + XCTAssertTrue([[BNCPreferenceHelper sharedInstance] eeaRegionInitialized]); + XCTAssertFalse([BNCPreferenceHelper sharedInstance].eeaRegion); + XCTAssertTrue([BNCPreferenceHelper sharedInstance].adPersonalizationConsent); + XCTAssertTrue([BNCPreferenceHelper sharedInstance].adUserDataUsageConsent); + + // Manually clear values after testing + // By design, this API is meant to be set once and always set. However, in a test scenario it needs to be cleared. + [[BNCPreferenceHelper sharedInstance] writeObjectToDefaults:@"bnc_dma_eea" value:nil]; + [[BNCPreferenceHelper sharedInstance] writeObjectToDefaults:@"bnc_dma_ad_personalization" value:nil]; + [[BNCPreferenceHelper sharedInstance] writeObjectToDefaults:@"bnc_dma_ad_user_data" value:nil]; +} + +@end diff --git a/Branch-TestBed/Branch-SDK-Tests/BranchDelegate.Test.m b/Branch-TestBed/Branch-SDK-Tests/BranchDelegate.Test.m deleted file mode 100644 index 9da2f12b0..000000000 --- a/Branch-TestBed/Branch-SDK-Tests/BranchDelegate.Test.m +++ /dev/null @@ -1,328 +0,0 @@ -// -// BranchDelegateTest.m -// Branch-SDK-Tests -// -// Created by edward on 11/3/17. -// Copyright © 2017 Branch, Inc. All rights reserved. -// - -#import "BNCTestCase.h" -#import "Branch.h" -#import "NSError+Branch.h" -#import "BNCEncodingUtils.h" - -@interface BranchDelegateTest : BNCTestCase -@property (assign, nonatomic) NSInteger notificationOrder; -@property (strong, nonatomic) XCTestExpectation *branchWillOpenURLExpectation; -@property (strong, nonatomic) XCTestExpectation *branchWillOpenURLNotificationExpectation; -@property (strong, nonatomic) XCTestExpectation *branchDidOpenURLExpectation; -@property (strong, nonatomic) XCTestExpectation *branchDidOpenURLNotificationExpectation; -@property (strong, nonatomic) NSDictionary *deepLinkParams; -@property (assign, nonatomic) BOOL expectFailure; -@end - -#pragma mark - BranchDelegateTest - -@implementation BranchDelegateTest - -// Test that Branch notifications work. -// Test that they 1) work and 2) are sent in the right order. -- (void) testNotificationsSuccess { - - self.expectFailure = NO; - self.notificationOrder = 0; - - [[NSNotificationCenter defaultCenter] - addObserver:self - selector:@selector(branchWillStartSessionNotification:) - name:BranchWillStartSessionNotification - object:nil]; - - [[NSNotificationCenter defaultCenter] - addObserver:self - selector:@selector(branchDidStartSessionNotification:) - name:BranchDidStartSessionNotification - object:nil]; - - id serverInterfaceMock = OCMClassMock([BNCServerInterface class]); - - BNCPreferenceHelper *preferenceHelper = [BNCPreferenceHelper sharedInstance]; - Branch.branchKey = @"key_live_foo"; - - Branch *branch = - [[Branch alloc] - initWithInterface:serverInterfaceMock - queue:[[BNCServerRequestQueue alloc] init] - cache:[[BNCLinkCache alloc] init] - preferenceHelper:preferenceHelper - key:@"key_live_foo"]; - branch.delegate = self; - - BNCServerResponse *openInstallResponse = [[BNCServerResponse alloc] init]; - openInstallResponse.data = @{ - @"data": @"{\"$og_title\":\"Content Title\",\"$randomized_bundle_token\":\"423237095633725879\",\"~feature\":\"Sharing Feature\",\"$desktop_url\":\"http://branch.io\",\"$canonical_identifier\":\"item/12345\",\"~id\":423243086454504450,\"~campaign\":\"some campaign\",\"+is_first_session\":false,\"~channel\":\"Distribution Channel\",\"$ios_url\":\"https://dev.branch.io/getting-started/sdk-integration-guide/guide/ios/\",\"$exp_date\":0,\"$currency\":\"$\",\"$publicly_indexable\":1,\"$content_type\":\"some type\",\"~creation_source\":3,\"$amount\":1000,\"$og_description\":\"My Content Description\",\"+click_timestamp\":1506983962,\"$og_image_url\":\"https://pbs.twimg.com/profile_images/658759610220703744/IO1HUADP.png\",\"+match_guaranteed\":true,\"+clicked_branch_link\":true,\"deeplink_text\":\"This text was embedded as data in a Branch link with the following characteristics:\\n\\ncanonicalUrl: https://dev.branch.io/getting-started/deep-link-routing/guide/ios/\\n title: Content Title\\n contentDescription: My Content Description\\n imageUrl: https://pbs.twimg.com/profile_images/658759610220703744/IO1HUADP.png\\n\",\"$one_time_use\":false,\"$canonical_url\":\"https://dev.branch.io/getting-started/deep-link-routing/guide/ios/\",\"~referring_link\":\"https://bnctestbed.app.link/izPBY2xCqF\"}", - @"randomized_device_token": @"439892172783867901", - @"randomized_bundle_token": @"439892172804841307", - @"link": @"https://bnctestbed.app.link?%24randomized_bundle_token=439892172804841307", - @"session_id": @"443529761084512316", - }; - - __block BNCServerCallback openOrInstallCallback; - id openOrInstallCallbackCheckBlock = [OCMArg checkWithBlock:^BOOL(BNCServerCallback callback) { - openOrInstallCallback = callback; - return YES; - }]; - - id openOrInstallInvocation = ^(NSInvocation *invocation) { - openOrInstallCallback(openInstallResponse, nil); - }; - - id openOrInstallUrlCheckBlock = [OCMArg checkWithBlock:^BOOL(NSString *url) { - return [url rangeOfString:@"open"].location != NSNotFound || - [url rangeOfString:@"install"].location != NSNotFound; - }]; - [[[serverInterfaceMock expect] - andDo:openOrInstallInvocation] - postRequest:[OCMArg any] - url:openOrInstallUrlCheckBlock - key:[OCMArg any] - callback:openOrInstallCallbackCheckBlock]; - - preferenceHelper.universalLinkUrl = nil; - preferenceHelper.externalIntentURI = nil; - preferenceHelper.referringURL = nil; - - [branch clearNetworkQueue]; - XCTestExpectation *openExpectation = [self expectationWithDescription:@"Test open"]; - [branch initSessionWithLaunchOptions:@{} - andRegisterDeepLinkHandler:^(NSDictionary *params, NSError *error) { - // Callback block. Order: 2. - XCTAssertNil(error); - XCTAssertEqualObjects(preferenceHelper.sessionID, @"443529761084512316"); - XCTAssertTrue(self.notificationOrder == 2); - self.notificationOrder++; - self.deepLinkParams = params; - [openExpectation fulfill]; - } - ]; - - [self waitForExpectationsWithTimeout:5.0 handler:NULL]; - XCTAssertTrue(self.notificationOrder == 5); - [[NSNotificationCenter defaultCenter] removeObserver:self]; - branch.delegate = nil; -} - -// Test that Branch notifications work with a failure. -// Test that they 1) work and 2) are sent in the right order. -- (void) testNotificationsFailure { - - self.expectFailure = YES; - self.notificationOrder = 0; - - [[NSNotificationCenter defaultCenter] - addObserver:self - selector:@selector(branchWillStartSessionNotification:) - name:BranchWillStartSessionNotification - object:nil]; - - [[NSNotificationCenter defaultCenter] - addObserver:self - selector:@selector(branchDidStartSessionNotification:) - name:BranchDidStartSessionNotification - object:nil]; - - id serverInterfaceMock = OCMClassMock([BNCServerInterface class]); - - BNCPreferenceHelper *preferenceHelper = [BNCPreferenceHelper sharedInstance]; - Branch.branchKey = @"key_live_foo"; - - Branch *branch = - [[Branch alloc] - initWithInterface:serverInterfaceMock - queue:[[BNCServerRequestQueue alloc] init] - cache:[[BNCLinkCache alloc] init] - preferenceHelper:preferenceHelper - key:@"key_live_foo"]; - branch.delegate = self; - - BNCServerResponse *openInstallResponse = [[BNCServerResponse alloc] init]; - openInstallResponse.data = @{ }; - - __block BNCServerCallback openOrInstallCallback; - id openOrInstallCallbackCheckBlock = [OCMArg checkWithBlock:^BOOL(BNCServerCallback callback) { - openOrInstallCallback = callback; - return YES; - }]; - - id openOrInstallInvocation = ^(NSInvocation *invocation) { - NSError *error = [NSError branchErrorWithCode:BNCNetworkServiceInterfaceError]; - openOrInstallCallback(openInstallResponse, error); - }; - - id openOrInstallUrlCheckBlock = [OCMArg checkWithBlock:^BOOL(NSString *url) { - return [url rangeOfString:@"open"].location != NSNotFound || - [url rangeOfString:@"install"].location != NSNotFound; - }]; - - [[[serverInterfaceMock expect] - andDo:openOrInstallInvocation] - postRequest:[OCMArg any] - url:openOrInstallUrlCheckBlock - key:[OCMArg any] - callback:openOrInstallCallbackCheckBlock]; - - [branch clearNetworkQueue]; - XCTestExpectation *openExpectation = [self expectationWithDescription:@"Test open"]; - [branch initSessionWithLaunchOptions:@{} - andRegisterDeepLinkHandler:^(NSDictionary *params, NSError *error) { - // Callback block. Order: 2. - XCTAssertEqualObjects(params, @{}); - XCTAssertNotNil(error); - XCTAssertTrue(self.notificationOrder == 2); - self.notificationOrder++; - self.deepLinkParams = params; - [openExpectation fulfill]; - } - ]; - - [self waitForExpectationsWithTimeout:5.0 handler:NULL]; - XCTAssertTrue(self.notificationOrder == 5); - [[NSNotificationCenter defaultCenter] removeObserver:self]; - branch.delegate = nil; -} - -#pragma mark - Delegate & Notification Methods - -// Delegate method. Order: 0. -- (void) branch:(Branch*)branch willStartSessionWithURL:(NSURL*)url { - XCTAssertTrue(self.notificationOrder == 0); - self.notificationOrder++; - [self.branchWillOpenURLExpectation fulfill]; -} - -// Notification method. Order: 1. -- (void) branchWillStartSessionNotification:(NSNotification*)notification { - XCTAssertTrue(self.notificationOrder == 1); - self.notificationOrder++; - - NSError *error = notification.userInfo[BranchErrorKey]; - XCTAssertNil(error); - - NSURL *URL = notification.userInfo[BranchURLKey]; - XCTAssertNil(URL); - - BranchUniversalObject *object = notification.userInfo[BranchUniversalObjectKey]; - XCTAssertNil(object); - - BranchLinkProperties *properties = notification.userInfo[BranchLinkPropertiesKey]; - XCTAssertNil(properties); - - [self.branchWillOpenURLNotificationExpectation fulfill]; -} - -// Delegate method. Order: 3. -- (void) branch:(Branch*)branch -didStartSessionWithURL:(NSURL*)url - branchLink:(BranchLink*)branchLink { - XCTAssertTrue([NSThread isMainThread]); - XCTAssertTrue(self.notificationOrder == 3); - self.notificationOrder++; - XCTAssertNotNil(branchLink.universalObject); - XCTAssertNotNil(branchLink.linkProperties); - if (self.expectFailure) - [NSException raise:NSInternalInconsistencyException format:@"Should return an error here."]; - [self.branchDidOpenURLExpectation fulfill]; -} - -// Delegate method. Order: 3 -- (void) branch:(Branch*)branch -failedToStartSessionWithURL:(NSURL*)url - error:(NSError*)error { - XCTAssertTrue([NSThread isMainThread]); - XCTAssertTrue(self.notificationOrder == 3); - self.notificationOrder++; - XCTAssertNotNil(error); - if (!self.expectFailure) - [NSException raise:NSInternalInconsistencyException format:@"Shouldn't return an error here."]; - [self.branchDidOpenURLExpectation fulfill]; -} - -// Notification method. Order: 4 -- (void) branchDidStartSessionNotification:(NSNotification*)notification { - XCTAssertTrue([NSThread isMainThread]); - XCTAssertTrue(self.notificationOrder == 4); - self.notificationOrder++; - - NSError *error = notification.userInfo[BranchErrorKey]; - NSURL *URL = notification.userInfo[BranchURLKey]; - BranchUniversalObject *object = notification.userInfo[BranchUniversalObjectKey]; - BranchLinkProperties *properties = notification.userInfo[BranchLinkPropertiesKey]; - - if (self.expectFailure) { - - XCTAssertNotNil(error); - XCTAssertNil(URL); - XCTAssertNil(object); - XCTAssertNil(properties); - - } else { - - XCTAssertNil(error); - XCTAssertNotNil(URL); - XCTAssertNotNil(object); - XCTAssertNotNil(properties); - - NSMutableDictionary *d = - [NSMutableDictionary dictionaryWithDictionary: - [object getDictionaryWithCompleteLinkProperties:properties]]; - NSMutableDictionary *truth = [NSMutableDictionary dictionaryWithDictionary:@{ - @"$amount": @1000, - @"$canonical_identifier": @"item/12345", - @"$canonical_url": @"https://dev.branch.io/getting-started/deep-link-routing/guide/ios/", - @"$content_type": @"some type", - @"$currency": @"$", - @"$desktop_url": @"http://branch.io", - @"$exp_date": @0, - @"$randomized_bundle_token": @"423237095633725879", - @"$ios_url": @"https://dev.branch.io/getting-started/sdk-integration-guide/guide/ios/", - @"$og_description": @"My Content Description", - @"$og_image_url": @"https://pbs.twimg.com/profile_images/658759610220703744/IO1HUADP.png", - @"$og_title": @"Content Title", - @"$one_time_use": @0, - @"$publicly_indexable": @1, - - @"+click_timestamp": @1506983962, - @"+clicked_branch_link": @1, - @"+is_first_session": @0, - @"+match_guaranteed": @1, - - @"deeplink_text": @"This text was embedded as data in a Branch link with the following characteristics:\n\ncanonicalUrl: https://dev.branch.io/getting-started/deep-link-routing/guide/ios/\n title: Content Title\n contentDescription: My Content Description\n imageUrl: https://pbs.twimg.com/profile_images/658759610220703744/IO1HUADP.png\n", - - @"~campaign": @"some campaign", - @"~channel": @"Distribution Channel", - @"~creation_source": @3, - @"~duration": @0, - @"~feature": @"Sharing Feature", - @"~id": @423243086454504450, - @"~referring_link": @"https://bnctestbed.app.link/izPBY2xCqF" - }]; - - XCTAssertTrue(d.count == truth.count); - XCTAssertTrue(!d || [d isEqualToDictionary:truth]); - } - - [self.branchDidOpenURLNotificationExpectation fulfill]; -} - -- (void)setUp { - self.branchWillOpenURLExpectation = - [self expectationWithDescription:@"branchWillOpenURLExpectation"]; - self.branchWillOpenURLNotificationExpectation = - [self expectationWithDescription:@"branchWillOpenURLNotificationExpectation"]; - self.branchDidOpenURLExpectation = - [self expectationWithDescription:@"branchDidOpenURLExpectation"]; - self.branchDidOpenURLNotificationExpectation = - [self expectationWithDescription:@"branchDidOpenURLNotificationExpectation"]; -} - -@end diff --git a/Branch-TestBed/Branch-SDK-Tests/BranchEvent.Test.m b/Branch-TestBed/Branch-SDK-Tests/BranchEvent.Test.m index fa9ce3a57..ddb3d220f 100644 --- a/Branch-TestBed/Branch-SDK-Tests/BranchEvent.Test.m +++ b/Branch-TestBed/Branch-SDK-Tests/BranchEvent.Test.m @@ -5,12 +5,12 @@ // Created by Edward Smith on 8/15/17. // Copyright © 2017 Branch Metrics. All rights reserved. // - -#import "BNCTestCase.h" +#import #import "BNCPreferenceHelper.h" #import "BranchConstants.h" #import "BranchEvent.h" #import "BNCDeviceInfo.h" +#import "NSError+Branch.h" @interface Branch (BranchEventTest) - (void) processNextQueueItem; @@ -26,17 +26,22 @@ - (BranchEventRequest *)buildRequestWithEventDictionary:(NSDictionary *)eventDic @end -@interface BranchEventTest : BNCTestCase +@interface BranchEventTest : XCTestCase @end @implementation BranchEventTest -- (void) setUp { +- (void)setUp { [BNCPreferenceHelper sharedInstance].randomizedBundleToken = @"575759106028389737"; [[BNCPreferenceHelper sharedInstance] clearInstrumentationDictionary]; } -- (void) testDescription { +- (void)tearDown { + +} + +// TODO: fix this test +- (void)testDescription { BranchEvent *event = [BranchEvent standardEvent:BranchStandardEventPurchase]; event.transactionID = @"1234"; event.currency = BNCCurrencyUSD; @@ -47,12 +52,12 @@ - (void) testDescription { }; NSString *d = event.description; - BNCTAssertEqualMaskedString(d, - @""); +// BNCTAssertEqualMaskedString(d, +// @""); } -- (void) testExampleSyntax { +- (void)testExampleSyntax { BranchUniversalObject *contentItem = [BranchUniversalObject new]; contentItem.canonicalIdentifier = @"item/123"; contentItem.canonicalUrl = @"https://branch.io/item/123"; @@ -544,4 +549,27 @@ - (void)testJsonStringForAdTypeNative { XCTAssertTrue([[event jsonStringForAdType:BranchEventAdTypeNative] isEqualToString:@"NATIVE"]); } +- (void) testCustomEventWithContentItem { + BranchUniversalObject *buo = [[BranchUniversalObject new] initWithTitle:@"buoTitle"]; + BranchEvent *event = [BranchEvent customEventWithName:@"testEvent" contentItem:buo]; + + XCTAssertTrue(event.contentItems.count == 1); + XCTAssertTrue([event.contentItems.firstObject.title isEqualToString:@"buoTitle"]); +} + +- (void)testLogEventWithCompletion_InvalidEventName { + XCTestExpectation *expectation = [self expectationWithDescription:@"Logging Event"]; + BranchEvent *event = [BranchEvent customEventWithName:@""]; + + [event logEventWithCompletion:^(BOOL success, NSError * _Nullable error) { + XCTAssertFalse(success, @"Success should be NO for invalid event name"); + XCTAssertNotNil(error, @"Error should not be nil for invalid event name"); + XCTAssertEqual(error.code, BNCGeneralError, @"Error code should match expected value for invalid event name"); + [expectation fulfill]; + }]; + + [self waitForExpectationsWithTimeout:5 handler:nil]; +} + + @end diff --git a/Branch-TestBed/Branch-SDK-Tests/BranchEvent.Test.swift b/Branch-TestBed/Branch-SDK-Tests/BranchEvent.Test.swift index 2790360e5..2dfd438b0 100644 --- a/Branch-TestBed/Branch-SDK-Tests/BranchEvent.Test.swift +++ b/Branch-TestBed/Branch-SDK-Tests/BranchEvent.Test.swift @@ -6,15 +6,22 @@ // Copyright © 2017 Branch, Inc. All rights reserved. // -import Foundation +import XCTest -class BranchEventTestSwift : BNCTestCase { +// TODO: fix this test class, requires modules which our testbed is not using +final class BranchEventTestSwift : XCTestCase { - override func setUp() { + override func setUpWithError() throws { + // Put setup code here. This method is called before the invocation of each test method in the class. + Branch.getInstance("key_live_foo") } - func testBranchEvent() { + override func tearDownWithError() throws { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testBranchEvent() throws { // Set up the Branch Universal Object -- @@ -91,7 +98,7 @@ class BranchEventTestSwift : BNCTestCase { event.logEvent() } - func testExampleSyntaxSwift() { + func testExampleSyntaxSwift() throws { let contentItem = BranchUniversalObject.init() contentItem.canonicalIdentifier = "item/123" contentItem.canonicalUrl = "https://branch.io/item/123" diff --git a/Branch-TestBed/Branch-SDK-Tests/BranchInstallRequestTests.m b/Branch-TestBed/Branch-SDK-Tests/BranchInstallRequestTests.m deleted file mode 100644 index 9b4cf8990..000000000 --- a/Branch-TestBed/Branch-SDK-Tests/BranchInstallRequestTests.m +++ /dev/null @@ -1,318 +0,0 @@ -// -// BranchInstallRequestTests.m -// Branch-TestBed -// -// Created by Graham Mueller on 6/24/15. -// Copyright (c) 2015 Branch Metrics. All rights reserved. -// - -#import "BNCTestCase.h" -#import "Branch.h" -#import "BNCApplication.h" -#import "BNCApplication+BNCTest.h" -#import "BranchInstallRequest.h" -#import "BNCPreferenceHelper.h" -#import "BNCSystemObserver.h" -#import "BranchConstants.h" -#import "BNCEncodingUtils.h" -#import - -@interface BranchInstallRequestTests : BNCTestCase -@end - -@implementation BranchInstallRequestTests - -- (void)setUp { - [super setUp]; - BNCPreferenceHelper *preferenceHelper = [BNCPreferenceHelper sharedInstance]; - preferenceHelper.installParams = nil; - preferenceHelper.randomizedBundleToken = nil; - [preferenceHelper saveContentAnalyticsManifest:nil]; - [preferenceHelper synchronize]; -} - -- (void)testSuccessWithAllKeysAndIsReferrable { - NSString * const DEVICE_TOKEN = @"foo-token"; - NSString * const USER_URL = @"http://foo"; - NSString * const DEVELOPER_ID = @"foo"; - NSString * const SESSION_ID = @"foo-session"; - NSString * const SESSION_PARAMS = @"{\"+clicked_branch_link\":1,\"foo\":\"bar\"}"; - NSString * const RANDOMIZED_BUNDLE_TOKEN = @"randomized_bundle_token"; - - BNCServerResponse *response = [[BNCServerResponse alloc] init]; - response.data = @{ - BRANCH_RESPONSE_KEY_RANDOMIZED_DEVICE_TOKEN: DEVICE_TOKEN, - BRANCH_RESPONSE_KEY_USER_URL: USER_URL, - BRANCH_RESPONSE_KEY_DEVELOPER_IDENTITY: DEVELOPER_ID, - BRANCH_RESPONSE_KEY_SESSION_ID: SESSION_ID, - BRANCH_RESPONSE_KEY_SESSION_DATA: SESSION_PARAMS, - BRANCH_RESPONSE_KEY_RANDOMIZED_BUNDLE_TOKEN: RANDOMIZED_BUNDLE_TOKEN - }; - - XCTestExpectation *openExpectation = [self expectationWithDescription:@"OpenRequest Expectation"]; - BranchInstallRequest *request = [[BranchInstallRequest alloc] initWithCallback:^(BOOL success, NSError *error) { - XCTAssertNil(error); - XCTAssertTrue(success); - [self safelyFulfillExpectation:openExpectation]; - }]; - - [Branch setBranchKey:@"key_live_foo"]; - [request processResponse:response error:nil]; - [self awaitExpectations]; - - BNCPreferenceHelper *preferenceHelper = [BNCPreferenceHelper sharedInstance]; - XCTAssertEqualObjects(preferenceHelper.randomizedDeviceToken, DEVICE_TOKEN); - XCTAssertEqualObjects(preferenceHelper.userUrl, USER_URL); - XCTAssertEqualObjects(preferenceHelper.userIdentity, DEVELOPER_ID); - XCTAssertEqualObjects(preferenceHelper.sessionID, SESSION_ID); - XCTAssertEqualObjects(preferenceHelper.sessionParams, SESSION_PARAMS); - XCTAssertEqualObjects(preferenceHelper.installParams, SESSION_PARAMS); - XCTAssertEqualObjects(preferenceHelper.randomizedBundleToken, RANDOMIZED_BUNDLE_TOKEN); - XCTAssertNil(preferenceHelper.linkClickIdentifier); -} - -- (void)testSuccessWithAllKeysAndIsNotReferrable { - NSString * const DEVICE_TOKEN = @"foo-token"; - NSString * const USER_URL = @"http://foo"; - NSString * const DEVELOPER_ID = @"foo"; - NSString * const SESSION_ID = @"foo-session"; - NSString * const SESSION_PARAMS = @"{\"foo\":\"bar\"}"; - NSString * const INSTALL_PARAMS = @"{\"bar\":\"foo\"}"; - NSString * const RANDOMIZED_BUNDLE_TOKEN = @"randomized_bundle_token"; - - BNCServerResponse *response = [[BNCServerResponse alloc] init]; - response.data = @{ - BRANCH_RESPONSE_KEY_RANDOMIZED_DEVICE_TOKEN: DEVICE_TOKEN, - BRANCH_RESPONSE_KEY_USER_URL: USER_URL, - BRANCH_RESPONSE_KEY_DEVELOPER_IDENTITY: DEVELOPER_ID, - BRANCH_RESPONSE_KEY_SESSION_ID: SESSION_ID, - BRANCH_RESPONSE_KEY_SESSION_DATA: SESSION_PARAMS, - BRANCH_RESPONSE_KEY_RANDOMIZED_BUNDLE_TOKEN: RANDOMIZED_BUNDLE_TOKEN - }; - - BNCPreferenceHelper *preferenceHelper = [BNCPreferenceHelper sharedInstance]; - preferenceHelper.installParams = INSTALL_PARAMS; - - XCTestExpectation *openExpectation = [self expectationWithDescription:@"OpenRequest Expectation"]; - BranchInstallRequest *request = [[BranchInstallRequest alloc] initWithCallback:^(BOOL success, NSError *error) { - XCTAssertNil(error); - XCTAssertTrue(success); - [self safelyFulfillExpectation:openExpectation]; - }]; - - [Branch setBranchKey:@"key_live_foo"]; - [request processResponse:response error:nil]; - - [self awaitExpectations]; - - XCTAssertEqualObjects(preferenceHelper.randomizedDeviceToken, DEVICE_TOKEN); - XCTAssertEqualObjects(preferenceHelper.userUrl, USER_URL); - XCTAssertEqualObjects(preferenceHelper.userIdentity, DEVELOPER_ID); - XCTAssertEqualObjects(preferenceHelper.sessionID, SESSION_ID); - XCTAssertEqualObjects(preferenceHelper.sessionParams, SESSION_PARAMS); - XCTAssertEqualObjects(preferenceHelper.installParams, INSTALL_PARAMS); - XCTAssertEqualObjects(preferenceHelper.randomizedBundleToken, RANDOMIZED_BUNDLE_TOKEN); - XCTAssertNil(preferenceHelper.linkClickIdentifier); -} - -- (void)testSuccessWithNoSessionParamsAndIsNotReferrable { - NSString * const DEVICE_TOKEN = @"foo-token"; - NSString * const USER_URL = @"http://foo"; - NSString * const DEVELOPER_ID = @"foo"; - NSString * const SESSION_ID = @"foo-session"; - NSString * const INSTALL_PARAMS = @"{\"bar\":\"foo\"}"; - NSString * const RANDOMIZED_BUNDLE_TOKEN = @"randomized_bundle_token"; - - BNCServerResponse *response = [[BNCServerResponse alloc] init]; - response.data = @{ - BRANCH_RESPONSE_KEY_RANDOMIZED_DEVICE_TOKEN: DEVICE_TOKEN, - BRANCH_RESPONSE_KEY_USER_URL: USER_URL, - BRANCH_RESPONSE_KEY_DEVELOPER_IDENTITY: DEVELOPER_ID, - BRANCH_RESPONSE_KEY_SESSION_ID: SESSION_ID, - BRANCH_RESPONSE_KEY_RANDOMIZED_BUNDLE_TOKEN: RANDOMIZED_BUNDLE_TOKEN - }; - - BNCPreferenceHelper *preferenceHelper = [BNCPreferenceHelper sharedInstance]; - preferenceHelper.installParams = INSTALL_PARAMS; - - XCTestExpectation *openExpectation = [self expectationWithDescription:@"OpenRequest Expectation"]; - BranchInstallRequest *request = [[BranchInstallRequest alloc] initWithCallback:^(BOOL success, NSError *error) { - XCTAssertNil(error); - XCTAssertTrue(success); - [self safelyFulfillExpectation:openExpectation]; - }]; - - [Branch setBranchKey:@"key_live_foo"]; - [request processResponse:response error:nil]; - [self awaitExpectations]; - - XCTAssertEqualObjects(preferenceHelper.randomizedDeviceToken, DEVICE_TOKEN); - XCTAssertEqualObjects(preferenceHelper.userUrl, USER_URL); - XCTAssertEqualObjects(preferenceHelper.userIdentity, DEVELOPER_ID); - XCTAssertEqualObjects(preferenceHelper.sessionID, SESSION_ID); - XCTAssertEqualObjects(preferenceHelper.installParams, INSTALL_PARAMS); - XCTAssertEqualObjects(preferenceHelper.randomizedBundleToken, RANDOMIZED_BUNDLE_TOKEN); - XCTAssertNil(preferenceHelper.sessionParams); - XCTAssertNil(preferenceHelper.linkClickIdentifier); -} - -- (void)testSuccessWithNoSessionParamsAndIsReferrableAndAllowToBeClearIsNotSet { - NSString * const DEVICE_TOKEN = @"foo-token"; - NSString * const USER_URL = @"http://foo"; - NSString * const DEVELOPER_ID = @"foo"; - NSString * const SESSION_ID = @"foo-session"; - NSString * const INSTALL_PARAMS = @"{\"bar\":\"foo\"}"; - NSString * const RANDOMIZED_BUNDLE_TOKEN = @"randomized_bundle_token"; - - BNCServerResponse *response = [[BNCServerResponse alloc] init]; - response.data = @{ - BRANCH_RESPONSE_KEY_RANDOMIZED_DEVICE_TOKEN: DEVICE_TOKEN, - BRANCH_RESPONSE_KEY_USER_URL: USER_URL, - BRANCH_RESPONSE_KEY_DEVELOPER_IDENTITY: DEVELOPER_ID, - BRANCH_RESPONSE_KEY_SESSION_ID: SESSION_ID, - BRANCH_RESPONSE_KEY_RANDOMIZED_BUNDLE_TOKEN: RANDOMIZED_BUNDLE_TOKEN - }; - - BNCPreferenceHelper *preferenceHelper = [BNCPreferenceHelper sharedInstance]; - preferenceHelper.installParams = INSTALL_PARAMS; - - XCTestExpectation *openExpectation = [self expectationWithDescription:@"OpenRequest Expectation"]; - BranchOpenRequest *request = [[BranchOpenRequest alloc] initWithCallback:^(BOOL success, NSError *error) { - XCTAssertNil(error); - XCTAssertTrue(success); - [self safelyFulfillExpectation:openExpectation]; - }]; - - [Branch setBranchKey:@"key_live_foo"]; - [request processResponse:response error:nil]; - [self awaitExpectations]; - - XCTAssertEqualObjects(preferenceHelper.randomizedDeviceToken, DEVICE_TOKEN); - XCTAssertEqualObjects(preferenceHelper.userUrl, USER_URL); - XCTAssertEqualObjects(preferenceHelper.userIdentity, DEVELOPER_ID); - XCTAssertEqualObjects(preferenceHelper.sessionID, SESSION_ID); - XCTAssertEqualObjects(preferenceHelper.installParams, INSTALL_PARAMS); - XCTAssertEqualObjects(preferenceHelper.randomizedBundleToken, RANDOMIZED_BUNDLE_TOKEN); - XCTAssertNil(preferenceHelper.sessionParams); - XCTAssertNil(preferenceHelper.linkClickIdentifier); -} - -- (void)testSuccessWithNoSessionParamsAndIsReferrableAndAllowToBeClearIsSet { - NSString * const DEVICE_TOKEN = @"foo-token"; - NSString * const USER_URL = @"http://foo"; - NSString * const DEVELOPER_ID = @"foo"; - NSString * const SESSION_ID = @"foo-session"; - NSString * const RANDOMIZED_BUNDLE_TOKEN = @"randomized_bundle_token"; - - BNCServerResponse *response = [[BNCServerResponse alloc] init]; - response.data = @{ - BRANCH_RESPONSE_KEY_RANDOMIZED_DEVICE_TOKEN: DEVICE_TOKEN, - BRANCH_RESPONSE_KEY_USER_URL: USER_URL, - BRANCH_RESPONSE_KEY_DEVELOPER_IDENTITY: DEVELOPER_ID, - BRANCH_RESPONSE_KEY_SESSION_ID: SESSION_ID, - BRANCH_RESPONSE_KEY_RANDOMIZED_BUNDLE_TOKEN: RANDOMIZED_BUNDLE_TOKEN - }; - - XCTestExpectation *openExpectation = [self expectationWithDescription:@"OpenRequest Expectation"]; - BranchInstallRequest *request = [[BranchInstallRequest alloc] initWithCallback:^(BOOL success, NSError *error) { - XCTAssertNil(error); - XCTAssertTrue(success); - [self safelyFulfillExpectation:openExpectation]; - } isInstall:YES]; - - [Branch setBranchKey:@"key_live_foo"]; - [request processResponse:response error:nil]; - [self awaitExpectations]; - - BNCPreferenceHelper *preferenceHelper = [BNCPreferenceHelper sharedInstance]; - XCTAssertEqualObjects(preferenceHelper.randomizedDeviceToken, DEVICE_TOKEN); - XCTAssertEqualObjects(preferenceHelper.userUrl, USER_URL); - XCTAssertEqualObjects(preferenceHelper.userIdentity, DEVELOPER_ID); - XCTAssertEqualObjects(preferenceHelper.sessionID, SESSION_ID); - XCTAssertEqualObjects(preferenceHelper.randomizedBundleToken, RANDOMIZED_BUNDLE_TOKEN); - XCTAssertNil(preferenceHelper.sessionParams); - XCTAssertNil(preferenceHelper.linkClickIdentifier); - XCTAssertNil(preferenceHelper.installParams); -} - -- (void)testInstallWhenReferrableAndNullData { - BNCPreferenceHelper *preferenceHelper = [BNCPreferenceHelper sharedInstance]; - - XCTestExpectation *expectation = [self expectationWithDescription:@"ReferrableInstall"]; - BranchInstallRequest *request = [[BranchInstallRequest alloc] initWithCallback:^(BOOL changed, NSError *error) { - XCTAssertNil(error); - XCTAssertNil(preferenceHelper.installParams); - [self safelyFulfillExpectation:expectation]; - }]; - - [Branch setBranchKey:@"key_live_foo"]; - BNCServerResponse *response = [[BNCServerResponse alloc] init]; - response.data = @{}; - [request processResponse:response error:nil]; - [self awaitExpectations]; -} - -- (void)testInstallWhenReferrableAndNonNullData { - BNCPreferenceHelper *preferenceHelper = [BNCPreferenceHelper sharedInstance]; - - NSString * const INSTALL_PARAMS = @"{\"+clicked_branch_link\":1,\"foo\":\"bar\"}"; - - XCTestExpectation *expectation = [self expectationWithDescription:@"Request Expectation"]; - BranchInstallRequest *request = [[BranchInstallRequest alloc] initWithCallback:^(BOOL changed, NSError *error) { - XCTAssertNil(error); - XCTAssertEqualObjects(preferenceHelper.installParams, INSTALL_PARAMS); - - [self safelyFulfillExpectation:expectation]; - }]; - - [Branch setBranchKey:@"key_live_foo"]; - BNCServerResponse *response = [[BNCServerResponse alloc] init]; - response.data = @{ BRANCH_RESPONSE_KEY_SESSION_DATA: INSTALL_PARAMS }; - [request processResponse:response error:nil]; - [self awaitExpectations]; -} - -- (void)testInstallWhenReferrableAndNoInstallParamsAndNonLinkClickData { - BNCPreferenceHelper *preferenceHelper = [BNCPreferenceHelper sharedInstance]; - - NSString * const OPEN_PARAMS = @"{\"+clicked_branch_link\":0}"; - - XCTestExpectation *expectation = [self expectationWithDescription:@"Request Expectation"]; - BranchInstallRequest *request = [[BranchInstallRequest alloc] initWithCallback:^(BOOL changed, NSError *error) { - XCTAssertNil(error); - XCTAssertNil(preferenceHelper.installParams); - - [self safelyFulfillExpectation:expectation]; - }]; - - [Branch setBranchKey:@"key_live_foo"]; - BNCServerResponse *response = [[BNCServerResponse alloc] init]; - response.data = @{ BRANCH_RESPONSE_KEY_SESSION_DATA: OPEN_PARAMS }; - [request processResponse:response error:nil]; - [self awaitExpectations]; -} - -- (void)testInstallWhenNotReferrable { - // 'isReferrable' seems to be an empty concept in iOS. - // It is in the code but not used. -- Edward. - - BNCPreferenceHelper *preferenceHelper = [BNCPreferenceHelper sharedInstance]; - NSString * const INSTALL_PARAMS = @"{\"+clicked_branch_link\":1,\"foo\":\"bar\"}"; - - XCTestExpectation *expectation = [self expectationWithDescription:@"Request Expectation"]; - BranchInstallRequest *request = - [[BranchInstallRequest alloc] initWithCallback:^(BOOL changed, NSError *error) { - XCTAssertNil(error); - XCTAssert([preferenceHelper.installParams isEqualToString:INSTALL_PARAMS]); - [self safelyFulfillExpectation:expectation]; - }]; - - [Branch setBranchKey:@"key_live_foo"]; - BNCServerResponse *response = [[BNCServerResponse alloc] init]; - response.data = @{ BRANCH_RESPONSE_KEY_SESSION_DATA: INSTALL_PARAMS }; - [request processResponse:response error:nil]; - - [self awaitExpectations]; -} - -@end diff --git a/Branch-TestBed/Branch-SDK-Tests/BranchLoggerTests.m b/Branch-TestBed/Branch-SDK-Tests/BranchLoggerTests.m new file mode 100644 index 000000000..1a4be3490 --- /dev/null +++ b/Branch-TestBed/Branch-SDK-Tests/BranchLoggerTests.m @@ -0,0 +1,261 @@ +// +// BranchLoggerTests.m +// Branch-SDK-Tests +// +// Created by Nipun Singh on 2/5/24. +// Copyright © 2024 Branch, Inc. All rights reserved. +// + +#import +#import "BranchLogger.h" +#import "Branch.h" + +@interface BranchLoggerTests : XCTestCase + +@end + +@implementation BranchLoggerTests + +// public API test +- (void)testEnableLoggingSetsCorrectDefaultLevel { + [[Branch getInstance] enableLogging]; + XCTAssertEqual([BranchLogger shared].logLevelThreshold, BranchLogLevelDebug, "Default log level should be Debug."); +} + +- (void)testLoggingEnabled_NOByDefault { + BranchLogger *logger = [BranchLogger new]; + + __block int count = 0; + logger.logCallback = ^(NSString * _Nonnull message, BranchLogLevel logLevel, NSError * _Nullable error) { + count = count + 1; + }; + [logger logError:@"msg" error:nil]; + + XCTAssertTrue(count == 0); +} + +- (void)testLoggingEnabled_Yes { + BranchLogger *logger = [BranchLogger new]; + logger.loggingEnabled = YES; + + __block int count = 0; + logger.logCallback = ^(NSString * _Nonnull message, BranchLogLevel logLevel, NSError * _Nullable error) { + count = count + 1; + }; + + [logger logError:@"msg" error:nil]; + XCTAssertTrue(count == 1); + + [logger logError:@"msg" error:nil]; + XCTAssertTrue(count == 2); +} + +- (void)testLoggingIgnoresNil { + BranchLogger *logger = [BranchLogger new]; + logger.loggingEnabled = YES; + + __block int count = 0; + logger.logCallback = ^(NSString * _Nonnull message, BranchLogLevel logLevel, NSError * _Nullable error) { + count = count + 1; + }; + + [logger logError:nil error:nil]; + XCTAssertTrue(count == 0); +} + +- (void)testLoggingIgnoresEmptyString { + BranchLogger *logger = [BranchLogger new]; + logger.loggingEnabled = YES; + + __block int count = 0; + logger.logCallback = ^(NSString * _Nonnull message, BranchLogLevel logLevel, NSError * _Nullable error) { + count = count + 1; + }; + + [logger logError:@"" error:nil]; + XCTAssertTrue(count == 0); +} + +- (void)testLoggingEnabled_YesThenNo { + BranchLogger *logger = [BranchLogger new]; + logger.loggingEnabled = YES; + + __block int count = 0; + logger.logCallback = ^(NSString * _Nonnull message, BranchLogLevel logLevel, NSError * _Nullable error) { + count = count + 1; + }; + + // one call + [logger logError:@"msg" error:nil]; + XCTAssertTrue(count == 1); + + // disable, second call is ignored + logger.loggingEnabled = NO; + [logger logError:@"msg" error:nil]; + XCTAssertTrue(count == 1); +} + +- (void)testLogLevel_DebugByDefault { + BranchLogger *logger = [BranchLogger new]; + logger.loggingEnabled = YES; + + __block int count = 0; + logger.logCallback = ^(NSString * _Nonnull message, BranchLogLevel logLevel, NSError * _Nullable error) { + count = count + 1; + }; + + [logger logError:@"msg" error:nil]; + XCTAssertTrue(count == 1); + [logger logWarning:@"msg" error:nil]; + XCTAssertTrue(count == 2); + [logger logDebug:@"msg" error:nil]; + XCTAssertTrue(count == 3); + + // this should be ignored and the counter not incremented + [logger logVerbose:@"msg" error:nil]; + XCTAssertTrue(count == 3); +} + +- (void)testLogLevel_Error { + BranchLogger *logger = [BranchLogger new]; + logger.loggingEnabled = YES; + logger.logLevelThreshold = BranchLogLevelError; + + + __block int count = 0; + logger.logCallback = ^(NSString * _Nonnull message, BranchLogLevel logLevel, NSError * _Nullable error) { + count = count + 1; + }; + + [logger logError:@"msg" error:nil]; + XCTAssertTrue(count == 1); + + // these should be ignored and the counter not incremented + [logger logWarning:@"msg" error:nil]; + XCTAssertTrue(count == 1); + [logger logDebug:@"msg" error:nil]; + XCTAssertTrue(count == 1); + [logger logVerbose:@"msg" error:nil]; + XCTAssertTrue(count == 1); +} + +- (void)testLogLevel_Warning { + BranchLogger *logger = [BranchLogger new]; + logger.loggingEnabled = YES; + logger.logLevelThreshold = BranchLogLevelWarning; + + + __block int count = 0; + logger.logCallback = ^(NSString * _Nonnull message, BranchLogLevel logLevel, NSError * _Nullable error) { + count = count + 1; + }; + + [logger logError:@"msg" error:nil]; + XCTAssertTrue(count == 1); + [logger logWarning:@"msg" error:nil]; + XCTAssertTrue(count == 2); + + // this should be ignored and the counter not incremented + [logger logDebug:@"msg" error:nil]; + XCTAssertTrue(count == 2); + [logger logVerbose:@"msg" error:nil]; + XCTAssertTrue(count == 2); +} + +- (void)testLogLevel_Verbose { + BranchLogger *logger = [BranchLogger new]; + logger.loggingEnabled = YES; + logger.logLevelThreshold = BranchLogLevelVerbose; + + + __block int count = 0; + logger.logCallback = ^(NSString * _Nonnull message, BranchLogLevel logLevel, NSError * _Nullable error) { + count = count + 1; + }; + + [logger logError:@"msg" error:nil]; + XCTAssertTrue(count == 1); + [logger logWarning:@"msg" error:nil]; + XCTAssertTrue(count == 2); + [logger logDebug:@"msg" error:nil]; + XCTAssertTrue(count == 3); + [logger logVerbose:@"msg" error:nil]; + XCTAssertTrue(count == 4); +} + +- (void)testLogFormat_Default { + BranchLogger *logger = [BranchLogger new]; + logger.loggingEnabled = YES; + + logger.logCallback = ^(NSString * _Nonnull message, BranchLogLevel logLevel, NSError * _Nullable error) { + NSString *expectedMessage = @"[BranchLoggerTests testLogFormat_Default] msg"; + + XCTAssertTrue([expectedMessage isEqualToString:message]); + XCTAssertTrue(logLevel == BranchLogLevelError); + XCTAssertNil(error); + }; + + [logger logError:@"msg" error:nil]; +} + +- (void)testLogFormat_NSError { + __block NSError *originalError = [NSError errorWithDomain:@"com.domain.test" code:200 userInfo:@{@"Error Message": @"Test Error"}]; + + BranchLogger *logger = [BranchLogger new]; + logger.loggingEnabled = YES; + + logger.logCallback = ^(NSString * _Nonnull message, BranchLogLevel logLevel, NSError * _Nullable error) { + NSString *expectedMessage = @"[BranchLoggerTests testLogFormat_NSError] msg"; + + XCTAssertTrue([expectedMessage isEqualToString:message]); + XCTAssertTrue(logLevel == BranchLogLevelError); + XCTAssertTrue(originalError == error); + }; + + [logger logError:@"msg" error:originalError]; +} + +- (void)testLogFormat_includeCallerDetailsNO { + BranchLogger *logger = [BranchLogger new]; + logger.loggingEnabled = YES; + logger.includeCallerDetails = NO; + + logger.logCallback = ^(NSString * _Nonnull message, BranchLogLevel logLevel, NSError * _Nullable error) { + NSString *expectedMessage = @"msg"; + + XCTAssertTrue([expectedMessage isEqualToString:message]); + XCTAssertTrue(logLevel == BranchLogLevelError); + XCTAssertNil(error); + }; + + [logger logError:@"msg" error:nil]; +} + +- (void)testLogFormat_includeCallerDetailsNO_NSError { + __block NSError *originalError = [NSError errorWithDomain:@"com.domain.test" code:200 userInfo:@{@"Error Message": @"Test Error"}]; + + BranchLogger *logger = [BranchLogger new]; + logger.loggingEnabled = YES; + logger.includeCallerDetails = NO; + + logger.logCallback = ^(NSString * _Nonnull message, BranchLogLevel logLevel, NSError * _Nullable error) { + NSString *expectedMessage = @"msg"; + + XCTAssertTrue([expectedMessage isEqualToString:message]); + XCTAssertTrue(logLevel == BranchLogLevelError); + XCTAssertTrue(originalError == error); + }; + + [logger logError:@"msg" error:originalError]; +} + +- (void)testDefaultBranchLogFormat { + NSError *error = [NSError errorWithDomain:@"com.domain.test" code:200 userInfo:@{@"Error Message": @"Test Error"}]; + + NSString *expectedMessage = @"[BranchSDK][Error]msg NSError: Error Domain=com.domain.test Code=200 \"(null)\" UserInfo={Error Message=Test Error}"; + NSString *formattedMessage = [BranchLogger formatMessage:@"msg" logLevel:BranchLogLevelError error:error]; + + XCTAssertTrue([expectedMessage isEqualToString:formattedMessage]); +} + +@end diff --git a/Branch-TestBed/Branch-SDK-Tests/BranchNetworkScenario.Test.m b/Branch-TestBed/Branch-SDK-Tests/BranchNetworkScenario.Test.m deleted file mode 100644 index b635f95dd..000000000 --- a/Branch-TestBed/Branch-SDK-Tests/BranchNetworkScenario.Test.m +++ /dev/null @@ -1,176 +0,0 @@ -// -// BranchNetworkScenarioTests.m -// Branch-TestBed -// -// Created by Graham Mueller on 4/20/15. -// Copyright (c) 2015 Branch Metrics. All rights reserved. -// - - -#import -#import "BNCTestCase.h" -#import "Branch.h" -#import "BNCServerRequestQueue.h" -#import "BNCPreferenceHelper.h" -#import "NSError+Branch.h" -#import "BranchOpenRequest.h" - - -@interface Branch (Testing) -@property (strong, nonatomic) BNCServerInterface *serverInterface; -@property (assign, nonatomic) NSInteger networkCount; -@end - - -@interface BranchNetworkScenarioTests : BNCTestCase -@property (assign, nonatomic) BOOL hasExceededExpectations; -@end - - -@implementation BranchNetworkScenarioTests - -#pragma mark - Scenario 8 -// Somehow, betweeen initSession and the next call, all preference items are cleared. -// Shouldn't crash in this case, but can't do much besides "you need to re-init" -- (void)testScenario8 { - sleep(1); - BNCPreferenceHelper *preferenceHelper = [[BNCPreferenceHelper alloc] init]; - id serverInterfaceMock = OCMClassMock([BNCServerInterface class]); - - Branch *branch = - [[Branch alloc] - initWithInterface:serverInterfaceMock - queue:[[BNCServerRequestQueue alloc] init] - cache:[[BNCLinkCache alloc] init] - preferenceHelper:preferenceHelper - key:@"key_live"]; - - XCTestExpectation *expecation = [self expectationWithDescription:@"Scenario8 Expectation"]; - [self initSessionExpectingSuccess:branch serverInterface:serverInterfaceMock callback:^{ - preferenceHelper.sessionID = nil; - preferenceHelper.randomizedDeviceToken = nil; - - [branch getShortURLWithCallback:^(NSString *url, NSError *error) { - XCTAssertNotNil(error); - XCTAssertEqual(error.code, BNCInitError); - [self safelyFulfillExpectation:expecation]; - }]; - }]; - - [self awaitExpectations]; -} - -#pragma mark - Internals - -- (void)initSessionExpectingSuccess:(Branch *)branch - serverInterface:(id)serverInterfaceMock - callback:(void (^)(void))callback { - [self mockSuccesfulInit:serverInterfaceMock]; - [branch initSessionWithLaunchOptions:@{} - andRegisterDeepLinkHandler:[self callbackExpectingSuccess:callback]]; -} - -- (void)initSessionExpectingFailure:(Branch *)branch - serverInterface:(id)serverInterfaceMock - callback:(void (^)(void))callback { - __block BNCServerCallback openOrInstallCallback; - id openOrInstallCallbackCheckBlock = [OCMArg checkWithBlock:^BOOL(BNCServerCallback callback) { - openOrInstallCallback = callback; - return YES; - }]; - - id openOrInstallInvocation = ^(NSInvocation *invocation) { - openOrInstallCallback(nil, [NSError errorWithDomain:NSURLErrorDomain code:-1004 userInfo:nil]); - }; - - id openOrInstallUrlCheckBlock = [OCMArg checkWithBlock:^BOOL(NSString *url) { - return [url rangeOfString:@"open"].location != NSNotFound || [url rangeOfString:@"install"].location != NSNotFound; - }]; - - [[[serverInterfaceMock stub] - andDo:openOrInstallInvocation] - postRequest:[OCMArg any] - url:openOrInstallUrlCheckBlock - key:[OCMArg any] - callback:openOrInstallCallbackCheckBlock]; - - [branch initSessionWithLaunchOptions:@{} andRegisterDeepLinkHandler:[self callbackExpectingFailure:callback]]; -} - - -#pragma mark - Callbacks - -- (callbackWithParams)callbackExpectingSuccess:(void (^)(void))callback { - __block BOOL initCalled = NO; - return ^(NSDictionary *params, NSError *error) { - XCTAssertNil(error); - if (!initCalled && callback) { - initCalled = YES; - callback(); - } - }; -} - -- (callbackWithParams)callbackExpectingFailure:(void (^)(void))callback { - __block BOOL initCalled = NO; - return ^(NSDictionary *params, NSError *error) { - XCTAssertNotNil(error); - - if (!initCalled && callback) { - initCalled = YES; - callback(); - } - }; -} - -#pragma mark - Init mocking - -- (void)mockSuccesfulInit:(id)serverInterfaceMock { - BNCServerResponse *openInstallResponse = [[BNCServerResponse alloc] init]; - openInstallResponse.data = @{ - @"session_id": @"11111", - @"randomized_bundle_token": @"22222", - @"randomized_device_token": @"ae5adt6lkj08", - @"link": @"https://bnc.lt/i/11111" - }; - - __block BNCServerCallback openOrInstallCallback; - id openOrInstallCallbackCheckBlock = [OCMArg checkWithBlock:^BOOL(BNCServerCallback callback) { - openOrInstallCallback = callback; - return YES; - }]; - - id openOrInstallInvocation = ^(NSInvocation *invocation) { - openOrInstallCallback(openInstallResponse, nil); - }; - - id openOrInstallUrlCheckBlock = [OCMArg checkWithBlock:^BOOL(NSString *url) { - return [url rangeOfString:@"open"].location != NSNotFound || - [url rangeOfString:@"install"].location != NSNotFound; - }]; - - [[[serverInterfaceMock stub] - andDo:openOrInstallInvocation] - postRequest:[OCMArg any] - url:openOrInstallUrlCheckBlock - key:[OCMArg any] - callback:openOrInstallCallbackCheckBlock]; -} - -- (void)safelyFulfillExpectation:(XCTestExpectation *)expectation { - if (!self.hasExceededExpectations) { - [expectation fulfill]; - } -} - -- (void)awaitExpectations { - NSTimeInterval timeoutInterval = 5.0; - if ([UIDevice currentDevice].systemVersion.floatValue < 9.0) { - timeoutInterval = 10.0; - } - [self waitForExpectationsWithTimeout:timeoutInterval handler:^(NSError *error) { - self.hasExceededExpectations = YES; - }]; -} - -@end diff --git a/Branch-TestBed/Branch-SDK-Tests/BranchOpenRequestTests.m b/Branch-TestBed/Branch-SDK-Tests/BranchOpenRequestTests.m deleted file mode 100644 index b5059db9d..000000000 --- a/Branch-TestBed/Branch-SDK-Tests/BranchOpenRequestTests.m +++ /dev/null @@ -1,391 +0,0 @@ -// -// BranchOpenRequestTests.m -// Branch-TestBed -// -// Created by Graham Mueller on 6/19/15. -// Copyright (c) 2015 Branch Metrics. All rights reserved. -// - -#import "BNCTestCase.h" -#import "Branch.h" -#import "BNCLog.h" -#import "BNCApplication+BNCTest.h" -#import "BranchOpenRequest.h" -#import "BranchConstants.h" -#import "BNCPreferenceHelper.h" -#import -#import "BNCPreferenceHelper.h" -#import "BNCEncodingUtils.h" -#import "BNCSystemObserver.h" - -@interface BranchOpenRequestTests : BNCTestCase -@end - -@implementation BranchOpenRequestTests - -- (void)setUp { - [super setUp]; - BNCPreferenceHelper *preferenceHelper = [BNCPreferenceHelper sharedInstance]; - preferenceHelper.installParams = nil; - preferenceHelper.randomizedBundleToken = nil; - [preferenceHelper saveContentAnalyticsManifest:nil]; - [preferenceHelper synchronize]; -} - -- (void)testSuccessWithAllKeysAndIsReferrable { - NSString * const DEVICE_TOKEN = @"foo-token"; - NSString * const USER_URL = @"http://foo"; - NSString * const DEVELOPER_ID = @"foo"; - NSString * const SESSION_ID = @"foo-session"; - NSString * const SESSION_PARAMS = @"{\"+clicked_branch_link\":1,\"foo\":\"bar\"}"; - NSString * const RANDOMIZED_BUNDLE_TOKEN = @"branch-id"; - - BNCServerResponse *response = [[BNCServerResponse alloc] init]; - response.data = @{ - BRANCH_RESPONSE_KEY_RANDOMIZED_DEVICE_TOKEN: DEVICE_TOKEN, - BRANCH_RESPONSE_KEY_USER_URL: USER_URL, - BRANCH_RESPONSE_KEY_DEVELOPER_IDENTITY: DEVELOPER_ID, - BRANCH_RESPONSE_KEY_SESSION_ID: SESSION_ID, - BRANCH_RESPONSE_KEY_SESSION_DATA: SESSION_PARAMS, - BRANCH_RESPONSE_KEY_RANDOMIZED_BUNDLE_TOKEN: RANDOMIZED_BUNDLE_TOKEN - }; - - BNCPreferenceHelper *preferenceHelper = [BNCPreferenceHelper sharedInstance]; - - XCTestExpectation *openExpectation = [self expectationWithDescription:@"OpenRequest Expectation"]; - BranchOpenRequest *request = [[BranchOpenRequest alloc] initWithCallback:^(BOOL success, NSError *error) { - XCTAssertNil(error); - XCTAssertTrue(success); - [self safelyFulfillExpectation:openExpectation]; - } isInstall:TRUE]; - - [request processResponse:response error:nil]; - - [self awaitExpectations]; - - XCTAssertEqualObjects(preferenceHelper.randomizedDeviceToken, DEVICE_TOKEN); - XCTAssertEqualObjects(preferenceHelper.userUrl, USER_URL); - XCTAssertEqualObjects(preferenceHelper.userIdentity, DEVELOPER_ID); - XCTAssertEqualObjects(preferenceHelper.sessionID, SESSION_ID); - XCTAssertEqualObjects(preferenceHelper.sessionParams, SESSION_PARAMS); - XCTAssertEqualObjects(preferenceHelper.installParams, SESSION_PARAMS); - XCTAssertEqualObjects(preferenceHelper.randomizedBundleToken, RANDOMIZED_BUNDLE_TOKEN); - XCTAssertNil(preferenceHelper.linkClickIdentifier); -} - -- (void)testSuccessWithAllKeysAndIsNotReferrable { - NSString * const DEVICE_TOKEN = @"foo-token"; - NSString * const USER_URL = @"http://foo"; - NSString * const DEVELOPER_ID = @"foo"; - NSString * const SESSION_ID = @"foo-session"; - NSString * const SESSION_PARAMS = @"{\"foo\":\"bar\"}"; - NSString * const INSTALL_PARAMS = @"{\"bar\":\"foo\"}"; - NSString * const IDENTITY = @"branch-id"; - - BNCServerResponse *response = [[BNCServerResponse alloc] init]; - response.data = @{ - BRANCH_RESPONSE_KEY_RANDOMIZED_DEVICE_TOKEN: DEVICE_TOKEN, - BRANCH_RESPONSE_KEY_USER_URL: USER_URL, - BRANCH_RESPONSE_KEY_DEVELOPER_IDENTITY: DEVELOPER_ID, - BRANCH_RESPONSE_KEY_SESSION_ID: SESSION_ID, - BRANCH_RESPONSE_KEY_SESSION_DATA: SESSION_PARAMS, - BRANCH_RESPONSE_KEY_RANDOMIZED_BUNDLE_TOKEN: IDENTITY - }; - - BNCPreferenceHelper *preferenceHelper = [BNCPreferenceHelper sharedInstance]; - preferenceHelper.installParams = INSTALL_PARAMS; - - XCTestExpectation *openExpectation = [self expectationWithDescription:@"OpenRequest Expectation"]; - BranchOpenRequest *request = [[BranchOpenRequest alloc] initWithCallback:^(BOOL success, NSError *error) { - XCTAssertNil(error); - XCTAssertTrue(success); - [self safelyFulfillExpectation:openExpectation]; - }]; - - [request processResponse:response error:nil]; - - [self awaitExpectations]; - - XCTAssertEqualObjects(preferenceHelper.randomizedDeviceToken, DEVICE_TOKEN); - XCTAssertEqualObjects(preferenceHelper.userUrl, USER_URL); - XCTAssertEqualObjects(preferenceHelper.userIdentity, DEVELOPER_ID); - XCTAssertEqualObjects(preferenceHelper.sessionID, SESSION_ID); - XCTAssertEqualObjects(preferenceHelper.sessionParams, SESSION_PARAMS); - XCTAssertEqualObjects(preferenceHelper.installParams, INSTALL_PARAMS); - XCTAssertEqualObjects(preferenceHelper.randomizedBundleToken, IDENTITY); - XCTAssertNil(preferenceHelper.linkClickIdentifier); -} - -- (void)testSuccessWithNoSessionParamsAndIsNotReferrable { - NSString * const DEVICE_TOKEN = @"foo-token"; - NSString * const USER_URL = @"http://foo"; - NSString * const DEVELOPER_ID = @"foo"; - NSString * const SESSION_ID = @"foo-session"; - NSString * const INSTALL_PARAMS = @"{\"bar\":\"foo\"}"; - NSString * const IDENTITY = @"branch-id"; - - BNCServerResponse *response = [[BNCServerResponse alloc] init]; - response.data = @{ - BRANCH_RESPONSE_KEY_RANDOMIZED_DEVICE_TOKEN: DEVICE_TOKEN, - BRANCH_RESPONSE_KEY_USER_URL: USER_URL, - BRANCH_RESPONSE_KEY_DEVELOPER_IDENTITY: DEVELOPER_ID, - BRANCH_RESPONSE_KEY_SESSION_ID: SESSION_ID, - BRANCH_RESPONSE_KEY_RANDOMIZED_BUNDLE_TOKEN: IDENTITY - }; - - BNCPreferenceHelper *preferenceHelper = [BNCPreferenceHelper sharedInstance]; - preferenceHelper.installParams = INSTALL_PARAMS; - - XCTestExpectation *openExpectation = [self expectationWithDescription:@"OpenRequest Expectation"]; - BranchOpenRequest *request = [[BranchOpenRequest alloc] initWithCallback:^(BOOL success, NSError *error) { - XCTAssertNil(error); - XCTAssertTrue(success); - [self safelyFulfillExpectation:openExpectation]; - }]; - - [request processResponse:response error:nil]; - - [self awaitExpectations]; - - XCTAssertEqualObjects(preferenceHelper.randomizedDeviceToken, DEVICE_TOKEN); - XCTAssertEqualObjects(preferenceHelper.userUrl, USER_URL); - XCTAssertEqualObjects(preferenceHelper.userIdentity, DEVELOPER_ID); - XCTAssertEqualObjects(preferenceHelper.sessionID, SESSION_ID); - XCTAssertEqualObjects(preferenceHelper.installParams, INSTALL_PARAMS); - XCTAssertEqualObjects(preferenceHelper.randomizedBundleToken, IDENTITY); - XCTAssertNil(preferenceHelper.sessionParams); - XCTAssertNil(preferenceHelper.linkClickIdentifier); -} - -- (void)testSuccessWithNoSessionParamsAndIsReferrableAndAllowToBeClearIsNotSet { - NSString * const DEVICE_TOKEN = @"foo-token"; - NSString * const USER_URL = @"http://foo"; - NSString * const DEVELOPER_ID = @"foo"; - NSString * const SESSION_ID = @"foo-session"; - NSString * const INSTALL_PARAMS = @"{\"bar\":\"foo\"}"; - NSString * const IDENTITY = @"branch-id"; - - BNCServerResponse *response = [[BNCServerResponse alloc] init]; - response.data = @{ - BRANCH_RESPONSE_KEY_RANDOMIZED_DEVICE_TOKEN: DEVICE_TOKEN, - BRANCH_RESPONSE_KEY_USER_URL: USER_URL, - BRANCH_RESPONSE_KEY_DEVELOPER_IDENTITY: DEVELOPER_ID, - BRANCH_RESPONSE_KEY_SESSION_ID: SESSION_ID, - BRANCH_RESPONSE_KEY_RANDOMIZED_BUNDLE_TOKEN: IDENTITY - }; - - BNCPreferenceHelper *preferenceHelper = [BNCPreferenceHelper sharedInstance]; - preferenceHelper.installParams = INSTALL_PARAMS; - - XCTestExpectation *openExpectation = [self expectationWithDescription:@"OpenRequest Expectation"]; - BranchOpenRequest *request = [[BranchOpenRequest alloc] initWithCallback:^(BOOL success, NSError *error) { - XCTAssertNil(error); - XCTAssertTrue(success); - [self safelyFulfillExpectation:openExpectation]; - }]; - - [request processResponse:response error:nil]; - - [self awaitExpectations]; - - XCTAssertEqualObjects(preferenceHelper.randomizedDeviceToken, DEVICE_TOKEN); - XCTAssertEqualObjects(preferenceHelper.userUrl, USER_URL); - XCTAssertEqualObjects(preferenceHelper.userIdentity, DEVELOPER_ID); - XCTAssertEqualObjects(preferenceHelper.sessionID, SESSION_ID); - XCTAssertEqualObjects(preferenceHelper.installParams, INSTALL_PARAMS); - XCTAssertEqualObjects(preferenceHelper.randomizedBundleToken, IDENTITY); - XCTAssertNil(preferenceHelper.sessionParams); - XCTAssertNil(preferenceHelper.linkClickIdentifier); -} - -- (void)testSuccessWithNoSessionParamsAndIsReferrableAndAllowToBeClearIsSet { - NSString * const DEVICE_TOKEN = @"foo-token"; - NSString * const USER_URL = @"http://foo"; - NSString * const DEVELOPER_ID = @"foo"; - NSString * const SESSION_ID = @"foo-session"; - NSString * const IDENTITY = @"branch-id"; - - BNCServerResponse *response = [[BNCServerResponse alloc] init]; - response.data = @{ - BRANCH_RESPONSE_KEY_RANDOMIZED_DEVICE_TOKEN: DEVICE_TOKEN, - BRANCH_RESPONSE_KEY_USER_URL: USER_URL, - BRANCH_RESPONSE_KEY_DEVELOPER_IDENTITY: DEVELOPER_ID, - BRANCH_RESPONSE_KEY_SESSION_ID: SESSION_ID, - BRANCH_RESPONSE_KEY_RANDOMIZED_BUNDLE_TOKEN: IDENTITY - }; - - BNCPreferenceHelper *preferenceHelper = [BNCPreferenceHelper sharedInstance]; - - XCTestExpectation *openExpectation = [self expectationWithDescription:@"OpenRequest Expectation"]; - BranchOpenRequest *request = [[BranchOpenRequest alloc] initWithCallback:^(BOOL success, NSError *error) { - XCTAssertNil(error); - XCTAssertTrue(success); - [self safelyFulfillExpectation:openExpectation]; - } isInstall:NO]; - - [request processResponse:response error:nil]; - - [self awaitExpectations]; - - XCTAssertEqualObjects(preferenceHelper.randomizedDeviceToken, DEVICE_TOKEN); - XCTAssertEqualObjects(preferenceHelper.userUrl, USER_URL); - XCTAssertEqualObjects(preferenceHelper.userIdentity, DEVELOPER_ID); - XCTAssertEqualObjects(preferenceHelper.sessionID, SESSION_ID); - XCTAssertEqualObjects(preferenceHelper.randomizedBundleToken, IDENTITY); - XCTAssertNil(preferenceHelper.sessionParams); - XCTAssertNil(preferenceHelper.linkClickIdentifier); - XCTAssertNil(preferenceHelper.installParams); -} - -- (void)testOpenWhenReferrableAndNoInstallParamsAndNonNullData { - BNCPreferenceHelper *preferenceHelper = [BNCPreferenceHelper sharedInstance]; - - NSString * const OPEN_PARAMS = @"{\"+clicked_branch_link\":1,\"foo\":\"bar\"}"; - - XCTestExpectation *expectation = [self expectationWithDescription:@"Request Expectation"]; - BranchOpenRequest *request = [[BranchOpenRequest alloc] initWithCallback:^(BOOL changed, NSError *error) { - XCTAssertNil(error); - XCTAssertEqualObjects(preferenceHelper.installParams, OPEN_PARAMS); - - [self safelyFulfillExpectation:expectation]; - } isInstall:TRUE]; - - BNCServerResponse *response = [[BNCServerResponse alloc] init]; - response.data = @{ BRANCH_RESPONSE_KEY_SESSION_DATA: OPEN_PARAMS }; - [request processResponse:response error:nil]; - - [self awaitExpectations]; -} - -- (void)testOpenWhenReferrableAndNoInstallParamsAndNullData { - BNCPreferenceHelper *preferenceHelper = [BNCPreferenceHelper sharedInstance]; - - XCTestExpectation *expectation = [self expectationWithDescription:@"Request Expectation"]; - BranchOpenRequest *request = [[BranchOpenRequest alloc] initWithCallback:^(BOOL changed, NSError *error) { - XCTAssertNil(error); - XCTAssertNil(preferenceHelper.installParams); - - [self safelyFulfillExpectation:expectation]; - }]; - - BNCServerResponse *response = [[BNCServerResponse alloc] init]; - response.data = @{ }; - [request processResponse:response error:nil]; - - [self awaitExpectations]; -} - -- (void)testOpenWhenReferrableAndNoInstallParamsAndNonLinkClickData { - BNCPreferenceHelper *preferenceHelper = [BNCPreferenceHelper sharedInstance]; - - NSString * const OPEN_PARAMS = @"{\"+clicked_branch_link\":0}"; - - XCTestExpectation *expectation = [self expectationWithDescription:@"Request Expectation"]; - BranchOpenRequest *request = [[BranchOpenRequest alloc] initWithCallback:^(BOOL changed, NSError *error) { - XCTAssertNil(error); - XCTAssertNil(preferenceHelper.installParams); - - [self safelyFulfillExpectation:expectation]; - }]; - - BNCServerResponse *response = [[BNCServerResponse alloc] init]; - response.data = @{ BRANCH_RESPONSE_KEY_SESSION_DATA: OPEN_PARAMS }; - [request processResponse:response error:nil]; - - [self awaitExpectations]; -} - -- (void)testOpenWhenReferrableAndInstallParams { - BNCPreferenceHelper *preferenceHelper = [BNCPreferenceHelper sharedInstance]; - - NSString * const INSTALL_PARAMS = @"{\"+clicked_branch_link\":1,\"foo\":\"bar\"}"; - NSString * const OPEN_PARAMS = @"{\"+clicked_branch_link\":1,\"bar\":\"foo\"}"; - - preferenceHelper.installParams = INSTALL_PARAMS; - - XCTestExpectation *expectation = [self expectationWithDescription:@"Request Expectation"]; - BranchOpenRequest *request = [[BranchOpenRequest alloc] initWithCallback:^(BOOL changed, NSError *error) { - XCTAssertNil(error); - XCTAssertEqualObjects(preferenceHelper.installParams, INSTALL_PARAMS); - - [self safelyFulfillExpectation:expectation]; - }]; - - BNCServerResponse *response = [[BNCServerResponse alloc] init]; - response.data = @{ BRANCH_RESPONSE_KEY_SESSION_DATA: OPEN_PARAMS }; - [request processResponse:response error:nil]; - - [self awaitExpectations]; -} - -- (void)testOpenWhenNotReferrable { - // 'isReferrable' seems to be an empty concept in iOS. - // It is in the code but not used. -- Edward. - - BNCPreferenceHelper *preferenceHelper = [BNCPreferenceHelper sharedInstance]; - - NSString * const OPEN_PARAMS = @"{\"+clicked_branch_link\":1,\"foo\":\"bar\"}"; - - XCTestExpectation *expectation = [self expectationWithDescription:@"Request Expectation"]; - BranchOpenRequest *request = [[BranchOpenRequest alloc] initWithCallback:^(BOOL changed, NSError *error) { - XCTAssertNil(error); - XCTAssert([preferenceHelper.installParams isEqualToString:OPEN_PARAMS]); - [self safelyFulfillExpectation:expectation]; - } isInstall:TRUE]; - - BNCServerResponse *response = [[BNCServerResponse alloc] init]; - response.data = @{ BRANCH_RESPONSE_KEY_SESSION_DATA: OPEN_PARAMS }; - [request processResponse:response error:nil]; - - [self awaitExpectations]; -} - -- (void)testEmptyResponseFields { - NSString * DEVICE_TOKEN = @"foo-token"; - NSString * USER_URL = @"http://foo"; - NSString * DEVELOPER_ID = @"foo"; - NSString * SESSION_ID = @"foo-session"; - NSString * IDENTITY = @"branch-id"; - - BNCServerResponse *response = [[BNCServerResponse alloc] init]; - response.data = @{ - BRANCH_RESPONSE_KEY_RANDOMIZED_DEVICE_TOKEN: DEVICE_TOKEN, - BRANCH_RESPONSE_KEY_USER_URL: USER_URL, - BRANCH_RESPONSE_KEY_DEVELOPER_IDENTITY: DEVELOPER_ID, - BRANCH_RESPONSE_KEY_SESSION_ID: SESSION_ID, - BRANCH_RESPONSE_KEY_RANDOMIZED_BUNDLE_TOKEN: IDENTITY - }; - - BNCPreferenceHelper *preferenceHelper = [BNCPreferenceHelper sharedInstance]; - - XCTestExpectation *openExpectation = [self expectationWithDescription:@"OpenRequest Expectation"]; - BranchOpenRequest *request = [[BranchOpenRequest alloc] initWithCallback:^(BOOL success, NSError *error) { - XCTAssertNil(error); - XCTAssertTrue(success); - [self safelyFulfillExpectation:openExpectation]; - } isInstall:NO]; - - [request processResponse:response error:nil]; - - [self awaitExpectations]; - - XCTAssertEqualObjects(preferenceHelper.randomizedDeviceToken, DEVICE_TOKEN); - XCTAssertEqualObjects(preferenceHelper.userUrl, USER_URL); - XCTAssertEqualObjects(preferenceHelper.userIdentity, DEVELOPER_ID); - XCTAssertEqualObjects(preferenceHelper.sessionID, SESSION_ID); - XCTAssertEqualObjects(preferenceHelper.randomizedBundleToken, IDENTITY); - XCTAssertNil(preferenceHelper.sessionParams); - XCTAssertNil(preferenceHelper.linkClickIdentifier); - XCTAssertNil(preferenceHelper.installParams); - - // Now call processResponse with empty fields again. - response.data = @{}; - [request processResponse:response error:nil]; - - XCTAssertNotNil(preferenceHelper.randomizedDeviceToken); - XCTAssertNotNil(preferenceHelper.userUrl); - XCTAssertNotNil(preferenceHelper.sessionID); - XCTAssertNotNil(preferenceHelper.randomizedBundleToken); -} - -@end diff --git a/Branch-TestBed/Branch-SDK-Tests/BranchSDKFunctionalityTests.m b/Branch-TestBed/Branch-SDK-Tests/BranchSDKFunctionalityTests.m deleted file mode 100644 index e48b545f3..000000000 --- a/Branch-TestBed/Branch-SDK-Tests/BranchSDKFunctionalityTests.m +++ /dev/null @@ -1,121 +0,0 @@ -// -// Branch_SDK_test.m -// Branch-SDK test -// -// Created by Qinwei Gong on 2/19/15. -// Copyright (c) 2015 Branch Metrics. All rights reserved. -// - -#import "BNCTestCase.h" -#import "Branch.h" - -NSString * const TEST_RANDOMIZED_DEVICE_TOKEN = @"94938498586381084"; -NSString * const TEST_RANDOMIZED_BUNDLE_TOKEN = @"95765863201768032"; -NSString * const TEST_SESSION_ID = @"97141055400444225"; -NSString * const TEST_IDENTITY_LINK = @"https://bnc.lt/i/3N-xr0E-_M"; -NSString * const TEST_NEW_USER_LINK = @"https://bnc.lt/i/2kkbX6k-As"; - -@interface BranchSDKFunctionalityTests : BNCTestCase -@property (assign, nonatomic) BOOL hasExceededExpectations; -@end - -@implementation BranchSDKFunctionalityTests - -- (void)test00OpenOrInstall { - id serverInterfaceMock = OCMClassMock([BNCServerInterface class]); - - BNCPreferenceHelper *preferenceHelper = [BNCPreferenceHelper sharedInstance]; - Branch.branchKey = @"key_live_foo"; - - Branch *branch = - [[Branch alloc] - initWithInterface:serverInterfaceMock - queue:[[BNCServerRequestQueue alloc] init] - cache:[[BNCLinkCache alloc] init] - preferenceHelper:preferenceHelper - key:@"key_live_foo"]; - - BNCServerResponse *openInstallResponse = [[BNCServerResponse alloc] init]; - openInstallResponse.data = @{ - @"randomized_device_token": TEST_RANDOMIZED_DEVICE_TOKEN, - @"randomized_bundle_token": TEST_RANDOMIZED_BUNDLE_TOKEN, - @"link": TEST_IDENTITY_LINK, - @"session_id": TEST_SESSION_ID - }; - - __block BNCServerCallback openOrInstallCallback; - id openOrInstallCallbackCheckBlock = [OCMArg checkWithBlock:^BOOL(BNCServerCallback callback) { - openOrInstallCallback = callback; - return YES; - }]; - - id openOrInstallInvocation = ^(NSInvocation *invocation) { - openOrInstallCallback(openInstallResponse, nil); - }; - - id openOrInstallUrlCheckBlock = [OCMArg checkWithBlock:^BOOL(NSString *url) { - return [url rangeOfString:@"open"].location != NSNotFound || [url rangeOfString:@"install"].location != NSNotFound; - }]; - [[[serverInterfaceMock expect] - andDo:openOrInstallInvocation] - postRequest:[OCMArg any] - url:openOrInstallUrlCheckBlock - key:[OCMArg any] - callback:openOrInstallCallbackCheckBlock]; - - XCTestExpectation *openExpectation = [self expectationWithDescription:@"Test open"]; - [branch initSessionWithLaunchOptions:@{} andRegisterDeepLinkHandler:^(NSDictionary *params, NSError *error) { - XCTAssertNil(error); - XCTAssertEqualObjects(preferenceHelper.sessionID, TEST_SESSION_ID); - [openExpectation fulfill]; - }]; - - [self waitForExpectationsWithTimeout:2 handler:NULL]; -} - -#pragma mark - Test Utility - -- (void)safelyFulfillExpectation:(XCTestExpectation *)expectation { - if (!self.hasExceededExpectations) { - [expectation fulfill]; - } -} - -- (void)awaitExpectations { - [self waitForExpectationsWithTimeout:6.0 handler:^(NSError *error) { - self.hasExceededExpectations = YES; - }]; -} - -- (void)setupDefaultStubsForServerInterfaceMock:(id)serverInterfaceMock { - BNCServerResponse *openInstallResponse = [[BNCServerResponse alloc] init]; - openInstallResponse.data = @{ - @"session_id": TEST_SESSION_ID, - @"randomized_bundle_token": TEST_RANDOMIZED_BUNDLE_TOKEN, - @"randomized_device_token": TEST_RANDOMIZED_DEVICE_TOKEN, - }; - - // Stub open / install - __block BNCServerCallback openOrInstallCallback; - id openOrInstallCallbackCheckBlock = [OCMArg checkWithBlock:^BOOL(BNCServerCallback callback) { - openOrInstallCallback = callback; - return YES; - }]; - - id openOrInstallInvocation = ^(NSInvocation *invocation) { - openOrInstallCallback(openInstallResponse, nil); - }; - - id openOrInstallUrlCheckBlock = [OCMArg checkWithBlock:^BOOL(NSString *url) { - return [url rangeOfString:@"open"].location != NSNotFound || - [url rangeOfString:@"install"].location != NSNotFound; - }]; - [[[serverInterfaceMock expect] - andDo:openOrInstallInvocation] - postRequest:[OCMArg any] - url:openOrInstallUrlCheckBlock - key:[OCMArg any] - callback:openOrInstallCallbackCheckBlock]; -} - -@end diff --git a/Branch-TestBed/Branch-SDK-Tests/BranchSetIdentityTests.m b/Branch-TestBed/Branch-SDK-Tests/BranchSetIdentityTests.m deleted file mode 100644 index 21516c288..000000000 --- a/Branch-TestBed/Branch-SDK-Tests/BranchSetIdentityTests.m +++ /dev/null @@ -1,70 +0,0 @@ -// -// BranchSetIdentityRequestTests.m -// Branch-TestBed -// -// Created by Graham Mueller on 6/10/15. -// Copyright (c) 2015 Branch Metrics. All rights reserved. -// - -#import "BNCTestCase.h" -#import "BranchConstants.h" -#import "BNCPreferenceHelper.h" -#import "Branch.h" -#import - -static NSString * const IDENTITY_TEST_USER_ID = @"foo_id"; - -@interface BranchSetIdentityTests : BNCTestCase -@end - -@implementation BranchSetIdentityTests - -#pragma mark - setIdentity Tests -- (void)testSetIdentityWithCallback { - Branch *branch = [Branch getInstance]; - [branch logoutWithCallback:^(BOOL changed, NSError * _Nullable error) { - BNCPreferenceHelper *preferenceHelper = [BNCPreferenceHelper sharedInstance]; - - XCTestExpectation *expectation = [self expectationWithDescription:@"setIdentity callback is called"]; - - [branch setIdentity:@"testUserIdWithCallback" withCallback:^(NSDictionary *params, NSError *error) { - XCTAssertEqualObjects(@"testUserIdWithCallback", preferenceHelper.userIdentity); - [expectation fulfill]; - }]; - - [self waitForExpectationsWithTimeout:5 handler:nil]; - }]; -} - -- (void)testSetIdentityWithNilUserId { - Branch *branch = [Branch getInstance]; - [branch logoutWithCallback:^(BOOL changed, NSError * _Nullable error) { - BNCPreferenceHelper *preferenceHelper = [BNCPreferenceHelper sharedInstance]; - - XCTestExpectation *expectation = [self expectationWithDescription:@"setIdentityWithNil callback is called"]; - - [branch setIdentity:nil withCallback:^(NSDictionary *params, NSError *error) { - XCTAssertNil(preferenceHelper.userIdentity); - [expectation fulfill]; - }]; - - [self waitForExpectationsWithTimeout:5 handler:nil]; - }]; - - -} - -- (void)testSetIdentityWithUserId { - Branch *branch = [Branch getInstance]; - [branch logoutWithCallback:^(BOOL changed, NSError * _Nullable error) { - BNCPreferenceHelper *preferenceHelper = [BNCPreferenceHelper sharedInstance]; - - NSString *testUserId = @"testUserId"; - [branch setIdentity:testUserId withCallback:nil]; - - XCTAssertEqualObjects(@"testUserId", preferenceHelper.userIdentity); - }]; - -} - -@end diff --git a/Branch-TestBed/Branch-SDK-Tests/BranchShortUrlRequestTests.m b/Branch-TestBed/Branch-SDK-Tests/BranchShortUrlRequestTests.m deleted file mode 100644 index 5c3489459..000000000 --- a/Branch-TestBed/Branch-SDK-Tests/BranchShortUrlRequestTests.m +++ /dev/null @@ -1,252 +0,0 @@ -// -// BranchShortUrlRequestTests.m -// Branch-TestBed -// -// Created by Graham Mueller on 6/12/15. -// Copyright (c) 2015 Branch Metrics. All rights reserved. -// - -#import "BNCTestCase.h" -#import "BranchShortUrlRequest.h" -#import "BranchConstants.h" -#import "BNCPreferenceHelper.h" -#import -#import "BNCPreferenceHelper.h" -#import "BNCEncodingUtils.h" - -@interface BranchShortUrlRequestTests : BNCTestCase -@end - -@implementation BranchShortUrlRequestTests - -- (void)testRequestBody { - NSArray * const TAGS = @[]; - NSString * const ALIAS = @"foo-alias"; - BranchLinkType const LINK_TYPE = BranchLinkTypeOneTimeUse; - NSInteger const DURATION = 1; - NSString * const CHANNEL = @"foo-channel"; - NSString * const FEATURE = @"foo-feature"; - NSString * const STAGE = @"foo-stage"; - NSString * const CAMPAIGN = @"foo-campaign"; - NSDictionary * const PARAMS = @{}; - BNCLinkData * const LINK_DATA = [[BNCLinkData alloc] init]; - BNCLinkCache * const LINK_CACHE = [[BNCLinkCache alloc] init]; - - [LINK_DATA setupType:LINK_TYPE]; - [LINK_DATA setupTags:TAGS]; - [LINK_DATA setupChannel:CHANNEL]; - [LINK_DATA setupFeature:FEATURE]; - [LINK_DATA setupStage:STAGE]; - [LINK_DATA setupAlias:ALIAS]; - [LINK_DATA setupMatchDuration:DURATION]; - [LINK_DATA setupParams:PARAMS]; - - BNCPreferenceHelper *preferenceHelper = [BNCPreferenceHelper sharedInstance]; - NSMutableDictionary * const expectedParams = NSMutableDictionary.new; - expectedParams[BRANCH_REQUEST_KEY_SESSION_ID] = preferenceHelper.sessionID; - expectedParams[BRANCH_REQUEST_KEY_RANDOMIZED_BUNDLE_TOKEN] = preferenceHelper.randomizedBundleToken; - expectedParams[BRANCH_REQUEST_KEY_RANDOMIZED_DEVICE_TOKEN] = preferenceHelper.randomizedDeviceToken; - expectedParams[BRANCH_REQUEST_KEY_URL_ALIAS] = ALIAS; - expectedParams[BRANCH_REQUEST_KEY_URL_CHANNEL] = CHANNEL; - expectedParams[BRANCH_REQUEST_KEY_URL_DATA] = PARAMS; - expectedParams[BRANCH_REQUEST_KEY_URL_DURATION] = @(DURATION); - expectedParams[BRANCH_REQUEST_KEY_URL_FEATURE] = FEATURE; - expectedParams[BRANCH_REQUEST_KEY_URL_LINK_TYPE] = @(LINK_TYPE); - expectedParams[BRANCH_REQUEST_KEY_URL_SOURCE] = @"ios"; - expectedParams[BRANCH_REQUEST_KEY_URL_STAGE] = STAGE; - expectedParams[BRANCH_REQUEST_KEY_URL_TAGS] = TAGS; - - BranchShortUrlRequest *request = - [[BranchShortUrlRequest alloc] - initWithTags:TAGS - alias:ALIAS - type:LINK_TYPE - matchDuration:DURATION - channel:CHANNEL - feature:FEATURE - stage:STAGE - campaign:CAMPAIGN - params:PARAMS - linkData:LINK_DATA - linkCache:LINK_CACHE - callback:NULL]; - - id serverInterfaceMock = OCMClassMock([BNCServerInterface class]); - [[serverInterfaceMock expect] - postRequest:expectedParams - url:[self stringMatchingPattern:BRANCH_REQUEST_ENDPOINT_GET_SHORT_URL] - key:[OCMArg any] - callback:[OCMArg any]]; - - [request makeRequest:serverInterfaceMock key:nil callback:NULL]; - [serverInterfaceMock verify]; -} - -- (void)testRequestBodyWhenOptionalValuesArentProvided { - BranchLinkType const LINK_TYPE = BranchLinkTypeOneTimeUse; - BNCLinkData * const LINK_DATA = [[BNCLinkData alloc] init]; - BNCLinkCache * const LINK_CACHE = [[BNCLinkCache alloc] init]; - - [LINK_DATA setupType:LINK_TYPE]; - - BNCPreferenceHelper *preferenceHelper = [BNCPreferenceHelper sharedInstance]; - NSMutableDictionary * const expectedParams = NSMutableDictionary.new; - expectedParams[BRANCH_REQUEST_KEY_SESSION_ID] = preferenceHelper.sessionID; - expectedParams[BRANCH_REQUEST_KEY_RANDOMIZED_BUNDLE_TOKEN] = preferenceHelper.randomizedBundleToken; - expectedParams[BRANCH_REQUEST_KEY_RANDOMIZED_DEVICE_TOKEN] = preferenceHelper.randomizedDeviceToken; - expectedParams[BRANCH_REQUEST_KEY_URL_SOURCE] = @"ios"; - expectedParams[BRANCH_REQUEST_KEY_URL_LINK_TYPE] = @(LINK_TYPE); - - BranchShortUrlRequest *request = - [[BranchShortUrlRequest alloc] - initWithTags:nil - alias:nil - type:LINK_TYPE - matchDuration:0 - channel:nil - feature:nil - stage:nil - campaign:nil - params:nil - linkData:LINK_DATA - linkCache:LINK_CACHE - callback:NULL]; - - id serverInterfaceMock = OCMClassMock([BNCServerInterface class]); - [[serverInterfaceMock expect] - postRequest:expectedParams - url:[OCMArg any] - key:[OCMArg any] - callback:[OCMArg any]]; - - [request makeRequest:serverInterfaceMock key:nil callback:NULL]; - - [serverInterfaceMock verify]; -} - -- (void)testBasicSuccess { - NSString * URL = @"http://foo"; - NSDictionary * const REFERRAL_RESPONSE_DATA = @{ BRANCH_RESPONSE_KEY_URL: URL }; - BNCServerResponse *response = [[BNCServerResponse alloc] init]; - response.data = REFERRAL_RESPONSE_DATA; - - XCTestExpectation *requestExpecation = [self expectationWithDescription:@"Get Referral Code Request Expectation"]; - BranchShortUrlRequest *request = - [[BranchShortUrlRequest alloc] - initWithTags:nil - alias:nil - type:BranchLinkTypeOneTimeUse - matchDuration:1 - channel:nil - feature:nil - stage:nil - campaign:nil - params:nil - linkData:nil - linkCache:nil - callback:^(NSString *url, NSError *error) { - XCTAssertEqualObjects(url, URL); - XCTAssertNil(error); - [self safelyFulfillExpectation:requestExpecation]; - }]; - - [request processResponse:response error:nil]; - - [self awaitExpectations]; -} - -- (void)testFailureWithUserUrlAvailable { - NSError * RESPONSE_ERROR = [NSError errorWithDomain:@"foo" code:1 userInfo:nil]; - NSString * USER_URL = @"http://foo"; - - NSString * TAG1 = @"foo-tag"; - NSString * TAG2 = @"bar-tag"; - NSArray * const TAGS = @[ TAG1, TAG2 ]; - NSString * const ALIAS = @"foo-alias"; - BranchLinkType const LINK_TYPE = BranchLinkTypeOneTimeUse; - NSInteger const DURATION = 1; - NSString * const CHANNEL = @"foo-channel"; - NSString * const FEATURE = @"foo-feature"; - NSString * const STAGE = @"foo-stage"; - NSString * const CAMPAIGN = @"foo-campaign"; - NSDictionary * const PARAMS = @{ @"foo-param": @"bar-value" }; - NSData * const PARAMS_DATA = [BNCEncodingUtils encodeDictionaryToJsonData:PARAMS]; - NSString * const ENCODED_PARAMS = [BNCEncodingUtils base64EncodeData:PARAMS_DATA]; - - NSString * EXPECTED_URL = [NSString stringWithFormat: - @"%@?tags=%@&tags=%@&alias=%@&channel=%@&feature=%@&stage=%@&type=%ld&duration=%ld&source=ios&data=%@", - USER_URL, TAG1, TAG2, ALIAS, CHANNEL, FEATURE, STAGE, (long)LINK_TYPE, (long)DURATION, ENCODED_PARAMS]; - - BNCPreferenceHelper *preferenceHelper = [BNCPreferenceHelper sharedInstance]; - preferenceHelper.userUrl = USER_URL; - - XCTestExpectation *requestExpecation = [self expectationWithDescription:@"Get Referral Code Request Expectation"]; - BranchShortUrlRequest *request = - [[BranchShortUrlRequest alloc] - initWithTags:TAGS - alias:ALIAS - type:LINK_TYPE - matchDuration:DURATION - channel:CHANNEL - feature:FEATURE - stage:STAGE - campaign:CAMPAIGN - params:PARAMS - linkData:nil - linkCache:nil - callback:^(NSString *url, NSError *error) { - XCTAssertEqualObjects(url, EXPECTED_URL); - XCTAssertNotNil(error); - [self safelyFulfillExpectation:requestExpecation]; - }]; - - [request processResponse:nil error:RESPONSE_ERROR]; - - [self awaitExpectations]; -} - -- (void)testFailureWithoutUserUrlAvailable { - NSError * RESPONSE_ERROR = [NSError errorWithDomain:@"foo" code:1 userInfo:nil]; - - NSString * TAG1 = @"foo-tag"; - NSString * TAG2 = @"bar-tag"; - NSArray * const TAGS = @[ TAG1, TAG2 ]; - NSString * const ALIAS = @"foo-alias"; - BranchLinkType const LINK_TYPE = BranchLinkTypeOneTimeUse; - NSInteger const DURATION = 1; - NSString * const CHANNEL = @"foo-channel"; - NSString * const FEATURE = @"foo-feature"; - NSString * const CAMPAIGN = @"foo-campaign"; - NSString * const STAGE = @"foo-stage"; - NSDictionary * const PARAMS = @{ @"foo-param": @"bar-value" }; - - BNCPreferenceHelper *preferenceHelper = [BNCPreferenceHelper sharedInstance]; - preferenceHelper.userUrl = nil; - - XCTestExpectation *requestExpecation = - [self expectationWithDescription:@"testFailureWithoutUserUrlAvailable Expectation"]; - BranchShortUrlRequest *request = - [[BranchShortUrlRequest alloc] - initWithTags:TAGS - alias:ALIAS - type:LINK_TYPE - matchDuration:DURATION - channel:CHANNEL - feature:FEATURE - stage:STAGE - campaign:CAMPAIGN - params:PARAMS - linkData:nil - linkCache:nil - callback:^(NSString *url, NSError *error) { - XCTAssertTrue((Branch.branchKeyIsSet && url != nil) || (!Branch.branchKeyIsSet && url == nil)); - XCTAssertNotNil(error); - [self safelyFulfillExpectation:requestExpecation]; - }]; - - [request processResponse:nil error:RESPONSE_ERROR]; - - [self awaitExpectations]; -} - -@end diff --git a/Branch-TestBed/Branch-SDK-Tests/BranchShortUrlSyncRequestTests.m b/Branch-TestBed/Branch-SDK-Tests/BranchShortUrlSyncRequestTests.m deleted file mode 100644 index 598294277..000000000 --- a/Branch-TestBed/Branch-SDK-Tests/BranchShortUrlSyncRequestTests.m +++ /dev/null @@ -1,233 +0,0 @@ -// -// BranchShortUrlSyncRequestTests.m -// Branch-TestBed -// -// Created by Graham Mueller on 6/12/15. -// Copyright (c) 2015 Branch Metrics. All rights reserved. -// -#import "BNCTestCase.h" -#import "BranchShortUrlSyncRequest.h" -#import "BranchConstants.h" -#import "BNCPreferenceHelper.h" -#import -#import "BNCPreferenceHelper.h" -#import "BNCEncodingUtils.h" - -@interface BranchShortUrlSyncRequestTests : BNCTestCase - -@end - -@implementation BranchShortUrlSyncRequestTests - -- (void)testRequestBody { - NSArray * const TAGS = @[]; - NSString * const ALIAS = @"foo-alias"; - BranchLinkType const LINK_TYPE = BranchLinkTypeOneTimeUse; - NSInteger const DURATION = 1; - NSString * const CHANNEL = @"foo-channel"; - NSString * const FEATURE = @"foo-feature"; - NSString * const STAGE = @"foo-stage"; - NSString * const CAMPAIGN = @"foo-campaign"; - NSDictionary * const PARAMS = @{}; - BNCLinkData * const LINK_DATA = [[BNCLinkData alloc] init]; - BNCLinkCache * const LINK_CACHE = [[BNCLinkCache alloc] init]; - - [LINK_DATA setupType:LINK_TYPE]; - [LINK_DATA setupTags:TAGS]; - [LINK_DATA setupChannel:CHANNEL]; - [LINK_DATA setupFeature:FEATURE]; - [LINK_DATA setupStage:STAGE]; - [LINK_DATA setupAlias:ALIAS]; - [LINK_DATA setupMatchDuration:DURATION]; - [LINK_DATA setupParams:PARAMS]; - - BNCPreferenceHelper *preferenceHelper = [BNCPreferenceHelper sharedInstance]; - NSMutableDictionary * const expectedParams = NSMutableDictionary.new; - expectedParams[BRANCH_REQUEST_KEY_SESSION_ID] = preferenceHelper.sessionID; - expectedParams[BRANCH_REQUEST_KEY_RANDOMIZED_BUNDLE_TOKEN] = preferenceHelper.randomizedBundleToken; - expectedParams[BRANCH_REQUEST_KEY_RANDOMIZED_DEVICE_TOKEN] = preferenceHelper.randomizedDeviceToken; - expectedParams[BRANCH_REQUEST_KEY_URL_ALIAS] = ALIAS; - expectedParams[BRANCH_REQUEST_KEY_URL_CHANNEL] = CHANNEL; - expectedParams[BRANCH_REQUEST_KEY_URL_DATA] = PARAMS; - expectedParams[BRANCH_REQUEST_KEY_URL_DURATION] = @(DURATION); - expectedParams[BRANCH_REQUEST_KEY_URL_FEATURE] = FEATURE; - expectedParams[BRANCH_REQUEST_KEY_URL_LINK_TYPE] = @(LINK_TYPE); - expectedParams[BRANCH_REQUEST_KEY_URL_SOURCE] = @"ios"; - expectedParams[BRANCH_REQUEST_KEY_URL_STAGE] = STAGE; - expectedParams[BRANCH_REQUEST_KEY_URL_TAGS] = TAGS; - - BranchShortUrlSyncRequest *request = - [[BranchShortUrlSyncRequest alloc] - initWithTags:TAGS - alias:ALIAS - type:LINK_TYPE - matchDuration:DURATION - channel:CHANNEL - feature:FEATURE - stage:STAGE - campaign:CAMPAIGN - params:PARAMS - linkData:LINK_DATA - linkCache:LINK_CACHE]; - - id serverInterfaceMock = OCMClassMock([BNCServerInterface class]); - [[serverInterfaceMock expect] - postRequestSynchronous:expectedParams - url:[self stringMatchingPattern:BRANCH_REQUEST_ENDPOINT_GET_SHORT_URL] - key:[OCMArg any]]; - - [request makeRequest:serverInterfaceMock key:nil]; - - [serverInterfaceMock verify]; -} - -- (void)testRequestBodyWhenOptionalValuesArentProvided { - BranchLinkType const LINK_TYPE = BranchLinkTypeOneTimeUse; - BNCLinkData * const LINK_DATA = [[BNCLinkData alloc] init]; - BNCLinkCache * const LINK_CACHE = [[BNCLinkCache alloc] init]; - - [LINK_DATA setupType:LINK_TYPE]; - - BNCPreferenceHelper *preferenceHelper = [BNCPreferenceHelper sharedInstance]; - NSMutableDictionary * const expectedParams = NSMutableDictionary.new; - expectedParams[BRANCH_REQUEST_KEY_SESSION_ID] = preferenceHelper.sessionID; - expectedParams[BRANCH_REQUEST_KEY_RANDOMIZED_BUNDLE_TOKEN] = preferenceHelper.randomizedBundleToken; - expectedParams[BRANCH_REQUEST_KEY_RANDOMIZED_DEVICE_TOKEN] = preferenceHelper.randomizedDeviceToken; - expectedParams[BRANCH_REQUEST_KEY_URL_SOURCE] = @"ios"; - expectedParams[BRANCH_REQUEST_KEY_URL_LINK_TYPE] = @(LINK_TYPE); - - BranchShortUrlSyncRequest *request = - [[BranchShortUrlSyncRequest alloc] - initWithTags:nil - alias:nil - type:LINK_TYPE - matchDuration:0 - channel:nil - feature:nil - stage:nil - campaign:nil - params:nil - linkData:LINK_DATA - linkCache:LINK_CACHE]; - id serverInterfaceMock = OCMClassMock([BNCServerInterface class]); - [[serverInterfaceMock expect] - postRequestSynchronous:expectedParams - url:[OCMArg any] - key:[OCMArg any]]; - - [request makeRequest:serverInterfaceMock key:nil]; - - [serverInterfaceMock verify]; -} - -- (void)testBasicSuccess { - NSString * URL = @"http://foo"; - NSDictionary * const REFERRAL_RESPONSE_DATA = @{ BRANCH_RESPONSE_KEY_URL: URL }; - BNCServerResponse *response = [[BNCServerResponse alloc] init]; - response.data = REFERRAL_RESPONSE_DATA; - response.statusCode = @200; - - BranchShortUrlSyncRequest *request = - [[BranchShortUrlSyncRequest alloc] - initWithTags:nil - alias:nil - type:BranchLinkTypeOneTimeUse - matchDuration:1 - channel:nil - feature:nil - stage:nil - campaign:nil - params:nil - linkData:nil - linkCache:nil]; - NSString *url = [request processResponse:response]; - - XCTAssertEqualObjects(url, URL); -} - -- (void)testFailureWithUserUrlAvailable { - BNCServerResponse *response = [[BNCServerResponse alloc] init]; - response.statusCode = @400; - NSString * USER_URL = @"http://foo"; - - NSString * TAG1 = @"foo-tag"; - NSString * TAG2 = @"bar-tag"; - NSArray * const TAGS = @[ TAG1, TAG2 ]; - NSString * const ALIAS = @"foo-alias"; - BranchLinkType const LINK_TYPE = BranchLinkTypeOneTimeUse; - NSInteger const DURATION = 1; - NSString * const CHANNEL = @"foo-channel"; - NSString * const FEATURE = @"foo-feature"; - NSString * const STAGE = @"foo-stage"; - NSString * const CAMPAIGN = @"foo-campaign"; - NSDictionary * const PARAMS = @{ @"foo-param": @"bar-value" }; - NSData * const PARAMS_DATA = [BNCEncodingUtils encodeDictionaryToJsonData:PARAMS]; - NSString * const ENCODED_PARAMS = [BNCEncodingUtils base64EncodeData:PARAMS_DATA]; - NSString * const URL_ENCODED_PARAMS = [BNCEncodingUtils urlEncodedString:ENCODED_PARAMS]; - - NSString * EXPECTED_URL = - [NSString stringWithFormat: - @"%@?tags=%@&tags=%@&alias=%@&channel=%@&feature=%@&stage=%@&type=%ld" - "&duration=%ld&source=ios&data=%@", - USER_URL, TAG1, TAG2, ALIAS, CHANNEL, FEATURE, STAGE, - (long)LINK_TYPE, (long)DURATION, URL_ENCODED_PARAMS]; - - BNCPreferenceHelper *preferenceHelper = [BNCPreferenceHelper sharedInstance]; - preferenceHelper.userUrl = USER_URL; - - BranchShortUrlSyncRequest *request = - [[BranchShortUrlSyncRequest alloc] - initWithTags:TAGS - alias:ALIAS - type:LINK_TYPE - matchDuration:DURATION - channel:CHANNEL - feature:FEATURE - stage:STAGE - campaign:CAMPAIGN - params:PARAMS - linkData:nil - linkCache:nil]; - NSString *url = [request processResponse:response]; - - XCTAssertEqualObjects(url, EXPECTED_URL); -} - -- (void)testFailureWithoutUserUrlAvailable { - BNCServerResponse *response = [[BNCServerResponse alloc] init]; - response.statusCode = @400; - - NSString * TAG1 = @"foo-tag"; - NSString * TAG2 = @"bar-tag"; - NSArray * const TAGS = @[ TAG1, TAG2 ]; - NSString * const ALIAS = @"foo-alias"; - BranchLinkType const LINK_TYPE = BranchLinkTypeOneTimeUse; - NSInteger const DURATION = 1; - NSString * const CHANNEL = @"foo-channel"; - NSString * const FEATURE = @"foo-feature"; - NSString * const STAGE = @"foo-stage"; - NSString * const CAMPAIGN = @"foo-campaign"; - NSDictionary * const PARAMS = @{ @"foo-param": @"bar-value" }; - - BNCPreferenceHelper *preferenceHelper = [BNCPreferenceHelper sharedInstance]; - preferenceHelper.userUrl = nil; - - BranchShortUrlSyncRequest *request = - [[BranchShortUrlSyncRequest alloc] - initWithTags:TAGS - alias:ALIAS - type:LINK_TYPE - matchDuration:DURATION - channel:CHANNEL - feature:FEATURE - stage:STAGE - campaign:CAMPAIGN - params:PARAMS - linkData:nil - linkCache:nil]; - NSString *url = [request processResponse:response]; - - XCTAssertNil(url); -} - -@end diff --git a/Branch-TestBed/Branch-SDK-Tests/BranchUniversalObject.Test.m b/Branch-TestBed/Branch-SDK-Tests/BranchUniversalObject.Test.m deleted file mode 100644 index 97c90755f..000000000 --- a/Branch-TestBed/Branch-SDK-Tests/BranchUniversalObject.Test.m +++ /dev/null @@ -1,281 +0,0 @@ -// -// BranchUniversalObject.Test.m -// Branch-TestBed -// -// Created by Edward Smith on 8/15/17. -// Copyright © 2017 Branch Metrics. All rights reserved. -// - -#import -#import "BNCTestCase.h" -#import "BranchUniversalObject.h" -#import "NSString+Branch.h" -#import "Branch.h" - -@interface BranchUniversalObjectTest : BNCTestCase -@end - -@implementation BranchUniversalObjectTest - -- (void) testDeserialize { - - NSString *jsonString = [self stringFromBundleWithKey:@"BranchUniversalObjectJSON"]; - XCTAssertTrue(jsonString, @"Can't load BranchUniversalObjectJSON resource from plist!"); - - NSError *error = nil; - NSDictionary *dictionary = - [NSJSONSerialization JSONObjectWithData:[jsonString dataUsingEncoding:NSUTF8StringEncoding] - options:0 error:&error]; - XCTAssertNil(error); - XCTAssert(dictionary); - - BranchUniversalObject *buo = [BranchUniversalObject objectWithDictionary:dictionary]; - XCTAssert(buo); - - XCTAssertEqualObjects(buo.contentMetadata.contentSchema, BranchContentSchemaCommerceProduct); - XCTAssertEqual(buo.contentMetadata.quantity, 2); - XCTAssertEqualObjects(buo.contentMetadata.price, [NSDecimalNumber decimalNumberWithString:@"23.20"]); - XCTAssertEqualObjects(buo.contentMetadata.currency, BNCCurrencyUSD); - XCTAssertEqualObjects(buo.contentMetadata.sku, @"1994320302"); - XCTAssertEqualObjects(buo.contentMetadata.productName, @"my_product_name1"); - XCTAssertEqualObjects(buo.contentMetadata.productBrand, @"my_prod_Brand1"); - XCTAssertEqualObjects(buo.contentMetadata.productCategory, BNCProductCategoryBabyToddler); - XCTAssertEqualObjects(buo.contentMetadata.productVariant, @"3T"); - XCTAssertEqualObjects(buo.contentMetadata.condition, @"FAIR"); - XCTAssertEqual(buo.contentMetadata.ratingAverage, 5); - XCTAssertEqual(buo.contentMetadata.ratingCount, 5); - XCTAssertEqual(buo.contentMetadata.ratingMax, 7); - XCTAssertEqual(buo.contentMetadata.rating, 6); - XCTAssertEqualObjects(buo.contentMetadata.addressStreet, @"Street_name1"); - XCTAssertEqualObjects(buo.contentMetadata.addressCity, @"city1"); - XCTAssertEqualObjects(buo.contentMetadata.addressRegion, @"Region1"); - XCTAssertEqualObjects(buo.contentMetadata.addressCountry, @"Country1"); - XCTAssertEqualObjects(buo.contentMetadata.addressPostalCode, @"postal_code"); - XCTAssertEqual(buo.contentMetadata.latitude, 12.07); - XCTAssertEqual(buo.contentMetadata.longitude, -97.5); - NSArray *array = @[@"my_img_caption1", @"my_img_caption_2"]; - XCTAssertEqualObjects(buo.contentMetadata.imageCaptions, array); - NSDictionary *d = @{ - @"Custom_Content_metadata_key1": @"Custom_Content_metadata_val1", - @"Custom_Content_metadata_key2": @"Custom_Content_metadata_val2" - }; - XCTAssertEqualObjects(buo.contentMetadata.customMetadata, d); - XCTAssertEqualObjects(buo.title, @"My Content Title"); - XCTAssertEqualObjects(buo.canonicalIdentifier, @"item/12345"); - XCTAssertEqualObjects(buo.canonicalUrl, @"https://branch.io/deepviews"); - array = @[@"My_Keyword1", @"My_Keyword2"]; - XCTAssertEqualObjects(buo.keywords, array); - XCTAssertEqualObjects(buo.contentDescription, @"my_product_description1"); - XCTAssertEqualObjects(buo.imageUrl, @"https://test_img_url"); - XCTAssertEqualObjects(buo.expirationDate, [NSDate dateWithTimeIntervalSince1970:(double)212123232544.0/1000.0]); - XCTAssertEqual(buo.publiclyIndex, NO); - XCTAssertEqual(buo.locallyIndex, YES); - XCTAssertEqualObjects(buo.creationDate, [NSDate dateWithTimeIntervalSince1970:(double)1501869445321.0/1000.0]); - - XCTAssertEqualObjects(buo.expirationDate.description, @"1976-09-21 03:07:12 +0000"); - XCTAssertEqualObjects(buo.creationDate.description, @"2017-08-04 17:57:25 +0000"); - - // Check serialization of the dictionary. - - NSDictionary *newDictionary = [buo dictionary]; - XCTAssert(newDictionary); - - NSMutableDictionary *oldDictionary = [NSMutableDictionary dictionaryWithDictionary:dictionary]; - oldDictionary[@"$publicly_indexable"] = nil; // Remove this value since we don't add false values. - XCTAssertEqualObjects(oldDictionary, newDictionary); - - NSData* data = [NSJSONSerialization dataWithJSONObject:newDictionary options:0 error:&error]; - XCTAssertNil(error); - XCTAssert(data); - - // NSString *newString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; - // Can't compare strings since the field item order may be different. - // XCTAssertEqualObjects(jsonString, newString); -} - -- (void) testSerialize { - BranchUniversalObject *buo = [BranchUniversalObject new]; - buo.contentMetadata.contentSchema = BranchContentSchemaCommerceProduct; - buo.contentMetadata.quantity = 2; - buo.contentMetadata.price = [NSDecimalNumber decimalNumberWithString:@"23.20"]; - buo.contentMetadata.currency = BNCCurrencyUSD; - buo.contentMetadata.sku = @"1994320302"; - buo.contentMetadata.productName = @"my_product_name1"; - buo.contentMetadata.productBrand = @"my_prod_Brand1"; - buo.contentMetadata.productCategory = BNCProductCategoryBabyToddler; - buo.contentMetadata.productVariant = @"3T"; - buo.contentMetadata.condition = @"FAIR"; - buo.contentMetadata.ratingAverage = 5; - buo.contentMetadata.ratingCount = 5; - buo.contentMetadata.ratingMax = 7; - buo.contentMetadata.rating = 6; - buo.contentMetadata.addressStreet = @"Street_name1"; - buo.contentMetadata.addressCity = @"city1"; - buo.contentMetadata.addressRegion = @"Region1"; - buo.contentMetadata.addressCountry = @"Country1"; - buo.contentMetadata.addressPostalCode = @"postal_code"; - buo.contentMetadata.latitude = 12.07; - buo.contentMetadata.longitude = -97.5; - buo.contentMetadata.imageCaptions = (id) @[@"my_img_caption1", @"my_img_caption_2"]; - buo.contentMetadata.customMetadata = (id) @{ - @"Custom_Content_metadata_key1": @"Custom_Content_metadata_val1", - @"Custom_Content_metadata_key2": @"Custom_Content_metadata_val2" - }; - buo.title = @"My Content Title"; - buo.canonicalIdentifier = @"item/12345"; - buo.canonicalUrl = @"https://branch.io/deepviews"; - buo.keywords = @[@"My_Keyword1", @"My_Keyword2"]; - buo.contentDescription = @"my_product_description1"; - buo.imageUrl = @"https://test_img_url"; - buo.expirationDate = - [NSDate dateWithTimeIntervalSince1970:(double)212123232544.0/1000.0]; - buo.publiclyIndex = NO; - buo.locallyIndex = YES; - buo.creationDate = - [NSDate dateWithTimeIntervalSince1970:(double)1501869445321.0/1000.0]; - NSDictionary *buoDictionary = buo.dictionary; - - // Load the JSON: - - NSString *jsonString = [self stringFromBundleWithKey:@"BranchUniversalObjectJSON"]; - XCTAssertTrue(jsonString, @"Can't load BranchUniversalObjectJSON resource from plist!"); - - NSError *error = nil; - NSMutableDictionary *jsonDictionary = - [[NSJSONSerialization JSONObjectWithData:[jsonString dataUsingEncoding:NSUTF8StringEncoding] - options:0 error:&error] - mutableCopy]; - XCTAssertNil(error); - jsonDictionary[@"$publicly_indexable"] = nil; - - // Compare: - - XCTAssert(buoDictionary); - XCTAssert(jsonDictionary); - XCTAssertEqualObjects(buoDictionary, jsonDictionary); -} - -- (void) testSchemaDescription { - NSDictionary *d = [self mutableDictionaryFromBundleJSONWithKey:@"BranchUniversalObjectJSON"]; - BranchUniversalObject *b = [BranchUniversalObject objectWithDictionary:d]; - NSString *s = b.contentMetadata.description; - BNCTAssertEqualMaskedString(s, - @""); -} - -- (void) testBUODescription { - NSString *mask = [self stringFromBundleWithKey:@"BUODescription"]; - NSDictionary *d = [self mutableDictionaryFromBundleJSONWithKey:@"BranchUniversalObjectJSON"]; - BranchUniversalObject *b = [BranchUniversalObject objectWithDictionary:d]; - NSString *s = b.description; - NSLog(@"%@\n%@", s, mask); - XCTAssertTrue([s bnc_isEqualToMaskedString:mask]); -} - -- (void) testDeprecations { - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wdeprecated-declarations" - - BranchUniversalObject *buo = [BranchUniversalObject new]; - buo.price = 10.00; - buo.currency = BNCCurrencyUSD; - buo.type = @"Purchase"; - buo.contentIndexMode = BranchContentIndexModePublic; - buo.metadata = @{ @"Key1": @"Value1" }; - buo.automaticallyListOnSpotlight = YES; - - XCTAssertEqualObjects(buo.contentMetadata.price, [NSDecimalNumber decimalNumberWithString:@"10.00"]); - XCTAssertEqualObjects(buo.contentMetadata.currency, BNCCurrencyUSD); - XCTAssertEqualObjects(buo.contentMetadata.contentSchema, @"Purchase"); - XCTAssertEqual(buo.locallyIndex, YES); - XCTAssertEqual(buo.publiclyIndex, YES); - XCTAssertEqualObjects(buo.contentMetadata.customMetadata, @{ @"Key1": @"Value1" } ); - - XCTAssertEqual(buo.price, 10.00); - XCTAssertEqualObjects(buo.currency, BNCCurrencyUSD); - XCTAssertEqualObjects(buo.type, @"Purchase");; - XCTAssertEqual(buo.contentIndexMode, BranchContentIndexModePublic); - XCTAssertEqualObjects(buo.metadata, @{ @"Key1": @"Value1" }); - XCTAssertEqual(buo.automaticallyListOnSpotlight, YES); - - buo.contentMetadata.customMetadata = (NSMutableDictionary*) @{ @"Key2": @"Value2" }; - buo.contentMetadata.customMetadata[@"Key3"] = @"Value3"; - [buo addMetadataKey:@"Key4" value:@"Value4"]; - NSDictionary *d = @{ - @"Key2": @"Value2", - @"Key3": @"Value3", - @"Key4": @"Value4", - }; - XCTAssertEqualObjects(buo.metadata, d); - - #pragma clang diagnostic pop -} - -- (void) testDictionary { - NSDictionary *d = nil; - BranchUniversalObject *buo = [BranchUniversalObject new]; - - buo.contentMetadata.customMetadata = (id) @{}; - d = [NSDictionary new]; - XCTAssertEqualObjects(buo.contentMetadata.customMetadata, d); - - buo.contentMetadata.customMetadata = (id) @{}; - buo.contentMetadata.customMetadata[@"a"] = @"b"; - d = @{ @"a": @"b" }; - XCTAssertEqualObjects(buo.contentMetadata.customMetadata, d); - - buo.contentMetadata.customMetadata = [NSMutableDictionary dictionaryWithDictionary:@{@"1": @"2"}]; - buo.contentMetadata.customMetadata[@"3"] = @"4"; - d = @{ - @"1": @"2", - @"3": @"4", - }; - XCTAssertEqualObjects(buo.contentMetadata.customMetadata, d); -} - -- (void) testRegisterView { - Branch *branch = [Branch getInstance:@"key_live_foo"]; - [BNCPreferenceHelper sharedInstance].randomizedBundleToken = @"1234567"; - [BNCPreferenceHelper sharedInstance].sessionID = @"654321"; - [BNCPreferenceHelper sharedInstance].randomizedDeviceToken = @"987654321"; - XCTestExpectation *expectation = [self expectationWithDescription:@"testRegisterView"]; - id serverInterfaceMock = OCMPartialMock(branch.serverInterface); - - OCMStub( - [serverInterfaceMock genericHTTPRequest:[OCMArg any] - retryNumber:0 - callback:[OCMArg any] - retryHandler:[OCMArg any]] - ).andDo(^(NSInvocation *invocation) { - - __unsafe_unretained NSURLRequest *request = nil; - [invocation getArgument:&request atIndex:2]; - - NSError *error = nil; - NSString *url = request.URL.absoluteString; - NSData *bodyData = request.HTTPBody; - NSDictionary *parameters = [NSJSONSerialization JSONObjectWithData:bodyData options:0 error:&error]; - XCTAssertNil(error); - - NSLog(@"1"); - NSLog(@"URL: %@.", url); - NSLog(@"Body: %@.", parameters); - - NSString *eventName = parameters[@"name"]; - if ([url containsString:@"branch.io/v2/event/standard"] && - [eventName isEqualToString:@"VIEW_ITEM"]) { - [expectation fulfill]; - } - }); - - [branch clearNetworkQueue]; - BranchUniversalObject *buo = [BranchUniversalObject new]; - buo.canonicalIdentifier = @"Uniq!"; - buo.title = @"Object Title"; - [buo registerViewWithCallback:^(NSDictionary * _Nullable params, NSError * _Nullable error) { - XCTAssertNil(error); - }]; - [self waitForExpectationsWithTimeout:2.0 handler:nil]; -} - -@end diff --git a/Branch-TestBed/Branch-SDK-Tests/BranchUniversalObjectTests.m b/Branch-TestBed/Branch-SDK-Tests/BranchUniversalObjectTests.m new file mode 100644 index 000000000..9a7112e31 --- /dev/null +++ b/Branch-TestBed/Branch-SDK-Tests/BranchUniversalObjectTests.m @@ -0,0 +1,446 @@ +// +// BranchUniversalObjectTests.m +// Branch-TestBed +// +// Created by Edward Smith on 8/15/17. +// Copyright © 2017 Branch Metrics. All rights reserved. +// + +#import +#import "BranchUniversalObject.h" + +@interface BranchUniversalObjectTests : XCTestCase +@end + +@implementation BranchUniversalObjectTests + +- (void)setUp { + // Put setup code here. This method is called before the invocation of each test method in the class. +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the class. +} + +#pragma mark BranchContentMetadata tests + +- (BranchContentMetadata *)branchContentMetadataWithAllPropertiesSet { + BranchContentMetadata *metadata = [BranchContentMetadata new]; + metadata.contentSchema = BranchContentSchemaOther; + metadata.quantity = 10; + metadata.price = [[NSDecimalNumber alloc] initWithDouble:5.5]; + metadata.currency = BNCCurrencyUSD; + metadata.sku = @"testSKU"; + metadata.productName = @"testProductName"; + metadata.productBrand = @"testProductBrand"; + metadata.productCategory = BNCProductCategoryApparel; + metadata.productVariant = @"testProductVariant"; + metadata.condition = BranchConditionNew; + metadata.ratingAverage = 3.5; + metadata.ratingCount = 2; + metadata.ratingMax = 4; + metadata.rating = 3; + metadata.addressStreet = @"195 Page Mill Road"; + metadata.addressCity = @"Palo Alto"; + metadata.addressRegion = @"CA"; + metadata.addressCountry = @"USA"; + metadata.addressPostalCode = @"94306"; + metadata.latitude = 37.426; + metadata.longitude = -122.138; + + metadata.imageCaptions = @[ + @"Hello World", + @"Goodbye World" + ].mutableCopy; + + metadata.customMetadata = @{ + @"custom0": @"custom data 0" + }.mutableCopy; + + return metadata; +} + +- (void)verifyBranchContentMetadataWithAllProperties:(BranchContentMetadata *)metadata { + XCTAssertNotNil(metadata); + + XCTAssertEqual(BranchContentSchemaOther, metadata.contentSchema); + XCTAssertTrue([@(10) isEqualToNumber:@(metadata.quantity)]); + XCTAssertTrue([[[NSDecimalNumber alloc] initWithDouble:5.5] isEqualToNumber:metadata.price]); + + XCTAssertEqual(BNCCurrencyUSD, metadata.currency); + XCTAssertTrue([@"testSKU" isEqualToString:metadata.sku]); + XCTAssertTrue([@"testProductName" isEqualToString:metadata.productName]); + XCTAssertTrue([@"testProductBrand" isEqualToString:metadata.productBrand]); + XCTAssertEqual(BNCProductCategoryApparel, metadata.productCategory); + XCTAssertTrue([@"testProductVariant" isEqualToString:metadata.productVariant]); + XCTAssertEqual(BranchConditionNew, metadata.condition); + XCTAssertTrue([@(3.5) isEqualToNumber:@(metadata.ratingAverage)]); + XCTAssertTrue([@(2) isEqualToNumber:@(metadata.ratingCount)]); + XCTAssertTrue([@(4) isEqualToNumber:@(metadata.ratingMax)]); + XCTAssertTrue([@(3) isEqualToNumber:@(metadata.rating)]); + + XCTAssertTrue([@"195 Page Mill Road" isEqualToString:metadata.addressStreet]); + XCTAssertTrue([@"Palo Alto" isEqualToString:metadata.addressCity]); + XCTAssertTrue([@"CA" isEqualToString:metadata.addressRegion]); + XCTAssertTrue([@"USA" isEqualToString:metadata.addressCountry]); + XCTAssertTrue([@"94306" isEqualToString:metadata.addressPostalCode]); + + XCTAssertTrue([@(37.426) isEqualToNumber:@(metadata.latitude)]); + XCTAssertTrue([@(-122.138) isEqualToNumber:@(metadata.longitude)]); + + XCTAssertNotNil(metadata.imageCaptions); + XCTAssertTrue(metadata.imageCaptions.count == 2); + XCTAssertTrue([metadata.imageCaptions[0] isEqualToString:@"Hello World"]); + XCTAssertTrue([metadata.imageCaptions[1] isEqualToString:@"Goodbye World"]); + + XCTAssertNotNil(metadata.customMetadata); + XCTAssertTrue(metadata.customMetadata.allKeys.count == 1); +} + +- (void)verifyBranchContentMetadataDictionaryWithAllPropertiesSet:(NSDictionary *)dict { + XCTAssertTrue([@"OTHER" isEqualToString:dict[@"$content_schema"]]); + XCTAssertTrue([@(10) isEqualToNumber:dict[@"$quantity"]]); + XCTAssertTrue([[[NSDecimalNumber alloc] initWithDouble:5.5] isEqualToNumber:dict[@"$price"]]); + XCTAssertTrue([@"USD" isEqualToString:dict[@"$currency"]]); + XCTAssertTrue([@"testSKU" isEqualToString:dict[@"$sku"]]); + XCTAssertTrue([@"testProductName" isEqualToString:dict[@"$product_name"]]); + XCTAssertTrue([@"testProductBrand" isEqualToString:dict[@"$product_brand"]]); + XCTAssertTrue([@"Apparel & Accessories" isEqualToString:dict[@"$product_category"]]); + XCTAssertTrue([@"testProductVariant" isEqualToString:dict[@"$product_variant"]]); + XCTAssertTrue([@"NEW" isEqualToString:dict[@"$condition"]]); + + XCTAssertTrue([@(3.5) isEqualToNumber:dict[@"$rating_average"]]); + XCTAssertTrue([@(2) isEqualToNumber:dict[@"$rating_count"]]); + XCTAssertTrue([@(4) isEqualToNumber:dict[@"$rating_max"]]); + XCTAssertTrue([@(3) isEqualToNumber:dict[@"$rating"]]); + + XCTAssertTrue([@"195 Page Mill Road" isEqualToString:dict[@"$address_street"]]); + XCTAssertTrue([@"Palo Alto" isEqualToString:dict[@"$address_city"]]); + XCTAssertTrue([@"CA" isEqualToString:dict[@"$address_region"]]); + XCTAssertTrue([@"USA" isEqualToString:dict[@"$address_country"]]); + XCTAssertTrue([@"94306" isEqualToString:dict[@"$address_postal_code"]]); + + XCTAssertTrue([@(37.426) isEqualToNumber:dict[@"$latitude"]]); + XCTAssertTrue([@(-122.138) isEqualToNumber:dict[@"$longitude"]]); + + XCTAssertTrue([dict[@"$image_captions"] isKindOfClass:NSArray.class]); + NSArray *tmp = dict[@"$image_captions"]; + XCTAssertTrue(tmp.count == 2); + XCTAssertTrue([tmp[0] isEqualToString:@"Hello World"]); + XCTAssertTrue([tmp[1] isEqualToString:@"Goodbye World"]); + + XCTAssertTrue([@"custom data 0" isEqualToString:dict[@"custom0"]]); +} + +- (void)testBranchContentMetadataCreation_NoPropertiesSet { + BranchContentMetadata *metadata = [BranchContentMetadata new]; + + // most properties default to nil. primitives default to 0 + XCTAssertNil(metadata.contentSchema); + XCTAssertEqual(0, metadata.quantity); + XCTAssertNil(metadata.price); + XCTAssertNil(metadata.currency); + XCTAssertNil(metadata.sku); + XCTAssertNil(metadata.productName); + XCTAssertNil(metadata.productBrand); + XCTAssertNil(metadata.productCategory); + XCTAssertNil(metadata.productVariant); + XCTAssertNil(metadata.condition); + XCTAssertEqual(0, metadata.ratingAverage); + XCTAssertEqual(0, metadata.ratingCount); + XCTAssertEqual(0, metadata.ratingMax); + XCTAssertEqual(0, metadata.rating); + XCTAssertNil(metadata.addressStreet); + XCTAssertNil(metadata.addressCity); + XCTAssertNil(metadata.addressRegion); + XCTAssertNil(metadata.addressCountry); + XCTAssertNil(metadata.addressPostalCode); + XCTAssertEqual(0, metadata.latitude); + XCTAssertEqual(0, metadata.longitude); + + // defaults to an empty array + XCTAssertNotNil(metadata.imageCaptions); + XCTAssertTrue(metadata.imageCaptions.count == 0); + + // defaults to an empty dictionary + XCTAssertNotNil(metadata.customMetadata); + XCTAssertTrue(metadata.customMetadata.allKeys.count == 0); +} + +- (void)testBranchContentMetadataCreation_AllPropertiesSet { + BranchContentMetadata *metadata = [self branchContentMetadataWithAllPropertiesSet]; + [self verifyBranchContentMetadataWithAllProperties:metadata]; +} + +- (void)testBranchContentMetadataDictionary_NoPropertiesSet { + BranchContentMetadata *metadata = [BranchContentMetadata new]; + NSDictionary *dict = metadata.dictionary; + + XCTAssertNotNil(dict); + XCTAssertTrue(dict.allKeys.count == 0); +} + +- (void)testBranchContentMetadataDictionary_AllPropertiesSet { + BranchContentMetadata *metadata = [self branchContentMetadataWithAllPropertiesSet]; + NSDictionary *dict = metadata.dictionary; + + XCTAssertNotNil(dict); + XCTAssertTrue(dict.allKeys.count == 23); + [self verifyBranchContentMetadataDictionaryWithAllPropertiesSet:dict]; +} + +- (void)testBranchContentMetadata_contentMetadataWithDictionary { + BranchContentMetadata *original = [self branchContentMetadataWithAllPropertiesSet]; + NSDictionary *dict = [original dictionary]; + + BranchContentMetadata *metadata = [BranchContentMetadata contentMetadataWithDictionary:dict]; + [self verifyBranchContentMetadataWithAllProperties:metadata]; +} + +- (void)testBranchContentMetadataDescription_NoPropertiesSet { + BranchContentMetadata *metadata = [BranchContentMetadata new]; + NSString *desc = [metadata description]; + XCTAssertTrue([desc containsString:@"BranchContentMetadata"]); + XCTAssertTrue([desc containsString:@"schema: (null) userData: 0 items"]); +} + +- (void)testBranchContentMetadataDescription_AllPropertiesSet { + BranchContentMetadata *metadata = [self branchContentMetadataWithAllPropertiesSet]; + NSString *desc = [metadata description]; + XCTAssertTrue([desc containsString:@"BranchContentMetadata"]); + XCTAssertTrue([desc containsString:@"schema: OTHER userData: 1 items"]); +} + +#pragma mark BranchUniversalObject tests + +- (BranchUniversalObject *)branchUniversalObjectWithAllPropertiesSet { + BranchUniversalObject *buo = [[BranchUniversalObject alloc] initWithCanonicalIdentifier:@"io.branch.testObject"]; + buo.canonicalUrl = @"https://branch.io"; + buo.title = @"Test Title"; + buo.contentDescription = @"the quick brown fox jumps over the lazy dog"; + buo.imageUrl = @"https://branch.io"; + buo.keywords = @[@"keyword1", @"keyword2"]; + buo.expirationDate = [NSDate dateWithTimeIntervalSinceNow:1]; + buo.locallyIndex = YES; + buo.publiclyIndex = YES; + + buo.contentMetadata = [self branchContentMetadataWithAllPropertiesSet]; + return buo; +} + +- (void)verifyBranchUniversalObjectWithAllPropertiesSet:(BranchUniversalObject *)buo { + XCTAssertNotNil(buo); + XCTAssertTrue([@"https://branch.io" isEqualToString:buo.canonicalUrl]); + XCTAssertTrue([@"Test Title" isEqualToString:buo.title]); + XCTAssertTrue([@"the quick brown fox jumps over the lazy dog" isEqualToString:buo.contentDescription]); + XCTAssertTrue([@"https://branch.io" isEqualToString:buo.imageUrl]); + + XCTAssertTrue(buo.keywords.count == 2); + XCTAssertTrue([buo.keywords[0] isEqualToString:@"keyword1"]); + XCTAssertTrue([buo.keywords[1] isEqualToString:@"keyword2"]); + + XCTAssertTrue([buo.creationDate compare:buo.expirationDate] == NSOrderedAscending); + + XCTAssertTrue(buo.locallyIndex); + XCTAssertTrue(buo.publiclyIndex); + + [self verifyBranchContentMetadataWithAllProperties:buo.contentMetadata]; +} + +- (void)verifyBranchUniversalObjectDictionaryWithAllPropertiesSet:(NSDictionary *)dict { + XCTAssertTrue([@"io.branch.testObject" isEqualToString:dict[@"$canonical_identifier"]]); + XCTAssertTrue([@"https://branch.io" isEqualToString:dict[@"$canonical_url"]]); + XCTAssertTrue([@"Test Title" isEqualToString:dict[@"$og_title"]]); + XCTAssertTrue([@"the quick brown fox jumps over the lazy dog" isEqualToString:dict[@"$og_description"]]); + XCTAssertTrue([@"https://branch.io" isEqualToString:dict[@"$og_image_url"]]); + + XCTAssertTrue(dict[@"$locally_indexable"]); + XCTAssertTrue(dict[@"$publicly_indexable"]); + + XCTAssertTrue([dict[@"$creation_timestamp"] isKindOfClass:NSNumber.class]); + XCTAssertTrue([dict[@"$exp_date"] isKindOfClass:NSNumber.class]); + NSNumber *creationDate = dict[@"$creation_timestamp"]; + NSNumber *expirationDate = dict[@"$exp_date"]; + XCTAssertTrue([creationDate compare:expirationDate] == NSOrderedAscending); + + XCTAssertTrue([dict[@"$keywords"] isKindOfClass:NSArray.class]); + NSArray *tmp = dict[@"$keywords"]; + XCTAssertTrue(tmp.count == 2); + XCTAssertTrue([tmp[0] isEqualToString:@"keyword1"]); + XCTAssertTrue([tmp[1] isEqualToString:@"keyword2"]); + + // the BranchContentMetadata dictionary is NOT in a sub dictionary, it is merged in at the top level + [self verifyBranchContentMetadataDictionaryWithAllPropertiesSet:dict]; +} + +- (void)testBranchUniversalObjectCreation { + BranchUniversalObject *buo = [BranchUniversalObject new]; + XCTAssertNotNil(buo); + + XCTAssertNil(buo.canonicalIdentifier); + XCTAssertNil(buo.canonicalUrl); + XCTAssertNil(buo.title); + XCTAssertNil(buo.contentDescription); + XCTAssertNil(buo.imageUrl); + XCTAssertNil(buo.keywords); + XCTAssertNil(buo.creationDate); + XCTAssertNil(buo.expirationDate); + XCTAssertFalse(buo.locallyIndex); + XCTAssertFalse(buo.publiclyIndex); + + XCTAssertNotNil(buo.contentMetadata); +} + +- (void)testBranchUniversalObjectCreation_initWithCanonicalIdentifier { + BranchUniversalObject *buo = [[BranchUniversalObject alloc] initWithCanonicalIdentifier:@"io.branch.testObject"]; + XCTAssertNotNil(buo); + + XCTAssertTrue([@"io.branch.testObject" isEqualToString:buo.canonicalIdentifier]); + XCTAssertNil(buo.canonicalUrl); + XCTAssertNil(buo.title); + XCTAssertNil(buo.contentDescription); + XCTAssertNil(buo.imageUrl); + XCTAssertNil(buo.keywords); + XCTAssertNotNil(buo.creationDate); + XCTAssertNil(buo.expirationDate); + XCTAssertFalse(buo.locallyIndex); + XCTAssertFalse(buo.publiclyIndex); + + XCTAssertNotNil(buo.contentMetadata); +} + +- (void)testBranchUniversalObjectCreation_initWithTitle { + BranchUniversalObject *buo = [[BranchUniversalObject alloc] initWithTitle:@"Test Title"]; + XCTAssertNotNil(buo); + + XCTAssertNil(buo.canonicalIdentifier); + XCTAssertNil(buo.canonicalUrl); + XCTAssertTrue([@"Test Title" isEqualToString:buo.title]); + XCTAssertNil(buo.contentDescription); + XCTAssertNil(buo.imageUrl); + XCTAssertNil(buo.keywords); + XCTAssertNotNil(buo.creationDate); + XCTAssertNil(buo.expirationDate); + XCTAssertFalse(buo.locallyIndex); + XCTAssertFalse(buo.publiclyIndex); + + XCTAssertNotNil(buo.contentMetadata); +} + +- (void)testBranchUniversalObject_AllPropertiesSet { + BranchUniversalObject *buo = [self branchUniversalObjectWithAllPropertiesSet]; + [self verifyBranchUniversalObjectWithAllPropertiesSet:buo]; +} + +- (void)testBranchUniversalObjectDescription_AllPropertiesSet { + BranchUniversalObject *buo = [self branchUniversalObjectWithAllPropertiesSet]; + NSString *desc = buo.description; + + // Verifies a few properties used to generate the description string + XCTAssertTrue([desc containsString:@"BranchUniversalObject"]); + XCTAssertTrue([desc containsString:@"canonicalIdentifier: io.branch.testObject"]); + XCTAssertTrue([desc containsString:@"title: Test Title"]); + XCTAssertTrue([desc containsString:@"contentDescription: the quick brown fox jumps over the lazy dog"]); +} + +- (void)testBranchUniversalObjectDictionary_AllPropertiesSet { + BranchUniversalObject *buo = [self branchUniversalObjectWithAllPropertiesSet]; + NSDictionary *dict = buo.dictionary; + + XCTAssertNotNil(dict); + XCTAssertTrue(dict.allKeys.count == 33); + [self verifyBranchUniversalObjectDictionaryWithAllPropertiesSet:dict]; +} + +- (void)testBranchUniversalObject_objectWithDictionary { + BranchUniversalObject *original = [self branchUniversalObjectWithAllPropertiesSet]; + NSDictionary *dict = [original dictionary]; + + BranchUniversalObject *buo = [BranchUniversalObject objectWithDictionary:dict]; + [self verifyBranchUniversalObjectWithAllPropertiesSet:buo]; +} + +- (void)testBranchUniversalObject_getDictionaryWithCompleteLinkProperties_NoLinkPropertiesSet { + BranchUniversalObject *original = [self branchUniversalObjectWithAllPropertiesSet]; + BranchLinkProperties *linkProperties = [BranchLinkProperties new]; + NSDictionary *dict = [original getDictionaryWithCompleteLinkProperties:linkProperties]; + + XCTAssertNotNil(dict); + XCTAssertTrue([@(0) isEqualToNumber:dict[@"~duration"]]); +} + +- (void)testBranchUniversalObject_getDictionaryWithCompleteLinkProperties_AllLinkPropertiesSet { + BranchUniversalObject *original = [self branchUniversalObjectWithAllPropertiesSet]; + BranchLinkProperties *linkProperties = [BranchLinkProperties new]; + + linkProperties.tags = @[@"tag1", @"tag2"]; + linkProperties.feature = @"test feature"; + linkProperties.alias = @"test alias"; + linkProperties.channel = @"test channel"; + linkProperties.matchDuration = 10; + + // BranchUniversalObject.controlParams overwrites BranchContentMetadata.customMetadata + linkProperties.controlParams = @{ + @"testControlParam": @"test control param", + //@"custom0": @"test control param" + }; + + NSDictionary *dict = [original getDictionaryWithCompleteLinkProperties:linkProperties]; + XCTAssertNotNil(dict); + XCTAssertTrue(dict.allKeys.count == 39); + + XCTAssertTrue([@(10) isEqualToNumber:dict[@"~duration"]]); + XCTAssertTrue([@"test alias" isEqualToString:dict[@"~alias"]]); + XCTAssertTrue([@"test channel" isEqualToString:dict[@"~channel"]]); + XCTAssertTrue([@"test feature" isEqualToString:dict[@"~feature"]]); + + XCTAssertTrue([@"test control param" isEqualToString:dict[@"testControlParam"]]); + + // BranchUniversalObject fields are at the top level of the dictionary + [self verifyBranchUniversalObjectDictionaryWithAllPropertiesSet:dict]; +} + +- (void)testBranchUniversalObject_getParamsForServerRequestWithAddedLinkProperties_NoLinkPropertiesSet { + BranchUniversalObject *original = [self branchUniversalObjectWithAllPropertiesSet]; + BranchLinkProperties *linkProperties = [BranchLinkProperties new]; + + // Nothing is added with this call + NSDictionary *dict = [original getParamsForServerRequestWithAddedLinkProperties:linkProperties]; + + XCTAssertNotNil(dict); + + // BranchUniversalObject fields are at the top level of the dictionary + [self verifyBranchUniversalObjectDictionaryWithAllPropertiesSet:dict]; +} + +- (void)testBranchUniversalObject_getParamsForServerRequestWithAddedLinkProperties_AllLinkPropertiesSet { + BranchUniversalObject *original = [self branchUniversalObjectWithAllPropertiesSet]; + BranchLinkProperties *linkProperties = [BranchLinkProperties new]; + linkProperties.tags = @[@"tag1", @"tag2"]; + linkProperties.feature = @"test feature"; + linkProperties.alias = @"test alias"; + linkProperties.channel = @"test channel"; + linkProperties.matchDuration = 10; + + // BranchUniversalObject.controlParams overwrites BranchContentMetadata.customMetadata + linkProperties.controlParams = @{ + @"testControlParam": @"test control param", + //@"custom0": @"test control param" + }; + + NSDictionary *dict = [original getParamsForServerRequestWithAddedLinkProperties:linkProperties]; + XCTAssertNotNil(dict); + XCTAssertTrue(dict.allKeys.count == 34); + + // only the control parameters are in the dictionary + XCTAssertTrue([@"test control param" isEqualToString:dict[@"testControlParam"]]); + XCTAssertNil(dict[@"~duration"]); + XCTAssertNil(dict[@"~alias"]); + XCTAssertNil(dict[@"~channel"]); + XCTAssertNil(dict[@"~feature"]); + + // BranchUniversalObject fields are at the top level of the dictionary + [self verifyBranchUniversalObjectDictionaryWithAllPropertiesSet:dict]; +} + +@end diff --git a/Branch-TestBed/Branch-SDK-Tests/NSErrorBranchCategoryTests.m b/Branch-TestBed/Branch-SDK-Tests/NSErrorBranchCategoryTests.m deleted file mode 100644 index 794027e57..000000000 --- a/Branch-TestBed/Branch-SDK-Tests/NSErrorBranchCategoryTests.m +++ /dev/null @@ -1,58 +0,0 @@ -/** - @file NSErrorBranchCategoryTests.m - @package Branch-SDK - @brief Branch error tests. - - @author Edward Smith - @date August 2017 - @copyright Copyright © 2017 Branch. All rights reserved. -*/ - -#import "BNCTestCase.h" -#import "NSError+Branch.h" - -@interface NSErrorBranchCategoryTests : BNCTestCase -@end - -@implementation NSErrorBranchCategoryTests - -- (void) testErrorBasic { - - NSError *error = nil; - error = [NSError branchErrorWithCode:BNCInitError]; - XCTAssert(error.domain == [NSError bncErrorDomain]); - XCTAssert(error.code == BNCInitError); - XCTAssert([error.localizedDescription isEqualToString: - @"The Branch user session has not been initialized."] - ); - - NSError *underlyingError = - [NSError errorWithDomain:NSCocoaErrorDomain - code:NSFileNoSuchFileError userInfo:nil]; - error = [NSError branchErrorWithCode:BNCServerProblemError error:underlyingError]; - XCTAssert(error.domain == [NSError bncErrorDomain]); - XCTAssert(error.code == BNCServerProblemError); - XCTAssert( - [error.localizedDescription isEqualToString: - @"Trouble reaching the Branch servers, please try again shortly."] - ); - XCTAssert(error.userInfo[NSUnderlyingErrorKey] == underlyingError); - if ([UIDevice currentDevice].systemVersion.floatValue < 9.0) { - XCTAssert([error.localizedFailureReason isEqualToString: - @"The operation couldn’t be completed. (Cocoa error 4.)"]); - } else { - XCTAssert([error.localizedFailureReason isEqualToString:@"The file doesn’t exist."]); - } - - NSString *message = [NSString stringWithFormat:@"Network operation of class '%@' does not conform to the BNCNetworkOperationProtocol.", - NSStringFromClass([self class])]; - error = [NSError branchErrorWithCode:BNCNetworkServiceInterfaceError localizedMessage:message]; - XCTAssert(error.domain == [NSError bncErrorDomain]); - XCTAssert(error.code == BNCNetworkServiceInterfaceError); - XCTAssert([error.localizedDescription isEqualToString: - @"The underlying network service does not conform to the BNCNetworkOperationProtocol."]); - XCTAssert([error.localizedFailureReason isEqualToString: - @"Network operation of class 'NSErrorBranchCategoryTests' does not conform to the BNCNetworkOperationProtocol."]); -} - -@end diff --git a/Branch-TestBed/Branch-SDK-Tests/NSErrorBranchTests.m b/Branch-TestBed/Branch-SDK-Tests/NSErrorBranchTests.m new file mode 100644 index 000000000..4399b7484 --- /dev/null +++ b/Branch-TestBed/Branch-SDK-Tests/NSErrorBranchTests.m @@ -0,0 +1,54 @@ +/** + @file NSErrorBranchCategoryTests.m + @package Branch-SDK + @brief Branch error tests. + + @author Edward Smith + @date August 2017 + @copyright Copyright © 2017 Branch. All rights reserved. +*/ + +#import +#import "NSError+Branch.h" + +@interface NSErrorBranchTests : XCTestCase +@end + +@implementation NSErrorBranchTests + +- (void)testErrorDomain { + XCTAssertTrue([@"io.branch.sdk.error" isEqualToString:[NSError bncErrorDomain]]); +} + +- (void)testError { + NSError *error = [NSError branchErrorWithCode:BNCInitError]; + XCTAssert(error.domain == [NSError bncErrorDomain]); + XCTAssert(error.code == BNCInitError); + XCTAssert([error.localizedDescription isEqualToString: + @"The Branch user session has not been initialized."] + ); +} + +- (void)testErrorWithUnderlyingError { + NSError *underlyingError = [NSError errorWithDomain:NSCocoaErrorDomain code:NSFileNoSuchFileError userInfo:nil]; + NSError *error = [NSError branchErrorWithCode:BNCServerProblemError error:underlyingError]; + + XCTAssert(error.domain == [NSError bncErrorDomain]); + XCTAssert(error.code == BNCServerProblemError); + XCTAssert([error.localizedDescription isEqualToString: @"Trouble reaching the Branch servers, please try again shortly."]); + + XCTAssert(error.userInfo[NSUnderlyingErrorKey] == underlyingError); + XCTAssert([error.localizedFailureReason isEqualToString:@"The file doesn’t exist."]); +} + +- (void)testErrorWithMessage { + NSString *message = [NSString stringWithFormat:@"Network operation of class '%@' does not conform to the BNCNetworkOperationProtocol.", NSStringFromClass([self class])]; + NSError *error = [NSError branchErrorWithCode:BNCNetworkServiceInterfaceError localizedMessage:message]; + + XCTAssert(error.domain == [NSError bncErrorDomain]); + XCTAssert(error.code == BNCNetworkServiceInterfaceError); + XCTAssert([error.localizedDescription isEqualToString: @"The underlying network service does not conform to the BNCNetworkOperationProtocol."]); + XCTAssert([error.localizedFailureReason isEqualToString: @"Network operation of class 'NSErrorBranchTests' does not conform to the BNCNetworkOperationProtocol."]); +} + +@end diff --git a/Branch-TestBed/Branch-SDK-Tests/NSMutableDictionaryBranchTests.m b/Branch-TestBed/Branch-SDK-Tests/NSMutableDictionaryBranchTests.m new file mode 100644 index 000000000..9fadbefb2 --- /dev/null +++ b/Branch-TestBed/Branch-SDK-Tests/NSMutableDictionaryBranchTests.m @@ -0,0 +1,389 @@ +// +// NSMutableDictionaryBranchTests.m +// Branch-SDK-Tests +// +// Created by Ernest Cho on 2/9/24. +// Copyright © 2024 Branch, Inc. All rights reserved. +// + +#import +#import "NSMutableDictionary+Branch.h" + +@interface NSMutableDictionaryBranchTests : XCTestCase + +@end + +@implementation NSMutableDictionaryBranchTests + +- (void)setUp { + // Put setup code here. This method is called before the invocation of each test method in the class. +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the class. +} + +- (void)testSafeSetObject_StringString { + NSMutableDictionary *dict = [NSMutableDictionary new]; + + [dict bnc_safeSetObject:@"foo" forKey:@"bar"]; + XCTAssertTrue(dict.count == 1); + XCTAssertTrue([@"foo" isEqualToString:dict[@"bar"]]); +} + +- (void)testSafeSetObject_NilString { + NSMutableDictionary *dict = [NSMutableDictionary new]; + + [dict bnc_safeSetObject:nil forKey:@"bar"]; + XCTAssertTrue(dict.count == 0); +} + +- (void)testSafeSetObject_StringNil { + NSMutableDictionary *dict = [NSMutableDictionary new]; + + [dict bnc_safeSetObject:@"foo" forKey:nil]; + XCTAssertTrue(dict.count == 0); +} + +- (void)testSafeAddEntriesFromDictionary { + + // NSStrings are never copied, so use NSMutableStrings + NSMutableDictionary *other = [NSMutableDictionary new]; + other[@"foo"] = [[NSMutableString alloc] initWithString:@"bar"]; + other[@"hello"] = [[NSMutableString alloc] initWithString:@"world"]; + + NSMutableDictionary *dict = [NSMutableDictionary new]; + [dict bnc_safeAddEntriesFromDictionary:other]; + + NSArray *keyset = [other allKeys]; + for (id key in keyset) { + id original = other[key]; + id copy = dict[key]; + + // same object value + XCTAssertTrue([original isEqual:copy]); + + // different object instance + XCTAssertTrue(original != copy); + } +} + +- (void)testSafeAddEntriesFromDictionary_NestedArray { + + // NSStrings are never copied, so use NSMutableStrings + NSMutableDictionary *other = [NSMutableDictionary new]; + other[@"foo"] = [[NSMutableString alloc] initWithString:@"bar"]; + other[@"hello"] = [[NSMutableString alloc] initWithString:@"world"]; + + NSMutableArray *array = [NSMutableArray new]; + [array addObject:[[NSMutableString alloc] initWithString:@"dog"]]; + [array addObject:[[NSMutableString alloc] initWithString:@"cat"]]; + [array addObject:[[NSMutableString alloc] initWithString:@"child"]]; + + other[@"good"] = array; + + NSMutableDictionary *dict = [NSMutableDictionary new]; + [dict bnc_safeAddEntriesFromDictionary:other]; + + NSArray *keyset = [other allKeys]; + for (id key in keyset) { + id original = other[key]; + id copy = dict[key]; + + // same object value + XCTAssertTrue([original isEqual:copy]); + + // different object instance + XCTAssertTrue(original != copy); + } + + // confirm that copyItems is a one layer deep copy + NSArray *arrayCopy = dict[@"good"]; + XCTAssertTrue(array.count == arrayCopy.count); + XCTAssertTrue(array != arrayCopy); + + for (int i=0; i #import "NSString+Branch.h" -#import "BNCTestCase.h" #define _countof(array) (sizeof(array)/sizeof(array[0])) -@interface NSStringBranchTest : BNCTestCase +@interface NSStringBranchTests : XCTestCase @end -@implementation NSStringBranchTest +@implementation NSStringBranchTests -- (void) testMaskEqual { +- (void)testMaskEqual { XCTAssertTrue([@"0123" bnc_isEqualToMaskedString:@"0123"]); XCTAssertFalse([@"0123" bnc_isEqualToMaskedString:@"012"]); XCTAssertFalse([@"0123" bnc_isEqualToMaskedString:@"01234"]); diff --git a/Branch-TestBed/Branch-SDK-Unhosted-Tests/Branch_setBranchKeyTests.m b/Branch-TestBed/Branch-SDK-Unhosted-Tests/Branch_setBranchKeyTests.m index 7cc15272f..3792b3933 100644 --- a/Branch-TestBed/Branch-SDK-Unhosted-Tests/Branch_setBranchKeyTests.m +++ b/Branch-TestBed/Branch-SDK-Unhosted-Tests/Branch_setBranchKeyTests.m @@ -8,6 +8,7 @@ #import #import "Branch.h" +#import "NSError+Branch.h" // expose private methods used by tests @interface Branch() @@ -96,4 +97,37 @@ - (void)testSetBranchKeyWithError_validKeyTwice { XCTAssert([[Branch branchKey] isEqualToString:testKey]); } +- (void)testResetBranchKey { + NSString *testKey = @"key_live_foo"; + [Branch setBranchKey:testKey]; + + XCTAssert([[Branch branchKey] isEqualToString:testKey]); + + [Branch resetBranchKey]; + XCTAssertNil([Branch branchKey], @"Branch key should be reset to nil"); +} + +- (void)testSetBranchKey_Error_InvalidKeyType { + NSError *error = nil; + NSNumber *invalidKey = @123; + + [Branch setBranchKey:(NSString *)invalidKey error:&error]; + XCTAssertNotNil(error); + XCTAssertEqual(error.code, BNCInitError); + XCTAssertEqualObjects(error.localizedFailureReason, @"Invalid Branch key of type '__NSCFNumber'."); +} + +- (void)testSetBranchKey_Error_InvalidKeyFormat { + NSError *error = nil; + NSString *invalidFormatKey = @"invalid_format"; + + [Branch setBranchKey:invalidFormatKey error:&error]; + XCTAssertNotNil(error); + XCTAssertEqual(error.code, BNCInitError); + XCTAssertEqualObjects(error.localizedFailureReason, @"Invalid Branch key format. Did you add your Branch key to your Info.plist? Passed key is 'invalid_format'."); +} + + + + @end diff --git a/Branch-TestBed/Branch-TestBed.xcodeproj/Branch-TestBed.xctestplan b/Branch-TestBed/Branch-TestBed.xcodeproj/Branch-TestBed.xctestplan index 56bade219..95229bf92 100644 --- a/Branch-TestBed/Branch-TestBed.xcodeproj/Branch-TestBed.xctestplan +++ b/Branch-TestBed/Branch-TestBed.xcodeproj/Branch-TestBed.xctestplan @@ -30,7 +30,8 @@ "resolvedPath" : "..\/Simulate-FirstRun.xcappdata" }, "skippedTests" : [ - "BNCServerInterfaceTests" + "BNCServerInterfaceTests", + "BranchDelegateTest" ], "target" : { "containerPath" : "container:Branch-TestBed.xcodeproj", diff --git a/Branch-TestBed/Branch-TestBed.xcodeproj/project.pbxproj b/Branch-TestBed/Branch-TestBed.xcodeproj/project.pbxproj index b9ca2c58f..23e32a6c7 100644 --- a/Branch-TestBed/Branch-TestBed.xcodeproj/project.pbxproj +++ b/Branch-TestBed/Branch-TestBed.xcodeproj/project.pbxproj @@ -15,166 +15,191 @@ 0372078825E9F81100F29C30 /* UITestCaseMisc.m in Sources */ = {isa = PBXBuildFile; fileRef = 0372078725E9F81000F29C30 /* UITestCaseMisc.m */; }; 0399DD122599BF8A00CDB36E /* UITestSendV2Event.m in Sources */ = {isa = PBXBuildFile; fileRef = 0399DD112599BF8A00CDB36E /* UITestSendV2Event.m */; }; 03B49EEB25F9F315000BF105 /* UITestCase0OpenNInstall.m in Sources */ = {isa = PBXBuildFile; fileRef = 03B49EEA25F9F315000BF105 /* UITestCase0OpenNInstall.m */; }; - 3A78D574251EB59B002A25CF /* BranchJsonConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A78D573251EB59B002A25CF /* BranchJsonConfig.h */; }; - 3A78D576251EB5BF002A25CF /* BranchJsonConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A78D575251EB5BF002A25CF /* BranchJsonConfig.m */; }; - 4665AF261B28B9BB00184037 /* BranchConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 4665AF251B28B9BB00184037 /* BranchConstants.m */; }; 466B584F1B17775900A69EDE /* AdSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 67BBCF271A69E49A009C7DAE /* AdSupport.framework */; settings = {ATTRIBUTES = (Required, ); }; }; 466B58521B17776500A69EDE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 670016631940F51400A9E103 /* Foundation.framework */; settings = {ATTRIBUTES = (Required, ); }; }; 466B58531B17776A00A69EDE /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 670016671940F51400A9E103 /* UIKit.framework */; }; - 466B58551B17779C00A69EDE /* Branch.m in Sources */ = {isa = PBXBuildFile; fileRef = 670016BE1946309100A9E103 /* Branch.m */; }; - 466B58591B17779C00A69EDE /* BNCPreferenceHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 670016C21946309100A9E103 /* BNCPreferenceHelper.m */; }; - 466B585F1B17779C00A69EDE /* BNCSystemObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = 670016C81946309100A9E103 /* BNCSystemObserver.m */; }; - 466B58681B17779C00A69EDE /* BNCLinkData.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E30BCF31A71EEEE00AC7402 /* BNCLinkData.m */; }; - 466B586A1B17779C00A69EDE /* BNCLinkCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E30BCF61A72FE7900AC7402 /* BNCLinkCache.m */; }; - 466B586C1B17779C00A69EDE /* BranchActivityItemProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = D258D2C51A794D64004A1C90 /* BranchActivityItemProvider.m */; }; - 466B586E1B17779C00A69EDE /* BNCEncodingUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 464EA39A1ACB38EC000E4094 /* BNCEncodingUtils.m */; }; 466B58811B1778DB00A69EDE /* libBranch.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 466B58381B17773000A69EDE /* libBranch.a */; }; - 466D5A121B5991E3009DB845 /* BNCContentDiscoveryManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 466D5A101B5991E3009DB845 /* BNCContentDiscoveryManager.m */; }; 4683F0761B20A73F00A432E7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 670016731940F51400A9E103 /* AppDelegate.m */; }; 46DC406E1B2A328900D2D203 /* AdSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 67BBCF271A69E49A009C7DAE /* AdSupport.framework */; }; 4AB16368239E3A2700D42931 /* DispatchToIsolationQueueTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4AB16367239E3A2700D42931 /* DispatchToIsolationQueueTests.m */; }; - 4D1683A62098C902008819E3 /* BranchSetIdentityTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D16837B2098C901008819E3 /* BranchSetIdentityTests.m */; }; - 4D1683A82098C902008819E3 /* BNCServerRequestQueueOldTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D16837D2098C901008819E3 /* BNCServerRequestQueueOldTests.m */; }; - 4D1683AA2098C902008819E3 /* BranchOpenRequestTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D16837F2098C901008819E3 /* BranchOpenRequestTests.m */; }; - 4D1683AC2098C902008819E3 /* BranchInstallRequestTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D1683822098C901008819E3 /* BranchInstallRequestTests.m */; }; 4D1683AE2098C902008819E3 /* BNCLinkDataTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D1683842098C901008819E3 /* BNCLinkDataTests.m */; }; - 4D1683B02098C902008819E3 /* BranchSDKFunctionalityTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D1683862098C901008819E3 /* BranchSDKFunctionalityTests.m */; }; 4D1683B62098C902008819E3 /* BNCURLFilterTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D16838C2098C901008819E3 /* BNCURLFilterTests.m */; }; - 4D1683B72098C902008819E3 /* BNCTestCase.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D16838D2098C901008819E3 /* BNCTestCase.m */; }; - 4D1683B82098C902008819E3 /* BNCEncodingUtils.Test.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D16838E2098C901008819E3 /* BNCEncodingUtils.Test.m */; }; + 4D1683B82098C902008819E3 /* BNCEncodingUtilsTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D16838E2098C901008819E3 /* BNCEncodingUtilsTests.m */; }; 4D1683B92098C902008819E3 /* BNCSystemObserverTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D16838F2098C901008819E3 /* BNCSystemObserverTests.m */; }; - 4D1683BA2098C902008819E3 /* BNCLog.Test.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D1683902098C901008819E3 /* BNCLog.Test.m */; }; - 4D1683BC2098C902008819E3 /* BranchDelegate.Test.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D1683922098C901008819E3 /* BranchDelegate.Test.m */; }; - 4D1683BD2098C902008819E3 /* BranchNetworkScenario.Test.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D1683932098C901008819E3 /* BranchNetworkScenario.Test.m */; }; - 4D1683C02098C902008819E3 /* BranchUniversalObject.Test.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D1683962098C901008819E3 /* BranchUniversalObject.Test.m */; }; - 4D1683C12098C902008819E3 /* BNCApplication.Test.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D1683972098C901008819E3 /* BNCApplication.Test.m */; }; + 4D1683C02098C902008819E3 /* BranchUniversalObjectTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D1683962098C901008819E3 /* BranchUniversalObjectTests.m */; }; + 4D1683C12098C902008819E3 /* BNCApplicationTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D1683972098C901008819E3 /* BNCApplicationTests.m */; }; 4D1683C62098C902008819E3 /* BranchEvent.Test.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D16839C2098C901008819E3 /* BranchEvent.Test.m */; }; - 4D1683C72098C902008819E3 /* BNCCrashlyticsWrapper.Test.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D16839D2098C901008819E3 /* BNCCrashlyticsWrapper.Test.m */; }; - 4D1683C82098C902008819E3 /* NSString+Branch.Test.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D16839E2098C901008819E3 /* NSString+Branch.Test.m */; }; + 4D1683C72098C902008819E3 /* BNCCrashlyticsWrapperTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D16839D2098C901008819E3 /* BNCCrashlyticsWrapperTests.m */; }; + 4D1683C82098C902008819E3 /* NSStringBranchTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D16839E2098C901008819E3 /* NSStringBranchTests.m */; }; 4D1683CA2098C902008819E3 /* BNCPreferenceHelperTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D1683A02098C901008819E3 /* BNCPreferenceHelperTests.m */; }; 4D1851C120180F3300E48994 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D1851BF20180F0600E48994 /* Security.framework */; }; - 4D35141C1E3201D80085EBA1 /* NSMutableDictionary+Branch.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D35141A1E3201D80085EBA1 /* NSMutableDictionary+Branch.m */; }; - 4D3FA94B1DFF31EB00E2B6A9 /* BNCConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D3FA94A1DFF31EB00E2B6A9 /* BNCConfig.m */; }; - 4D59B51F2006979C00F89FD5 /* BNCApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D59B51B2006979B00F89FD5 /* BNCApplication.h */; }; - 4D59B5202006979C00F89FD5 /* BNCApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D59B51C2006979B00F89FD5 /* BNCApplication.m */; }; - 4D59B5212006979C00F89FD5 /* BNCKeyChain.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D59B51D2006979C00F89FD5 /* BNCKeyChain.h */; }; - 4D59B5222006979C00F89FD5 /* BNCKeyChain.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D59B51E2006979C00F89FD5 /* BNCKeyChain.m */; }; - 4D7881F7209CF28F002B750F /* BNCThreads.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D7881F5209CF28E002B750F /* BNCThreads.m */; }; - 4D7881F8209CF28F002B750F /* BNCThreads.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D7881F6209CF28E002B750F /* BNCThreads.h */; }; - 4D7881FD209CF2D4002B750F /* BNCTestCase.strings in Resources */ = {isa = PBXBuildFile; fileRef = 4D7881F9209CF2D4002B750F /* BNCTestCase.strings */; }; - 4D7881FE209CF2D4002B750F /* BNCTestCase.Test.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D7881FA209CF2D4002B750F /* BNCTestCase.Test.m */; }; - 4D7881FF209CF2D4002B750F /* BNCApplication+BNCTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D7881FC209CF2D4002B750F /* BNCApplication+BNCTest.m */; }; 4D93D8622098D43C00CFABA6 /* UITestSafari.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D93D8602098D43C00CFABA6 /* UITestSafari.m */; }; - 4D955CCC2035021400FB8008 /* BNCURLFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D955CCA2035021400FB8008 /* BNCURLFilter.h */; }; - 4D955CCD2035021400FB8008 /* BNCURLFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D955CCB2035021400FB8008 /* BNCURLFilter.m */; }; - 4D9607F41FBF9473008AB3C2 /* UIViewController+Branch.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D9607F21FBF9472008AB3C2 /* UIViewController+Branch.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4D9607F51FBF9473008AB3C2 /* UIViewController+Branch.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D9607F31FBF9473008AB3C2 /* UIViewController+Branch.m */; }; - 4DA577181E67B1D600A43BDD /* BNCLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 4DA577161E67B1D600A43BDD /* BNCLog.m */; }; - 4DB327FF1FA10B9000ACF9B0 /* BranchDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DB327FD1FA10B9000ACF9B0 /* BranchDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4DB328001FA10B9000ACF9B0 /* BranchDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4DB327FE1FA10B9000ACF9B0 /* BranchDelegate.m */; }; - 4DB567341E79F46000A8A324 /* BranchShareLink.m in Sources */ = {isa = PBXBuildFile; fileRef = 4DB567321E79F46000A8A324 /* BranchShareLink.m */; }; - 4DBC88651F3A55B700E119BF /* NSString+Branch.m in Sources */ = {isa = PBXBuildFile; fileRef = 4DA577211E67B28700A43BDD /* NSString+Branch.m */; }; 4DBEFFF61FB114F900F7C41B /* ArrayPickerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4DBEFFF51FB114F900F7C41B /* ArrayPickerView.m */; }; - 4DCAC8021F426F7C00405D1D /* BNCConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E6ACAF919E324120066913E /* BNCConfig.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4DCAC8031F426F7C00405D1D /* BNCContentDiscoveryManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 466D5A0F1B5991E3009DB845 /* BNCContentDiscoveryManager.h */; }; - 4DCAC8051F426F7C00405D1D /* BNCDeviceInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D5882301CA1BEEA00FF6358 /* BNCDeviceInfo.h */; }; - 4DCAC8061F426F7C00405D1D /* BNCEncodingUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 464EA3991ACB38EC000E4094 /* BNCEncodingUtils.h */; }; - 4DCAC8091F426F7C00405D1D /* BNCLinkCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E30BCF51A72FE7900AC7402 /* BNCLinkCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4DCAC80A1F426F7C00405D1D /* BNCLinkData.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E30BCF21A71EEEE00AC7402 /* BNCLinkData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4DCAC80B1F426F7C00405D1D /* BNCLog.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DA577151E67B1D600A43BDD /* BNCLog.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4DCAC80C1F426F7C00405D1D /* BNCPreferenceHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 670016C11946309100A9E103 /* BNCPreferenceHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4DCAC80E1F426F7C00405D1D /* BNCSystemObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 670016C71946309100A9E103 /* BNCSystemObserver.h */; }; - 4DCAC8101F426F7C00405D1D /* Branch.h in Headers */ = {isa = PBXBuildFile; fileRef = 670016BD1946309100A9E103 /* Branch.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4DCAC8111F426F7C00405D1D /* BranchActivityItemProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = D258D2C41A794D64004A1C90 /* BranchActivityItemProvider.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4DCAC8121F426F7C00405D1D /* BranchConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 4665AF221B28935700184037 /* BranchConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4DCAC8161F426F7C00405D1D /* BranchCSSearchableItemAttributeSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 54391A131BA249FA0061CB0F /* BranchCSSearchableItemAttributeSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4DCAC8171F426F7C00405D1D /* BranchDeepLinkingController.h in Headers */ = {isa = PBXBuildFile; fileRef = 46DBB42F1B335A9B00642FC8 /* BranchDeepLinkingController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4DCAC8181F426F7C00405D1D /* BranchLinkProperties.h in Headers */ = {isa = PBXBuildFile; fileRef = 54FF1F8F1BD1DC320004CE2E /* BranchLinkProperties.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4DCAC8191F426F7C00405D1D /* BranchShareLink.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DB567311E79F46000A8A324 /* BranchShareLink.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4DCAC81A1F426F7C00405D1D /* BranchUniversalObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 54FF1F8B1BD1D4AE0004CE2E /* BranchUniversalObject.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4DCAC8301F426F7C00405D1D /* NSMutableDictionary+Branch.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D3514191E3201D80085EBA1 /* NSMutableDictionary+Branch.h */; }; - 4DCAC8311F426F7C00405D1D /* NSString+Branch.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DA577201E67B28700A43BDD /* NSString+Branch.h */; }; - 4DCF4AFB1F4388F600AF9AAB /* BranchEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 4DCF4AF91F4388F600AF9AAB /* BranchEvent.m */; }; - 4DCF4B031F438A8700AF9AAB /* BranchEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DCF4AF81F4388F600AF9AAB /* BranchEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4DD056122177A65C009BD3DD /* libOCMock.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4DD056112177A65C009BD3DD /* libOCMock.a */; }; - 4DD056142177A65C009BD3DD /* libOHHTTPStubs.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4DD056132177A65C009BD3DD /* libOHHTTPStubs.a */; }; 4DE235641FB12C2700D4E5A9 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4DBEFFFB1FB12A1000F7C41B /* Main.storyboard */; }; - 4DE6491A1FE1D7F500226507 /* BNCFieldDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DE649191FE1D7F500226507 /* BNCFieldDefines.h */; }; - 54391A161BA249FA0061CB0F /* BranchCSSearchableItemAttributeSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 54391A141BA249FA0061CB0F /* BranchCSSearchableItemAttributeSet.m */; }; - 54FF1F8E1BD1D4AE0004CE2E /* BranchUniversalObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 54FF1F8C1BD1D4AE0004CE2E /* BranchUniversalObject.m */; }; - 54FF1F921BD1DC320004CE2E /* BranchLinkProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = 54FF1F901BD1DC320004CE2E /* BranchLinkProperties.m */; }; 5F205D05231864E800C776D1 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5F205D04231864E800C776D1 /* WebKit.framework */; settings = {ATTRIBUTES = (Required, ); }; }; 5F205D062318659500C776D1 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5F205D04231864E800C776D1 /* WebKit.framework */; }; 5F205D0823186AF700C776D1 /* BNCUserAgentCollectorTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F205D022318641700C776D1 /* BNCUserAgentCollectorTests.m */; }; - 5F22AFC0240600A200837CF5 /* BNCCallbackMap.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FE693F62405E91500E3AEE2 /* BNCCallbackMap.m */; }; - 5F22AFC1240600BE00837CF5 /* BNCCallbackMap.m in Headers */ = {isa = PBXBuildFile; fileRef = 5FE693F62405E91500E3AEE2 /* BNCCallbackMap.m */; }; - 5F32D7C3242AC339000DE539 /* BranchScene.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F32D7C1242AC338000DE539 /* BranchScene.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F32D7C4242AC339000DE539 /* BranchScene.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F32D7C2242AC338000DE539 /* BranchScene.m */; }; - 5F38020E24DCC2E800E6FAFD /* BranchContentPathProperties.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F3801DF24DCC2E200E6FAFD /* BranchContentPathProperties.h */; }; - 5F38020F24DCC2E800E6FAFD /* BNCServerRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F3801E024DCC2E200E6FAFD /* BNCServerRequest.m */; }; - 5F38021324DCC2E800E6FAFD /* BranchInstallRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F3801E424DCC2E300E6FAFD /* BranchInstallRequest.m */; }; - 5F38021524DCC2E800E6FAFD /* BranchShortUrlSyncRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F3801E624DCC2E300E6FAFD /* BranchShortUrlSyncRequest.m */; }; - 5F38021624DCC2E800E6FAFD /* BranchSpotlightUrlRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F3801E724DCC2E300E6FAFD /* BranchSpotlightUrlRequest.h */; }; - 5F38021724DCC2E800E6FAFD /* BranchOpenRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F3801E824DCC2E300E6FAFD /* BranchOpenRequest.m */; }; - 5F38021A24DCC2E800E6FAFD /* BNCServerInterface.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F3801EB24DCC2E400E6FAFD /* BNCServerInterface.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F38021B24DCC2E800E6FAFD /* BranchContentPathProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F3801EC24DCC2E400E6FAFD /* BranchContentPathProperties.m */; }; - 5F38021D24DCC2E800E6FAFD /* BranchLATDRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F3801EE24DCC2E400E6FAFD /* BranchLATDRequest.m */; }; - 5F38021F24DCC2E800E6FAFD /* BNCServerResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F3801F024DCC2E400E6FAFD /* BNCServerResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F38022424DCC2E800E6FAFD /* BranchShortUrlRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F3801F524DCC2E500E6FAFD /* BranchShortUrlRequest.h */; }; - 5F38022524DCC2E800E6FAFD /* BranchLATDRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F3801F624DCC2E500E6FAFD /* BranchLATDRequest.h */; }; - 5F38022624DCC2E800E6FAFD /* BranchShortUrlSyncRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F3801F724DCC2E500E6FAFD /* BranchShortUrlSyncRequest.h */; }; - 5F38022824DCC2E800E6FAFD /* BNCNetworkService.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F3801F924DCC2E500E6FAFD /* BNCNetworkService.m */; }; - 5F38022924DCC2E800E6FAFD /* BNCNetworkServiceProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F3801FA24DCC2E500E6FAFD /* BNCNetworkServiceProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F38022A24DCC2E800E6FAFD /* BranchContentDiscoveryManifest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F3801FB24DCC2E500E6FAFD /* BranchContentDiscoveryManifest.m */; }; - 5F38022B24DCC2E800E6FAFD /* BNCServerResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F3801FC24DCC2E600E6FAFD /* BNCServerResponse.m */; }; - 5F38022C24DCC2E800E6FAFD /* BranchOpenRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F3801FD24DCC2E600E6FAFD /* BranchOpenRequest.h */; }; - 5F38022D24DCC2E800E6FAFD /* BranchInstallRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F3801FE24DCC2E600E6FAFD /* BranchInstallRequest.h */; }; - 5F38022F24DCC2E800E6FAFD /* BranchSpotlightUrlRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F38020024DCC2E600E6FAFD /* BranchSpotlightUrlRequest.m */; }; - 5F38023024DCC2E800E6FAFD /* BNCServerRequestQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F38020124DCC2E600E6FAFD /* BNCServerRequestQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F38023124DCC2E800E6FAFD /* BNCNetworkService.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F38020224DCC2E600E6FAFD /* BNCNetworkService.h */; }; - 5F38023224DCC2E800E6FAFD /* BNCServerRequestQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F38020324DCC2E600E6FAFD /* BNCServerRequestQueue.m */; }; - 5F38023324DCC2E800E6FAFD /* BranchContentDiscoveryManifest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F38020424DCC2E600E6FAFD /* BranchContentDiscoveryManifest.h */; }; - 5F38023624DCC2E800E6FAFD /* BNCServerInterface.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F38020724DCC2E700E6FAFD /* BNCServerInterface.m */; }; - 5F38023724DCC2E800E6FAFD /* BNCServerRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F38020824DCC2E700E6FAFD /* BNCServerRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F38023824DCC2E800E6FAFD /* BranchContentDiscoverer.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F38020924DCC2E700E6FAFD /* BranchContentDiscoverer.h */; }; - 5F38023A24DCC2E800E6FAFD /* BranchShortUrlRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F38020B24DCC2E700E6FAFD /* BranchShortUrlRequest.m */; }; - 5F38023B24DCC2E800E6FAFD /* BranchContentDiscoverer.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F38020C24DCC2E700E6FAFD /* BranchContentDiscoverer.m */; }; - 5F3D6714232C589100454FF1 /* BranchLastAttributedTouchData.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F3D6712232C589100454FF1 /* BranchLastAttributedTouchData.m */; }; - 5F3D6715232C589100454FF1 /* BranchLastAttributedTouchData.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F3D6713232C589100454FF1 /* BranchLastAttributedTouchData.h */; settings = {ATTRIBUTES = (Public, ); }; }; 5F3D671B233062FD00454FF1 /* BNCJsonLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F3D671A233062FD00454FF1 /* BNCJsonLoader.m */; }; 5F3D671C233062FD00454FF1 /* BNCJsonLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F3D671A233062FD00454FF1 /* BNCJsonLoader.m */; }; - 5F4101F526851DC7003699AD /* BNCPasteboard.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F4101F326851DC7003699AD /* BNCPasteboard.h */; }; - 5F4101F626851DC7003699AD /* BNCPasteboard.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F4101F426851DC7003699AD /* BNCPasteboard.m */; }; 5F42763325DB3694005B9BBC /* AdServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5F42763225DB3694005B9BBC /* AdServices.framework */; }; - 5F437E38237DE1320052064B /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5F437E37237DE1320052064B /* CoreTelephony.framework */; settings = {ATTRIBUTES = (Required, ); }; }; - 5F437E3D237E03C00052064B /* BNCDeviceSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F437E3B237E03C00052064B /* BNCDeviceSystem.h */; }; - 5F437E3E237E03C00052064B /* BNCDeviceSystem.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F437E3C237E03C00052064B /* BNCDeviceSystem.m */; }; 5F437E40237E1A560052064B /* BNCDeviceSystemTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F437E3F237E1A560052064B /* BNCDeviceSystemTests.m */; }; - 5F5335C32A8D92C5006CF171 /* BNCRequestFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F5335C12A8D92C5006CF171 /* BNCRequestFactory.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5F5FDA102B7DE20800F14A43 /* BranchLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F5FDA0F2B7DE20800F14A43 /* BranchLogger.m */; }; + 5F5FDA122B7DE22A00F14A43 /* BranchLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F5FDA112B7DE22A00F14A43 /* BranchLogger.h */; }; + 5F5FDA142B7DE27D00F14A43 /* BranchLoggerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F5FDA132B7DE27D00F14A43 /* BranchLoggerTests.m */; }; + 5F644BB92B7AA811000DCD78 /* NSError+Branch.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644B262B7AA810000DCD78 /* NSError+Branch.m */; }; + 5F644BBA2B7AA811000DCD78 /* BNCUserAgentCollector.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644B272B7AA810000DCD78 /* BNCUserAgentCollector.m */; }; + 5F644BBB2B7AA811000DCD78 /* BNCEncodingUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644B282B7AA810000DCD78 /* BNCEncodingUtils.m */; }; + 5F644BBC2B7AA811000DCD78 /* BranchUniversalObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644B292B7AA810000DCD78 /* BranchUniversalObject.m */; }; + 5F644BBD2B7AA811000DCD78 /* BranchPasteControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644B2A2B7AA810000DCD78 /* BranchPasteControl.m */; }; + 5F644BBE2B7AA811000DCD78 /* BNCApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644B2B2B7AA810000DCD78 /* BNCApplication.m */; }; + 5F644BBF2B7AA811000DCD78 /* BNCDeviceSystem.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644B2C2B7AA810000DCD78 /* BNCDeviceSystem.m */; }; + 5F644BC02B7AA811000DCD78 /* NSMutableDictionary+Branch.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644B2D2B7AA810000DCD78 /* NSMutableDictionary+Branch.m */; }; + 5F644BC12B7AA811000DCD78 /* BNCServerRequestQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644B2E2B7AA810000DCD78 /* BNCServerRequestQueue.m */; }; + 5F644BC22B7AA811000DCD78 /* BNCUrlQueryParameter.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644B2F2B7AA810000DCD78 /* BNCUrlQueryParameter.m */; }; + 5F644BC32B7AA811000DCD78 /* BNCDeepLinkViewControllerInstance.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644B302B7AA810000DCD78 /* BNCDeepLinkViewControllerInstance.m */; }; + 5F644BC42B7AA811000DCD78 /* BranchScene.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644B312B7AA810000DCD78 /* BranchScene.m */; }; + 5F644BC52B7AA811000DCD78 /* BNCContentDiscoveryManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644B322B7AA810000DCD78 /* BNCContentDiscoveryManager.m */; }; + 5F644BC62B7AA811000DCD78 /* Branch+Validator.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644B332B7AA810000DCD78 /* Branch+Validator.m */; }; + 5F644BC72B7AA811000DCD78 /* BranchInstallRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644B342B7AA810000DCD78 /* BranchInstallRequest.m */; }; + 5F644BC82B7AA811000DCD78 /* BranchPluginSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644B352B7AA810000DCD78 /* BranchPluginSupport.m */; }; + 5F644BC92B7AA811000DCD78 /* NSString+Branch.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644B362B7AA810000DCD78 /* NSString+Branch.m */; }; + 5F644BCA2B7AA811000DCD78 /* BNCSystemObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644B372B7AA810000DCD78 /* BNCSystemObserver.m */; }; + 5F644BCC2B7AA811000DCD78 /* BNCURLFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644B392B7AA810000DCD78 /* BNCURLFilter.m */; }; + 5F644BCD2B7AA811000DCD78 /* BNCServerRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644B3A2B7AA810000DCD78 /* BNCServerRequest.m */; }; + 5F644BCE2B7AA811000DCD78 /* BNCNetworkInterface.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644B3B2B7AA810000DCD78 /* BNCNetworkInterface.m */; }; + 5F644BCF2B7AA811000DCD78 /* BNCPreferenceHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644B3C2B7AA810000DCD78 /* BNCPreferenceHelper.m */; }; + 5F644BD02B7AA811000DCD78 /* BNCConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644B3D2B7AA810000DCD78 /* BNCConfig.m */; }; + 5F644BD12B7AA811000DCD78 /* BranchConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644B3E2B7AA810000DCD78 /* BranchConstants.m */; }; + 5F644BD22B7AA811000DCD78 /* BranchContentDiscoveryManifest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644B3F2B7AA810000DCD78 /* BranchContentDiscoveryManifest.m */; }; + 5F644BD32B7AA811000DCD78 /* BranchSpotlightUrlRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644B402B7AA810000DCD78 /* BranchSpotlightUrlRequest.m */; }; + 5F644BD52B7AA811000DCD78 /* BranchContentDiscoverer.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644B422B7AA810000DCD78 /* BranchContentDiscoverer.m */; }; + 5F644BD62B7AA811000DCD78 /* BNCDeviceInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644B432B7AA810000DCD78 /* BNCDeviceInfo.m */; }; + 5F644BD72B7AA811000DCD78 /* BNCNetworkService.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644B442B7AA810000DCD78 /* BNCNetworkService.m */; }; + 5F644BD82B7AA811000DCD78 /* BNCReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644B452B7AA810000DCD78 /* BNCReachability.m */; }; + 5F644BD92B7AA811000DCD78 /* BNCRequestFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644B462B7AA810000DCD78 /* BNCRequestFactory.m */; }; + 5F644BDA2B7AA811000DCD78 /* BNCReferringURLUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644B472B7AA810000DCD78 /* BNCReferringURLUtility.m */; }; + 5F644BDB2B7AA811000DCD78 /* BNCProductCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644B482B7AA810000DCD78 /* BNCProductCategory.m */; }; + 5F644BDC2B7AA811000DCD78 /* BNCCrashlyticsWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644B492B7AA810000DCD78 /* BNCCrashlyticsWrapper.m */; }; + 5F644BDD2B7AA811000DCD78 /* BNCServerInterface.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644B4A2B7AA810000DCD78 /* BNCServerInterface.m */; }; + 5F644BDE2B7AA811000DCD78 /* BranchJsonConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644B4B2B7AA810000DCD78 /* BranchJsonConfig.m */; }; + 5F644BDF2B7AA811000DCD78 /* BranchLATDRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644B4C2B7AA810000DCD78 /* BranchLATDRequest.m */; }; + 5F644BE02B7AA811000DCD78 /* BNCPartnerParameters.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644B4D2B7AA810000DCD78 /* BNCPartnerParameters.m */; }; + 5F644BE12B7AA811000DCD78 /* BranchCSSearchableItemAttributeSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644B4E2B7AA810000DCD78 /* BranchCSSearchableItemAttributeSet.m */; }; + 5F644BE22B7AA811000DCD78 /* BranchActivityItemProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644B4F2B7AA810000DCD78 /* BranchActivityItemProvider.m */; }; + 5F644BE32B7AA811000DCD78 /* BranchQRCode.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644B502B7AA810000DCD78 /* BranchQRCode.m */; }; + 5F644BE42B7AA811000DCD78 /* BNCKeyChain.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644B512B7AA810000DCD78 /* BNCKeyChain.m */; }; + 5F644BE52B7AA811000DCD78 /* BNCLinkData.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B532B7AA810000DCD78 /* BNCLinkData.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5F644BE62B7AA811000DCD78 /* BranchDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B542B7AA810000DCD78 /* BranchDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5F644BE72B7AA811000DCD78 /* BranchQRCode.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B552B7AA810000DCD78 /* BranchQRCode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5F644BE82B7AA811000DCD78 /* BranchActivityItemProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B562B7AA810000DCD78 /* BranchActivityItemProvider.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5F644BE92B7AA811000DCD78 /* BranchCSSearchableItemAttributeSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B572B7AA810000DCD78 /* BranchCSSearchableItemAttributeSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5F644BEA2B7AA811000DCD78 /* BranchLinkProperties.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B582B7AA810000DCD78 /* BranchLinkProperties.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5F644BEB2B7AA811000DCD78 /* BranchSDK.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B592B7AA810000DCD78 /* BranchSDK.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5F644BEC2B7AA811000DCD78 /* BNCCurrency.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B5A2B7AA810000DCD78 /* BNCCurrency.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5F644BED2B7AA811000DCD78 /* BranchLastAttributedTouchData.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B5B2B7AA810000DCD78 /* BranchLastAttributedTouchData.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5F644BEE2B7AA811000DCD78 /* Branch.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B5C2B7AA810000DCD78 /* Branch.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5F644BEF2B7AA811000DCD78 /* BNCServerResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B5D2B7AA810000DCD78 /* BNCServerResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5F644BF02B7AA811000DCD78 /* BNCCallbacks.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B5E2B7AA810000DCD78 /* BNCCallbacks.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5F644BF12B7AA811000DCD78 /* BranchShareLink.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B5F2B7AA810000DCD78 /* BranchShareLink.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5F644BF22B7AA811000DCD78 /* BNCLinkCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B602B7AA810000DCD78 /* BNCLinkCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5F644BF32B7AA811000DCD78 /* BNCInitSessionResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B612B7AA810000DCD78 /* BNCInitSessionResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5F644BF42B7AA811000DCD78 /* BranchEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B622B7AA810000DCD78 /* BranchEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5F644BF52B7AA811000DCD78 /* BNCNetworkServiceProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B632B7AA810000DCD78 /* BNCNetworkServiceProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5F644BF62B7AA811000DCD78 /* BNCServerRequestQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B642B7AA810000DCD78 /* BNCServerRequestQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5F644BF72B7AA811000DCD78 /* BranchPasteControl.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B652B7AA810000DCD78 /* BranchPasteControl.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5F644BF82B7AA811000DCD78 /* BranchUniversalObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B662B7AA810000DCD78 /* BranchUniversalObject.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5F644BF92B7AA811000DCD78 /* BNCServerRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B672B7AA810000DCD78 /* BNCServerRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5F644BFA2B7AA811000DCD78 /* BranchDeepLinkingController.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B682B7AA810000DCD78 /* BranchDeepLinkingController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5F644BFB2B7AA811000DCD78 /* BranchPluginSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B692B7AA810000DCD78 /* BranchPluginSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5F644BFC2B7AA811000DCD78 /* BranchScene.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B6A2B7AA810000DCD78 /* BranchScene.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5F644BFD2B7AA811000DCD78 /* BNCPreferenceHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B6B2B7AA810000DCD78 /* BNCPreferenceHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5F644BFE2B7AA811000DCD78 /* BNCServerInterface.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B6C2B7AA810000DCD78 /* BNCServerInterface.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5F644BFF2B7AA811000DCD78 /* BNCProductCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B6D2B7AA810000DCD78 /* BNCProductCategory.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5F644C002B7AA811000DCD78 /* BNCKeyChain.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B6F2B7AA810000DCD78 /* BNCKeyChain.h */; }; + 5F644C012B7AA811000DCD78 /* BNCAppleReceipt.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B702B7AA810000DCD78 /* BNCAppleReceipt.h */; }; + 5F644C022B7AA811000DCD78 /* BNCPasteboard.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B712B7AA810000DCD78 /* BNCPasteboard.h */; }; + 5F644C032B7AA811000DCD78 /* BranchContentPathProperties.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B722B7AA810000DCD78 /* BranchContentPathProperties.h */; }; + 5F644C042B7AA811000DCD78 /* BNCSKAdNetwork.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B732B7AA810000DCD78 /* BNCSKAdNetwork.h */; }; + 5F644C052B7AA811000DCD78 /* BNCJSONUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B742B7AA810000DCD78 /* BNCJSONUtility.h */; }; + 5F644C062B7AA811000DCD78 /* UIViewController+Branch.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B752B7AA810000DCD78 /* UIViewController+Branch.h */; }; + 5F644C072B7AA811000DCD78 /* BNCAppGroupsData.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B762B7AA810000DCD78 /* BNCAppGroupsData.h */; }; + 5F644C092B7AA811000DCD78 /* BNCServerAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B782B7AA810000DCD78 /* BNCServerAPI.h */; }; + 5F644C0A2B7AA811000DCD78 /* BNCSpotlightService.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B792B7AA810000DCD78 /* BNCSpotlightService.h */; }; + 5F644C0B2B7AA811000DCD78 /* BNCEventUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B7A2B7AA811000DCD78 /* BNCEventUtils.h */; }; + 5F644C0C2B7AA811000DCD78 /* BNCCallbackMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B7B2B7AA811000DCD78 /* BNCCallbackMap.h */; }; + 5F644C0D2B7AA811000DCD78 /* BranchShortUrlSyncRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B7C2B7AA811000DCD78 /* BranchShortUrlSyncRequest.h */; }; + 5F644C0E2B7AA811000DCD78 /* BNCQRCodeCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B7D2B7AA811000DCD78 /* BNCQRCodeCache.h */; }; + 5F644C0F2B7AA811000DCD78 /* BranchOpenRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B7E2B7AA811000DCD78 /* BranchOpenRequest.h */; }; + 5F644C102B7AA811000DCD78 /* BranchShortUrlRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B7F2B7AA811000DCD78 /* BranchShortUrlRequest.h */; }; + 5F644C112B7AA811000DCD78 /* BNCUrlQueryParameter.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B802B7AA811000DCD78 /* BNCUrlQueryParameter.h */; }; + 5F644C122B7AA811000DCD78 /* BNCApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B812B7AA811000DCD78 /* BNCApplication.h */; }; + 5F644C132B7AA811000DCD78 /* NSMutableDictionary+Branch.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B822B7AA811000DCD78 /* NSMutableDictionary+Branch.h */; }; + 5F644C142B7AA811000DCD78 /* BNCDeviceSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B832B7AA811000DCD78 /* BNCDeviceSystem.h */; }; + 5F644C152B7AA811000DCD78 /* BNCUserAgentCollector.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B842B7AA811000DCD78 /* BNCUserAgentCollector.h */; }; + 5F644C162B7AA811000DCD78 /* BNCEncodingUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B852B7AA811000DCD78 /* BNCEncodingUtils.h */; }; + 5F644C172B7AA811000DCD78 /* NSError+Branch.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B862B7AA811000DCD78 /* NSError+Branch.h */; }; + 5F644C182B7AA811000DCD78 /* BNCURLFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B872B7AA811000DCD78 /* BNCURLFilter.h */; }; + 5F644C192B7AA811000DCD78 /* BNCNetworkInterface.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B882B7AA811000DCD78 /* BNCNetworkInterface.h */; }; + 5F644C1B2B7AA811000DCD78 /* BNCSystemObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B8A2B7AA811000DCD78 /* BNCSystemObserver.h */; }; + 5F644C1C2B7AA811000DCD78 /* NSString+Branch.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B8B2B7AA811000DCD78 /* NSString+Branch.h */; }; + 5F644C1D2B7AA811000DCD78 /* BranchInstallRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B8C2B7AA811000DCD78 /* BranchInstallRequest.h */; }; + 5F644C1E2B7AA811000DCD78 /* Branch+Validator.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B8D2B7AA811000DCD78 /* Branch+Validator.h */; }; + 5F644C1F2B7AA811000DCD78 /* BNCDeepLinkViewControllerInstance.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B8E2B7AA811000DCD78 /* BNCDeepLinkViewControllerInstance.h */; }; + 5F644C202B7AA811000DCD78 /* BNCContentDiscoveryManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B8F2B7AA811000DCD78 /* BNCContentDiscoveryManager.h */; }; + 5F644C212B7AA811000DCD78 /* BNCDeviceInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B902B7AA811000DCD78 /* BNCDeviceInfo.h */; }; + 5F644C232B7AA811000DCD78 /* BranchContentDiscoverer.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B922B7AA811000DCD78 /* BranchContentDiscoverer.h */; }; + 5F644C242B7AA811000DCD78 /* BranchSpotlightUrlRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B932B7AA811000DCD78 /* BranchSpotlightUrlRequest.h */; }; + 5F644C252B7AA811000DCD78 /* BranchContentDiscoveryManifest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B942B7AA811000DCD78 /* BranchContentDiscoveryManifest.h */; }; + 5F644C262B7AA811000DCD78 /* BNCConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B952B7AA811000DCD78 /* BNCConfig.h */; }; + 5F644C272B7AA811000DCD78 /* BranchConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B962B7AA811000DCD78 /* BranchConstants.h */; }; + 5F644C282B7AA811000DCD78 /* BNCPartnerParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B972B7AA811000DCD78 /* BNCPartnerParameters.h */; }; + 5F644C292B7AA811000DCD78 /* BranchJsonConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B982B7AA811000DCD78 /* BranchJsonConfig.h */; }; + 5F644C2A2B7AA811000DCD78 /* BranchLATDRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B992B7AA811000DCD78 /* BranchLATDRequest.h */; }; + 5F644C2B2B7AA811000DCD78 /* BNCCrashlyticsWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B9A2B7AA811000DCD78 /* BNCCrashlyticsWrapper.h */; }; + 5F644C2C2B7AA811000DCD78 /* BNCRequestFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B9B2B7AA811000DCD78 /* BNCRequestFactory.h */; }; + 5F644C2D2B7AA811000DCD78 /* BNCReferringURLUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B9C2B7AA811000DCD78 /* BNCReferringURLUtility.h */; }; + 5F644C2E2B7AA811000DCD78 /* BNCNetworkService.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B9D2B7AA811000DCD78 /* BNCNetworkService.h */; }; + 5F644C2F2B7AA811000DCD78 /* BNCReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F644B9E2B7AA811000DCD78 /* BNCReachability.h */; }; + 5F644C302B7AA811000DCD78 /* BranchDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644B9F2B7AA811000DCD78 /* BranchDelegate.m */; }; + 5F644C312B7AA811000DCD78 /* BNCLinkData.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644BA02B7AA811000DCD78 /* BNCLinkData.m */; }; + 5F644C322B7AA811000DCD78 /* Branch.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644BA12B7AA811000DCD78 /* Branch.m */; }; + 5F644C332B7AA811000DCD78 /* BNCJSONUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644BA22B7AA811000DCD78 /* BNCJSONUtility.m */; }; + 5F644C342B7AA811000DCD78 /* BNCCurrency.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644BA32B7AA811000DCD78 /* BNCCurrency.m */; }; + 5F644C352B7AA811000DCD78 /* BranchLastAttributedTouchData.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644BA42B7AA811000DCD78 /* BranchLastAttributedTouchData.m */; }; + 5F644C362B7AA811000DCD78 /* BNCSKAdNetwork.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644BA52B7AA811000DCD78 /* BNCSKAdNetwork.m */; }; + 5F644C372B7AA811000DCD78 /* BranchContentPathProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644BA62B7AA811000DCD78 /* BranchContentPathProperties.m */; }; + 5F644C382B7AA811000DCD78 /* BNCPasteboard.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644BA72B7AA811000DCD78 /* BNCPasteboard.m */; }; + 5F644C392B7AA811000DCD78 /* BNCAppleReceipt.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644BA82B7AA811000DCD78 /* BNCAppleReceipt.m */; }; + 5F644C3A2B7AA811000DCD78 /* BranchLinkProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644BA92B7AA811000DCD78 /* BranchLinkProperties.m */; }; + 5F644C3B2B7AA811000DCD78 /* BNCInitSessionResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644BAA2B7AA811000DCD78 /* BNCInitSessionResponse.m */; }; + 5F644C3C2B7AA811000DCD78 /* BNCLinkCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644BAB2B7AA811000DCD78 /* BNCLinkCache.m */; }; + 5F644C3D2B7AA811000DCD78 /* BNCSpotlightService.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644BAC2B7AA811000DCD78 /* BNCSpotlightService.m */; }; + 5F644C3E2B7AA811000DCD78 /* BNCServerAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644BAD2B7AA811000DCD78 /* BNCServerAPI.m */; }; + 5F644C3F2B7AA811000DCD78 /* BranchShareLink.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644BAE2B7AA811000DCD78 /* BranchShareLink.m */; }; + 5F644C402B7AA811000DCD78 /* UIViewController+Branch.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644BAF2B7AA811000DCD78 /* UIViewController+Branch.m */; }; + 5F644C412B7AA811000DCD78 /* BNCAppGroupsData.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644BB02B7AA811000DCD78 /* BNCAppGroupsData.m */; }; + 5F644C422B7AA811000DCD78 /* BNCServerResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644BB12B7AA811000DCD78 /* BNCServerResponse.m */; }; + 5F644C432B7AA811000DCD78 /* BranchEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644BB22B7AA811000DCD78 /* BranchEvent.m */; }; + 5F644C442B7AA811000DCD78 /* BranchShortUrlRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644BB32B7AA811000DCD78 /* BranchShortUrlRequest.m */; }; + 5F644C452B7AA811000DCD78 /* BranchOpenRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644BB42B7AA811000DCD78 /* BranchOpenRequest.m */; }; + 5F644C462B7AA811000DCD78 /* BNCQRCodeCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644BB52B7AA811000DCD78 /* BNCQRCodeCache.m */; }; + 5F644C472B7AA811000DCD78 /* BranchShortUrlSyncRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644BB62B7AA811000DCD78 /* BranchShortUrlSyncRequest.m */; }; + 5F644C482B7AA811000DCD78 /* BNCCallbackMap.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644BB72B7AA811000DCD78 /* BNCCallbackMap.m */; }; + 5F644C492B7AA811000DCD78 /* BNCEventUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F644BB82B7AA811000DCD78 /* BNCEventUtils.m */; }; 5F67F48E228F535500067429 /* BNCEncodingUtilsTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F67F48D228F535500067429 /* BNCEncodingUtilsTests.m */; }; - 5F73FC7E23313F7A000EBD32 /* BNCJSONUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F73FC7C23313F7A000EBD32 /* BNCJSONUtility.h */; }; - 5F73FC7F23313F7A000EBD32 /* BNCJSONUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F73FC7D23313F7A000EBD32 /* BNCJSONUtility.m */; }; + 5F6D86D92BB5E9650068B536 /* BNCClassSerializationTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F6D86D82BB5E9650068B536 /* BNCClassSerializationTests.m */; }; 5F83B9ED2433BAAA0054A022 /* BNCServerInterface.Test.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D16837E2098C901008819E3 /* BNCServerInterface.Test.m */; }; - 5F892EBE2361157E0023AEC1 /* NSError+Branch.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F892EBC2361157D0023AEC1 /* NSError+Branch.m */; }; - 5F892EBF2361157E0023AEC1 /* NSError+Branch.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F892EBD2361157D0023AEC1 /* NSError+Branch.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F892EC5236116CD0023AEC1 /* NSErrorBranchCategoryTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F892EC4236116CC0023AEC1 /* NSErrorBranchCategoryTests.m */; }; + 5F86501A2B76DA3200364BDE /* NSMutableDictionaryBranchTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F8650192B76DA3200364BDE /* NSMutableDictionaryBranchTests.m */; }; + 5F892EC5236116CD0023AEC1 /* NSErrorBranchTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F892EC4236116CC0023AEC1 /* NSErrorBranchTests.m */; }; 5F8B7B4021B5F5CD009CE0A6 /* libBranch.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 466B58381B17773000A69EDE /* libBranch.a */; }; 5F8B7B4721B5F5F0009CE0A6 /* Branch_setBranchKeyTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F8B7B4621B5F5F0009CE0A6 /* Branch_setBranchKeyTests.m */; }; 5F8BB66E278771890055D2DC /* BNCKeyChainTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F8BB66D278771890055D2DC /* BNCKeyChainTests.m */; }; 5F909B5E23314CE900A774D2 /* BNCJSONUtilityTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F73FC8023314697000EBD32 /* BNCJSONUtilityTests.m */; }; 5F909B722332BEF600A774D2 /* BranchLastAttributedTouchDataTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F909B712332BEF600A774D2 /* BranchLastAttributedTouchDataTests.m */; }; - 5F92B23123834AFD00CA909B /* BNCReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F92B22F23834AFD00CA909B /* BNCReachability.h */; }; - 5F92B23223834AFD00CA909B /* BNCReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F92B23023834AFD00CA909B /* BNCReachability.m */; }; 5F92B23423835FEB00CA909B /* BNCReachabilityTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F92B23323835FEB00CA909B /* BNCReachabilityTests.m */; }; 5F92B2362383644C00CA909B /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5F92B2352383644C00CA909B /* SystemConfiguration.framework */; }; - 5F92B23F238486E200CA909B /* BNCNetworkInterface.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F92B23D238486E200CA909B /* BNCNetworkInterface.h */; }; - 5F92B240238486E200CA909B /* BNCNetworkInterface.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F92B23E238486E200CA909B /* BNCNetworkInterface.m */; }; 5F92B242238752A500CA909B /* BNCDeviceInfoTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F92B241238752A500CA909B /* BNCDeviceInfoTests.m */; }; 5FA9112F29BC662000F3D35C /* BNCNetworkInterfaceTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FA9112E29BC662000F3D35C /* BNCNetworkInterfaceTests.m */; }; - 5FB0AA6B231875B500A0F9EA /* BNCUserAgentCollector.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FB0AA69231875B400A0F9EA /* BNCUserAgentCollector.h */; }; - 5FB0AA6C231875B500A0F9EA /* BNCUserAgentCollector.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FB0AA6A231875B500A0F9EA /* BNCUserAgentCollector.m */; }; - 5FB38C802521234F00E9A85A /* BNCAppGroupsData.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FB38C7E2521234F00E9A85A /* BNCAppGroupsData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5FB38C812521234F00E9A85A /* BNCAppGroupsData.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FB38C7F2521234F00E9A85A /* BNCAppGroupsData.m */; }; 5FB6CC13264F0C7C0020E478 /* BNCServerRequestQueueTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FB6CC12264F0C7C0020E478 /* BNCServerRequestQueueTests.m */; }; 5FC20E732A93D85F00D9E1C8 /* BNCRequestFactoryTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FC20E722A93D85F00D9E1C8 /* BNCRequestFactoryTests.m */; }; 5FC4CF8C24860C440001E701 /* latd.json in Resources */ = {isa = PBXBuildFile; fileRef = 5FC4CF7E24860C320001E701 /* latd.json */; }; @@ -182,24 +207,14 @@ 5FC4CF9024860C440001E701 /* example.json in Resources */ = {isa = PBXBuildFile; fileRef = 5FC4CF8224860C320001E701 /* example.json */; }; 5FC4CF9124860C440001E701 /* latd_empty_data.json in Resources */ = {isa = PBXBuildFile; fileRef = 5FC4CF8324860C320001E701 /* latd_empty_data.json */; }; 5FC4CF9224860C440001E701 /* latd_missing_data.json in Resources */ = {isa = PBXBuildFile; fileRef = 5FC4CF8424860C320001E701 /* latd_missing_data.json */; }; - 5FC7326822D81002006E6FBC /* BNCAppleReceipt.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FC7326622D81002006E6FBC /* BNCAppleReceipt.h */; }; - 5FC7326922D81002006E6FBC /* BNCAppleReceipt.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FC7326722D81002006E6FBC /* BNCAppleReceipt.m */; }; 5FC7327022DD1F93006E6FBC /* BNCAppleReceiptTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FC7326F22DD1F93006E6FBC /* BNCAppleReceiptTests.m */; }; + 5FCDD36A2B7AC1D500EAF29F /* BranchPluginSupportTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C10F393927A0872800BF5D36 /* BranchPluginSupportTests.m */; }; 5FCF7EAD29DC96A7008D629E /* BNCURLFilterSkiplistUpgradeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCF7EAC29DC96A7008D629E /* BNCURLFilterSkiplistUpgradeTests.m */; }; 5FD1786E26DEE49D009696E3 /* BNCPasteboardTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FD1786D26DEE49C009696E3 /* BNCPasteboardTests.m */; }; - 5FDB04ED24E4D23300F2F267 /* BNCSKAdNetwork.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FDB04EB24E4D23300F2F267 /* BNCSKAdNetwork.h */; }; - 5FDB04EE24E4D23300F2F267 /* BNCSKAdNetwork.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FDB04EC24E4D23300F2F267 /* BNCSKAdNetwork.m */; }; 5FDB04F024E4D27000F2F267 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5FDB04EF24E4D27000F2F267 /* StoreKit.framework */; }; 5FDB04F424E6156800F2F267 /* BNCSKAdNetworkTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FDB04F324E6156800F2F267 /* BNCSKAdNetworkTests.m */; }; - 5FDF914525818280009BE5A3 /* BNCPartnerParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FDF914325818280009BE5A3 /* BNCPartnerParameters.h */; }; - 5FDF914625818280009BE5A3 /* BNCPartnerParameters.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FDF914425818280009BE5A3 /* BNCPartnerParameters.m */; }; 5FDF91592581CDF4009BE5A3 /* BNCPartnerParametersTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FDF91582581CDF4009BE5A3 /* BNCPartnerParametersTests.m */; }; - 5FE276AF2432705B00EA1BD2 /* BNCInitSessionResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FE276AD2432705B00EA1BD2 /* BNCInitSessionResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5FE276B02432705B00EA1BD2 /* BNCInitSessionResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FE276AE2432705B00EA1BD2 /* BNCInitSessionResponse.m */; }; - 5FE693F72405E91500E3AEE2 /* BNCCallbackMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FE693F52405E91500E3AEE2 /* BNCCallbackMap.h */; }; - 5FE693F82405E91500E3AEE2 /* BNCCallbackMap.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FE693F62405E91500E3AEE2 /* BNCCallbackMap.m */; }; 5FE694382405FA2700E3AEE2 /* BNCCallbackMapTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FE694372405FA2700E3AEE2 /* BNCCallbackMapTests.m */; }; - 5FF7D2842A9549970049158D /* BNCRequestFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F5335C22A8D92C5006CF171 /* BNCRequestFactory.m */; }; 5FF7D2862A9549B40049158D /* AdServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5FF7D2852A9549B40049158D /* AdServices.framework */; }; 63E4C4881D25E16A00A45FD8 /* LogOutputViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 63E4C4871D25E16A00A45FD8 /* LogOutputViewController.m */; }; 63E4C48B1D25E17B00A45FD8 /* NavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 63E4C48A1D25E17B00A45FD8 /* NavigationController.m */; }; @@ -212,48 +227,17 @@ 670016701940F51400A9E103 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 6700166F1940F51400A9E103 /* main.m */; }; 6700167A1940F51400A9E103 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 670016791940F51400A9E103 /* ViewController.m */; }; 67F270891BA9FCFF002546A7 /* CoreSpotlight.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 67F270881BA9FCFF002546A7 /* CoreSpotlight.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; - 7B18DF491F1F00E200C25C84 /* BNCCrashlyticsWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B18DF471F1F00E200C25C84 /* BNCCrashlyticsWrapper.h */; }; - 7B18DF4A1F1F00E200C25C84 /* BNCCrashlyticsWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B18DF481F1F00E200C25C84 /* BNCCrashlyticsWrapper.m */; }; - 7D58823A1CA1DF2700FF6358 /* BNCDeviceInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D5882391CA1DF2700FF6358 /* BNCDeviceInfo.m */; }; - 9A2B7DD51FEC3BAF00CD188B /* Branch+Validator.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A2B7DD31FEC3BAE00CD188B /* Branch+Validator.h */; }; - 9A2B7DD61FEC3BAF00CD188B /* Branch+Validator.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A2B7DD41FEC3BAE00CD188B /* Branch+Validator.m */; }; - C10A6DE229A991CB0061A851 /* BNCEventUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = C10A6DE129A991CB0061A851 /* BNCEventUtils.m */; }; - C10A6DE429A991E30061A851 /* BNCEventUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = C10A6DE329A991E30061A851 /* BNCEventUtils.h */; }; C10A6DE629A995590061A851 /* StoreKitTestCertificate.cer in Resources */ = {isa = PBXBuildFile; fileRef = C10A6DE529A995590061A851 /* StoreKitTestCertificate.cer */; }; - C10B7A07285BD7F100D26273 /* BranchPluginSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = C1614D5B285BD4AF0098946B /* BranchPluginSupport.m */; }; C10C61AA282481FB00761D7E /* BranchShareLinkTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C10C61A9282481FB00761D7E /* BranchShareLinkTests.m */; }; - C10C61AD28248E5A00761D7E /* BNCQRCodeCache.h in Headers */ = {isa = PBXBuildFile; fileRef = C10C61AB28248E5A00761D7E /* BNCQRCodeCache.h */; }; - C10C61AE28248E5A00761D7E /* BNCQRCodeCache.m in Sources */ = {isa = PBXBuildFile; fileRef = C10C61AC28248E5A00761D7E /* BNCQRCodeCache.m */; }; - C10F393A27A0872800BF5D36 /* BranchPluginSupportTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C10F393927A0872800BF5D36 /* BranchPluginSupportTests.m */; }; C12320B52808DB90007771C0 /* BranchQRCodeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C12320B42808DB90007771C0 /* BranchQRCodeTests.m */; }; - C12320B7280E2060007771C0 /* BranchQRCode.h in Headers */ = {isa = PBXBuildFile; fileRef = C12320B6280E2060007771C0 /* BranchQRCode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C12320B9280E2091007771C0 /* BranchQRCode.m in Sources */ = {isa = PBXBuildFile; fileRef = C12320B8280E2091007771C0 /* BranchQRCode.m */; }; C15CC9DE2ABCB549003CC339 /* BNCCurrencyTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C15CC9DD2ABCB549003CC339 /* BNCCurrencyTests.m */; }; + C15CC9E02ABCF8C8003CC339 /* BranchActivityItemTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C15CC9DF2ABCF8C8003CC339 /* BranchActivityItemTests.m */; }; C1614D56285BC8A00098946B /* LinkPresentation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C1614D55285BC8A00098946B /* LinkPresentation.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; - C1614D5C285BD4AF0098946B /* BranchPluginSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = C1614D5A285BD4AF0098946B /* BranchPluginSupport.h */; }; - C1614D5D285BD4AF0098946B /* BranchPluginSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = C1614D5B285BD4AF0098946B /* BranchPluginSupport.m */; }; - C17394602A8AEE0E006068F2 /* BNCProductCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = C173945F2A8AEE0E006068F2 /* BNCProductCategory.m */; }; - C17394612A8C20FD006068F2 /* BNCProductCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = C173945E2A8AEDFB006068F2 /* BNCProductCategory.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C17394642A8C228D006068F2 /* BNCCurrency.m in Sources */ = {isa = PBXBuildFile; fileRef = C17394632A8C228D006068F2 /* BNCCurrency.m */; }; - C17394652A8C23D1006068F2 /* BNCCurrency.h in Headers */ = {isa = PBXBuildFile; fileRef = C17394622A8C2282006068F2 /* BNCCurrency.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C1CC887F29BAA06600BDD2B5 /* BNCReferringURLUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = C1CC887D29BAA06600BDD2B5 /* BNCReferringURLUtility.h */; }; - C1CC888029BAA06600BDD2B5 /* BNCReferringURLUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = C1CC887E29BAA06600BDD2B5 /* BNCReferringURLUtility.m */; }; + C17DAF7B2AC20C2000B16B1A /* BranchClassTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C17DAF7A2AC20C2000B16B1A /* BranchClassTests.m */; }; C1CC888229BAAFC000BDD2B5 /* BNCReferringURLUtilityTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C1CC888129BAAFC000BDD2B5 /* BNCReferringURLUtilityTests.m */; }; - C1CC888829C27E8000BDD2B5 /* BNCUrlQueryParameter.h in Headers */ = {isa = PBXBuildFile; fileRef = C1CC888629C27E8000BDD2B5 /* BNCUrlQueryParameter.h */; }; - C1CC888929C27E8000BDD2B5 /* BNCUrlQueryParameter.m in Sources */ = {isa = PBXBuildFile; fileRef = C1CC888729C27E8000BDD2B5 /* BNCUrlQueryParameter.m */; }; - CE09D25C88071212954A776D /* libPods-Branch-SDK-Tests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F2C896423B99BFA2E8B0E4D6 /* libPods-Branch-SDK-Tests.a */; }; - E2B9474A1D15D75000F2270D /* BNCCallbacks.h in Headers */ = {isa = PBXBuildFile; fileRef = E2B947491D15D73900F2270D /* BNCCallbacks.h */; settings = {ATTRIBUTES = (Public, ); }; }; E72489D228E40D0200DCD8FD /* PasteControlViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E72489D128E40D0200DCD8FD /* PasteControlViewController.m */; }; - E729974D28E2BBFA007D91B2 /* BranchPasteControl.h in Headers */ = {isa = PBXBuildFile; fileRef = E729974B28E2BBFA007D91B2 /* BranchPasteControl.h */; }; - E729974E28E2BBFA007D91B2 /* BranchPasteControl.m in Sources */ = {isa = PBXBuildFile; fileRef = E729974C28E2BBFA007D91B2 /* BranchPasteControl.m */; }; E7A728BD2AA9A112009343B7 /* BNCAPIServerTest.m in Sources */ = {isa = PBXBuildFile; fileRef = E7A728BC2AA9A112009343B7 /* BNCAPIServerTest.m */; }; - E7CBC3992AA9403200B2D0D9 /* BNCServerAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = E7CBC3972AA9403100B2D0D9 /* BNCServerAPI.h */; }; - E7CBC39A2AA9403200B2D0D9 /* BNCServerAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = E7CBC3982AA9403100B2D0D9 /* BNCServerAPI.m */; }; - F185BAAA1F3D30D70056300C /* BNCSpotlightService.h in Headers */ = {isa = PBXBuildFile; fileRef = F185BAA81F3D30D70056300C /* BNCSpotlightService.h */; }; - F185BAAB1F3D30D70056300C /* BNCSpotlightService.m in Sources */ = {isa = PBXBuildFile; fileRef = F185BAA91F3D30D70056300C /* BNCSpotlightService.m */; }; F1CF14111F4CC79F00BB2694 /* CoreSpotlight.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 67F270881BA9FCFF002546A7 /* CoreSpotlight.framework */; settings = {ATTRIBUTES = (Required, ); }; }; - F1D359201ED4DCC500A93FD5 /* BNCDeepLinkViewControllerInstance.h in Headers */ = {isa = PBXBuildFile; fileRef = F1D3591E1ED4DCC500A93FD5 /* BNCDeepLinkViewControllerInstance.h */; }; - F1D359211ED4DCC500A93FD5 /* BNCDeepLinkViewControllerInstance.m in Sources */ = {isa = PBXBuildFile; fileRef = F1D3591F1ED4DCC500A93FD5 /* BNCDeepLinkViewControllerInstance.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -316,157 +300,196 @@ 0372078725E9F81000F29C30 /* UITestCaseMisc.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UITestCaseMisc.m; sourceTree = ""; }; 0399DD112599BF8A00CDB36E /* UITestSendV2Event.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UITestSendV2Event.m; sourceTree = ""; }; 03B49EEA25F9F315000BF105 /* UITestCase0OpenNInstall.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UITestCase0OpenNInstall.m; sourceTree = ""; }; - 130D24DFC422D39DC8CB96CC /* Pods-Branch-SDK-Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Branch-SDK-Tests.debug.xcconfig"; path = "Target Support Files/Pods-Branch-SDK-Tests/Pods-Branch-SDK-Tests.debug.xcconfig"; sourceTree = ""; }; - 3A78D573251EB59B002A25CF /* BranchJsonConfig.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BranchJsonConfig.h; sourceTree = ""; }; - 3A78D575251EB5BF002A25CF /* BranchJsonConfig.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BranchJsonConfig.m; sourceTree = ""; }; - 464EA3991ACB38EC000E4094 /* BNCEncodingUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCEncodingUtils.h; sourceTree = ""; }; - 464EA39A1ACB38EC000E4094 /* BNCEncodingUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCEncodingUtils.m; sourceTree = ""; }; - 4665AF221B28935700184037 /* BranchConstants.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BranchConstants.h; sourceTree = ""; }; - 4665AF251B28B9BB00184037 /* BranchConstants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchConstants.m; sourceTree = ""; }; 466B58381B17773000A69EDE /* libBranch.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libBranch.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 466D5A0F1B5991E3009DB845 /* BNCContentDiscoveryManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCContentDiscoveryManager.h; sourceTree = ""; }; - 466D5A101B5991E3009DB845 /* BNCContentDiscoveryManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCContentDiscoveryManager.m; sourceTree = ""; }; - 46DBB42F1B335A9B00642FC8 /* BranchDeepLinkingController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BranchDeepLinkingController.h; sourceTree = ""; }; 4AB16367239E3A2700D42931 /* DispatchToIsolationQueueTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DispatchToIsolationQueueTests.m; sourceTree = ""; }; - 4D16837B2098C901008819E3 /* BranchSetIdentityTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchSetIdentityTests.m; sourceTree = ""; }; - 4D16837D2098C901008819E3 /* BNCServerRequestQueueOldTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCServerRequestQueueOldTests.m; sourceTree = ""; }; - 4D16837E2098C901008819E3 /* BNCServerInterface.Test.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCServerInterface.Test.m; sourceTree = ""; }; - 4D16837F2098C901008819E3 /* BranchOpenRequestTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchOpenRequestTests.m; sourceTree = ""; }; 4D1683812098C901008819E3 /* Branch-SDK-Tests-Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Branch-SDK-Tests-Bridging-Header.h"; sourceTree = ""; }; - 4D1683822098C901008819E3 /* BranchInstallRequestTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchInstallRequestTests.m; sourceTree = ""; }; 4D1683842098C901008819E3 /* BNCLinkDataTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCLinkDataTests.m; sourceTree = ""; }; - 4D1683862098C901008819E3 /* BranchSDKFunctionalityTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchSDKFunctionalityTests.m; sourceTree = ""; }; 4D16838C2098C901008819E3 /* BNCURLFilterTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCURLFilterTests.m; sourceTree = ""; }; - 4D16838D2098C901008819E3 /* BNCTestCase.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCTestCase.m; sourceTree = ""; }; - 4D16838E2098C901008819E3 /* BNCEncodingUtils.Test.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCEncodingUtils.Test.m; sourceTree = ""; }; + 4D16838E2098C901008819E3 /* BNCEncodingUtilsTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCEncodingUtilsTests.m; sourceTree = ""; }; 4D16838F2098C901008819E3 /* BNCSystemObserverTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCSystemObserverTests.m; sourceTree = ""; }; - 4D1683902098C901008819E3 /* BNCLog.Test.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCLog.Test.m; sourceTree = ""; }; - 4D1683922098C901008819E3 /* BranchDelegate.Test.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchDelegate.Test.m; sourceTree = ""; }; - 4D1683932098C901008819E3 /* BranchNetworkScenario.Test.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchNetworkScenario.Test.m; sourceTree = ""; }; 4D1683952098C901008819E3 /* BranchEvent.Test.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BranchEvent.Test.swift; sourceTree = ""; }; - 4D1683962098C901008819E3 /* BranchUniversalObject.Test.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchUniversalObject.Test.m; sourceTree = ""; }; - 4D1683972098C901008819E3 /* BNCApplication.Test.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCApplication.Test.m; sourceTree = ""; }; + 4D1683962098C901008819E3 /* BranchUniversalObjectTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchUniversalObjectTests.m; sourceTree = ""; }; + 4D1683972098C901008819E3 /* BNCApplicationTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCApplicationTests.m; sourceTree = ""; }; 4D16839C2098C901008819E3 /* BranchEvent.Test.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchEvent.Test.m; sourceTree = ""; }; - 4D16839D2098C901008819E3 /* BNCCrashlyticsWrapper.Test.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCCrashlyticsWrapper.Test.m; sourceTree = ""; }; - 4D16839E2098C901008819E3 /* NSString+Branch.Test.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+Branch.Test.m"; sourceTree = ""; }; + 4D16839D2098C901008819E3 /* BNCCrashlyticsWrapperTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCCrashlyticsWrapperTests.m; sourceTree = ""; }; + 4D16839E2098C901008819E3 /* NSStringBranchTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSStringBranchTests.m; sourceTree = ""; }; 4D16839F2098C901008819E3 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 4D1683A02098C901008819E3 /* BNCPreferenceHelperTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCPreferenceHelperTests.m; sourceTree = ""; }; - 4D1683A12098C901008819E3 /* BNCTestCase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCTestCase.h; sourceTree = ""; }; 4D1851BF20180F0600E48994 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; - 4D3514191E3201D80085EBA1 /* NSMutableDictionary+Branch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSMutableDictionary+Branch.h"; sourceTree = ""; }; - 4D35141A1E3201D80085EBA1 /* NSMutableDictionary+Branch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSMutableDictionary+Branch.m"; sourceTree = ""; }; - 4D3FA94A1DFF31EB00E2B6A9 /* BNCConfig.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCConfig.m; sourceTree = ""; }; - 4D59B51B2006979B00F89FD5 /* BNCApplication.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCApplication.h; sourceTree = ""; }; - 4D59B51C2006979B00F89FD5 /* BNCApplication.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCApplication.m; sourceTree = ""; }; - 4D59B51D2006979C00F89FD5 /* BNCKeyChain.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCKeyChain.h; sourceTree = ""; }; - 4D59B51E2006979C00F89FD5 /* BNCKeyChain.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCKeyChain.m; sourceTree = ""; }; - 4D7881F5209CF28E002B750F /* BNCThreads.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCThreads.m; sourceTree = ""; }; - 4D7881F6209CF28E002B750F /* BNCThreads.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCThreads.h; sourceTree = ""; }; - 4D7881F9209CF2D4002B750F /* BNCTestCase.strings */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; path = BNCTestCase.strings; sourceTree = ""; }; - 4D7881FA209CF2D4002B750F /* BNCTestCase.Test.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCTestCase.Test.m; sourceTree = ""; }; - 4D7881FB209CF2D4002B750F /* BNCApplication+BNCTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "BNCApplication+BNCTest.h"; sourceTree = ""; }; - 4D7881FC209CF2D4002B750F /* BNCApplication+BNCTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "BNCApplication+BNCTest.m"; sourceTree = ""; }; 4D93D8592098CC4400CFABA6 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; 4D93D85F2098D43C00CFABA6 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 4D93D8602098D43C00CFABA6 /* UITestSafari.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UITestSafari.m; sourceTree = ""; }; - 4D955CCA2035021400FB8008 /* BNCURLFilter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BNCURLFilter.h; sourceTree = ""; }; - 4D955CCB2035021400FB8008 /* BNCURLFilter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BNCURLFilter.m; sourceTree = ""; }; - 4D9607F21FBF9472008AB3C2 /* UIViewController+Branch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIViewController+Branch.h"; sourceTree = ""; }; - 4D9607F31FBF9473008AB3C2 /* UIViewController+Branch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIViewController+Branch.m"; sourceTree = ""; }; - 4DA577151E67B1D600A43BDD /* BNCLog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCLog.h; sourceTree = ""; }; - 4DA577161E67B1D600A43BDD /* BNCLog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCLog.m; sourceTree = ""; }; - 4DA577201E67B28700A43BDD /* NSString+Branch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+Branch.h"; sourceTree = ""; }; - 4DA577211E67B28700A43BDD /* NSString+Branch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+Branch.m"; sourceTree = ""; }; - 4DB327FD1FA10B9000ACF9B0 /* BranchDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchDelegate.h; sourceTree = ""; }; - 4DB327FE1FA10B9000ACF9B0 /* BranchDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchDelegate.m; sourceTree = ""; }; - 4DB567311E79F46000A8A324 /* BranchShareLink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchShareLink.h; sourceTree = ""; }; - 4DB567321E79F46000A8A324 /* BranchShareLink.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchShareLink.m; sourceTree = ""; }; 4DBEFFF41FB114F900F7C41B /* ArrayPickerView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ArrayPickerView.h; sourceTree = ""; }; 4DBEFFF51FB114F900F7C41B /* ArrayPickerView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ArrayPickerView.m; sourceTree = ""; }; 4DBEFFFB1FB12A1000F7C41B /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = ""; }; - 4DCF4AF81F4388F600AF9AAB /* BranchEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchEvent.h; sourceTree = ""; }; - 4DCF4AF91F4388F600AF9AAB /* BranchEvent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchEvent.m; sourceTree = ""; }; 4DD056112177A65C009BD3DD /* libOCMock.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libOCMock.a; sourceTree = BUILT_PRODUCTS_DIR; }; 4DD056132177A65C009BD3DD /* libOHHTTPStubs.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libOHHTTPStubs.a; sourceTree = BUILT_PRODUCTS_DIR; }; 4DDC52611DCC08E700CFB737 /* iAd.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = iAd.framework; path = System/Library/Frameworks/iAd.framework; sourceTree = SDKROOT; }; - 4DE649191FE1D7F500226507 /* BNCFieldDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCFieldDefines.h; sourceTree = ""; }; - 54391A131BA249FA0061CB0F /* BranchCSSearchableItemAttributeSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchCSSearchableItemAttributeSet.h; sourceTree = ""; }; - 54391A141BA249FA0061CB0F /* BranchCSSearchableItemAttributeSet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchCSSearchableItemAttributeSet.m; sourceTree = ""; }; - 54FF1F8B1BD1D4AE0004CE2E /* BranchUniversalObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchUniversalObject.h; sourceTree = ""; }; - 54FF1F8C1BD1D4AE0004CE2E /* BranchUniversalObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchUniversalObject.m; sourceTree = ""; }; - 54FF1F8F1BD1DC320004CE2E /* BranchLinkProperties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchLinkProperties.h; sourceTree = ""; }; - 54FF1F901BD1DC320004CE2E /* BranchLinkProperties.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchLinkProperties.m; sourceTree = ""; }; 5F2035CB240DDE90004FDC3E /* BNCDisableAdNetworkCalloutsTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BNCDisableAdNetworkCalloutsTests.m; sourceTree = ""; }; 5F205D022318641700C776D1 /* BNCUserAgentCollectorTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BNCUserAgentCollectorTests.m; sourceTree = ""; }; 5F205D04231864E800C776D1 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; }; - 5F32D7C1242AC338000DE539 /* BranchScene.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchScene.h; sourceTree = ""; }; - 5F32D7C2242AC338000DE539 /* BranchScene.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchScene.m; sourceTree = ""; }; - 5F3801DF24DCC2E200E6FAFD /* BranchContentPathProperties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchContentPathProperties.h; sourceTree = ""; }; - 5F3801E024DCC2E200E6FAFD /* BNCServerRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCServerRequest.m; sourceTree = ""; }; - 5F3801E424DCC2E300E6FAFD /* BranchInstallRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchInstallRequest.m; sourceTree = ""; }; - 5F3801E624DCC2E300E6FAFD /* BranchShortUrlSyncRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchShortUrlSyncRequest.m; sourceTree = ""; }; - 5F3801E724DCC2E300E6FAFD /* BranchSpotlightUrlRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchSpotlightUrlRequest.h; sourceTree = ""; }; - 5F3801E824DCC2E300E6FAFD /* BranchOpenRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchOpenRequest.m; sourceTree = ""; }; - 5F3801EB24DCC2E400E6FAFD /* BNCServerInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCServerInterface.h; sourceTree = ""; }; - 5F3801EC24DCC2E400E6FAFD /* BranchContentPathProperties.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchContentPathProperties.m; sourceTree = ""; }; - 5F3801EE24DCC2E400E6FAFD /* BranchLATDRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchLATDRequest.m; sourceTree = ""; }; - 5F3801F024DCC2E400E6FAFD /* BNCServerResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCServerResponse.h; sourceTree = ""; }; - 5F3801F524DCC2E500E6FAFD /* BranchShortUrlRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchShortUrlRequest.h; sourceTree = ""; }; - 5F3801F624DCC2E500E6FAFD /* BranchLATDRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchLATDRequest.h; sourceTree = ""; }; - 5F3801F724DCC2E500E6FAFD /* BranchShortUrlSyncRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchShortUrlSyncRequest.h; sourceTree = ""; }; - 5F3801F924DCC2E500E6FAFD /* BNCNetworkService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCNetworkService.m; sourceTree = ""; }; - 5F3801FA24DCC2E500E6FAFD /* BNCNetworkServiceProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCNetworkServiceProtocol.h; sourceTree = ""; }; - 5F3801FB24DCC2E500E6FAFD /* BranchContentDiscoveryManifest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchContentDiscoveryManifest.m; sourceTree = ""; }; - 5F3801FC24DCC2E600E6FAFD /* BNCServerResponse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCServerResponse.m; sourceTree = ""; }; - 5F3801FD24DCC2E600E6FAFD /* BranchOpenRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchOpenRequest.h; sourceTree = ""; }; - 5F3801FE24DCC2E600E6FAFD /* BranchInstallRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchInstallRequest.h; sourceTree = ""; }; - 5F38020024DCC2E600E6FAFD /* BranchSpotlightUrlRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchSpotlightUrlRequest.m; sourceTree = ""; }; - 5F38020124DCC2E600E6FAFD /* BNCServerRequestQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCServerRequestQueue.h; sourceTree = ""; }; - 5F38020224DCC2E600E6FAFD /* BNCNetworkService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCNetworkService.h; sourceTree = ""; }; - 5F38020324DCC2E600E6FAFD /* BNCServerRequestQueue.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCServerRequestQueue.m; sourceTree = ""; }; - 5F38020424DCC2E600E6FAFD /* BranchContentDiscoveryManifest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchContentDiscoveryManifest.h; sourceTree = ""; }; - 5F38020724DCC2E700E6FAFD /* BNCServerInterface.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCServerInterface.m; sourceTree = ""; }; - 5F38020824DCC2E700E6FAFD /* BNCServerRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCServerRequest.h; sourceTree = ""; }; - 5F38020924DCC2E700E6FAFD /* BranchContentDiscoverer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchContentDiscoverer.h; sourceTree = ""; }; - 5F38020B24DCC2E700E6FAFD /* BranchShortUrlRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchShortUrlRequest.m; sourceTree = ""; }; - 5F38020C24DCC2E700E6FAFD /* BranchContentDiscoverer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchContentDiscoverer.m; sourceTree = ""; }; - 5F3D6712232C589100454FF1 /* BranchLastAttributedTouchData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchLastAttributedTouchData.m; sourceTree = ""; }; - 5F3D6713232C589100454FF1 /* BranchLastAttributedTouchData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchLastAttributedTouchData.h; sourceTree = ""; }; 5F3D6719233062FD00454FF1 /* BNCJsonLoader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BNCJsonLoader.h; sourceTree = ""; }; 5F3D671A233062FD00454FF1 /* BNCJsonLoader.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BNCJsonLoader.m; sourceTree = ""; }; - 5F4101F326851DC7003699AD /* BNCPasteboard.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BNCPasteboard.h; sourceTree = ""; }; - 5F4101F426851DC7003699AD /* BNCPasteboard.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BNCPasteboard.m; sourceTree = ""; }; 5F42763225DB3694005B9BBC /* AdServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AdServices.framework; path = System/Library/Frameworks/AdServices.framework; sourceTree = SDKROOT; }; 5F437E37237DE1320052064B /* CoreTelephony.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreTelephony.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/CoreTelephony.framework; sourceTree = DEVELOPER_DIR; }; - 5F437E3B237E03C00052064B /* BNCDeviceSystem.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BNCDeviceSystem.h; sourceTree = ""; }; - 5F437E3C237E03C00052064B /* BNCDeviceSystem.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BNCDeviceSystem.m; sourceTree = ""; }; 5F437E3F237E1A560052064B /* BNCDeviceSystemTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BNCDeviceSystemTests.m; sourceTree = ""; }; - 5F5335C12A8D92C5006CF171 /* BNCRequestFactory.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BNCRequestFactory.h; sourceTree = ""; }; - 5F5335C22A8D92C5006CF171 /* BNCRequestFactory.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BNCRequestFactory.m; sourceTree = ""; }; + 5F5FDA0F2B7DE20800F14A43 /* BranchLogger.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchLogger.m; sourceTree = ""; }; + 5F5FDA112B7DE22A00F14A43 /* BranchLogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchLogger.h; sourceTree = ""; }; + 5F5FDA132B7DE27D00F14A43 /* BranchLoggerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchLoggerTests.m; sourceTree = ""; }; + 5F644B262B7AA810000DCD78 /* NSError+Branch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSError+Branch.m"; sourceTree = ""; }; + 5F644B272B7AA810000DCD78 /* BNCUserAgentCollector.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCUserAgentCollector.m; sourceTree = ""; }; + 5F644B282B7AA810000DCD78 /* BNCEncodingUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCEncodingUtils.m; sourceTree = ""; }; + 5F644B292B7AA810000DCD78 /* BranchUniversalObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchUniversalObject.m; sourceTree = ""; }; + 5F644B2A2B7AA810000DCD78 /* BranchPasteControl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchPasteControl.m; sourceTree = ""; }; + 5F644B2B2B7AA810000DCD78 /* BNCApplication.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCApplication.m; sourceTree = ""; }; + 5F644B2C2B7AA810000DCD78 /* BNCDeviceSystem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCDeviceSystem.m; sourceTree = ""; }; + 5F644B2D2B7AA810000DCD78 /* NSMutableDictionary+Branch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSMutableDictionary+Branch.m"; sourceTree = ""; }; + 5F644B2E2B7AA810000DCD78 /* BNCServerRequestQueue.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCServerRequestQueue.m; sourceTree = ""; }; + 5F644B2F2B7AA810000DCD78 /* BNCUrlQueryParameter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCUrlQueryParameter.m; sourceTree = ""; }; + 5F644B302B7AA810000DCD78 /* BNCDeepLinkViewControllerInstance.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCDeepLinkViewControllerInstance.m; sourceTree = ""; }; + 5F644B312B7AA810000DCD78 /* BranchScene.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchScene.m; sourceTree = ""; }; + 5F644B322B7AA810000DCD78 /* BNCContentDiscoveryManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCContentDiscoveryManager.m; sourceTree = ""; }; + 5F644B332B7AA810000DCD78 /* Branch+Validator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "Branch+Validator.m"; sourceTree = ""; }; + 5F644B342B7AA810000DCD78 /* BranchInstallRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchInstallRequest.m; sourceTree = ""; }; + 5F644B352B7AA810000DCD78 /* BranchPluginSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchPluginSupport.m; sourceTree = ""; }; + 5F644B362B7AA810000DCD78 /* NSString+Branch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+Branch.m"; sourceTree = ""; }; + 5F644B372B7AA810000DCD78 /* BNCSystemObserver.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCSystemObserver.m; sourceTree = ""; }; + 5F644B392B7AA810000DCD78 /* BNCURLFilter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCURLFilter.m; sourceTree = ""; }; + 5F644B3A2B7AA810000DCD78 /* BNCServerRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCServerRequest.m; sourceTree = ""; }; + 5F644B3B2B7AA810000DCD78 /* BNCNetworkInterface.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCNetworkInterface.m; sourceTree = ""; }; + 5F644B3C2B7AA810000DCD78 /* BNCPreferenceHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCPreferenceHelper.m; sourceTree = ""; }; + 5F644B3D2B7AA810000DCD78 /* BNCConfig.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCConfig.m; sourceTree = ""; }; + 5F644B3E2B7AA810000DCD78 /* BranchConstants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchConstants.m; sourceTree = ""; }; + 5F644B3F2B7AA810000DCD78 /* BranchContentDiscoveryManifest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchContentDiscoveryManifest.m; sourceTree = ""; }; + 5F644B402B7AA810000DCD78 /* BranchSpotlightUrlRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchSpotlightUrlRequest.m; sourceTree = ""; }; + 5F644B422B7AA810000DCD78 /* BranchContentDiscoverer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchContentDiscoverer.m; sourceTree = ""; }; + 5F644B432B7AA810000DCD78 /* BNCDeviceInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCDeviceInfo.m; sourceTree = ""; }; + 5F644B442B7AA810000DCD78 /* BNCNetworkService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCNetworkService.m; sourceTree = ""; }; + 5F644B452B7AA810000DCD78 /* BNCReachability.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCReachability.m; sourceTree = ""; }; + 5F644B462B7AA810000DCD78 /* BNCRequestFactory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCRequestFactory.m; sourceTree = ""; }; + 5F644B472B7AA810000DCD78 /* BNCReferringURLUtility.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCReferringURLUtility.m; sourceTree = ""; }; + 5F644B482B7AA810000DCD78 /* BNCProductCategory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCProductCategory.m; sourceTree = ""; }; + 5F644B492B7AA810000DCD78 /* BNCCrashlyticsWrapper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCCrashlyticsWrapper.m; sourceTree = ""; }; + 5F644B4A2B7AA810000DCD78 /* BNCServerInterface.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCServerInterface.m; sourceTree = ""; }; + 5F644B4B2B7AA810000DCD78 /* BranchJsonConfig.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchJsonConfig.m; sourceTree = ""; }; + 5F644B4C2B7AA810000DCD78 /* BranchLATDRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchLATDRequest.m; sourceTree = ""; }; + 5F644B4D2B7AA810000DCD78 /* BNCPartnerParameters.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCPartnerParameters.m; sourceTree = ""; }; + 5F644B4E2B7AA810000DCD78 /* BranchCSSearchableItemAttributeSet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchCSSearchableItemAttributeSet.m; sourceTree = ""; }; + 5F644B4F2B7AA810000DCD78 /* BranchActivityItemProvider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchActivityItemProvider.m; sourceTree = ""; }; + 5F644B502B7AA810000DCD78 /* BranchQRCode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchQRCode.m; sourceTree = ""; }; + 5F644B512B7AA810000DCD78 /* BNCKeyChain.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCKeyChain.m; sourceTree = ""; }; + 5F644B532B7AA810000DCD78 /* BNCLinkData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCLinkData.h; sourceTree = ""; }; + 5F644B542B7AA810000DCD78 /* BranchDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchDelegate.h; sourceTree = ""; }; + 5F644B552B7AA810000DCD78 /* BranchQRCode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchQRCode.h; sourceTree = ""; }; + 5F644B562B7AA810000DCD78 /* BranchActivityItemProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchActivityItemProvider.h; sourceTree = ""; }; + 5F644B572B7AA810000DCD78 /* BranchCSSearchableItemAttributeSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchCSSearchableItemAttributeSet.h; sourceTree = ""; }; + 5F644B582B7AA810000DCD78 /* BranchLinkProperties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchLinkProperties.h; sourceTree = ""; }; + 5F644B592B7AA810000DCD78 /* BranchSDK.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchSDK.h; sourceTree = ""; }; + 5F644B5A2B7AA810000DCD78 /* BNCCurrency.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCCurrency.h; sourceTree = ""; }; + 5F644B5B2B7AA810000DCD78 /* BranchLastAttributedTouchData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchLastAttributedTouchData.h; sourceTree = ""; }; + 5F644B5C2B7AA810000DCD78 /* Branch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Branch.h; sourceTree = ""; }; + 5F644B5D2B7AA810000DCD78 /* BNCServerResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCServerResponse.h; sourceTree = ""; }; + 5F644B5E2B7AA810000DCD78 /* BNCCallbacks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCCallbacks.h; sourceTree = ""; }; + 5F644B5F2B7AA810000DCD78 /* BranchShareLink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchShareLink.h; sourceTree = ""; }; + 5F644B602B7AA810000DCD78 /* BNCLinkCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCLinkCache.h; sourceTree = ""; }; + 5F644B612B7AA810000DCD78 /* BNCInitSessionResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCInitSessionResponse.h; sourceTree = ""; }; + 5F644B622B7AA810000DCD78 /* BranchEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchEvent.h; sourceTree = ""; }; + 5F644B632B7AA810000DCD78 /* BNCNetworkServiceProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCNetworkServiceProtocol.h; sourceTree = ""; }; + 5F644B642B7AA810000DCD78 /* BNCServerRequestQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCServerRequestQueue.h; sourceTree = ""; }; + 5F644B652B7AA810000DCD78 /* BranchPasteControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchPasteControl.h; sourceTree = ""; }; + 5F644B662B7AA810000DCD78 /* BranchUniversalObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchUniversalObject.h; sourceTree = ""; }; + 5F644B672B7AA810000DCD78 /* BNCServerRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCServerRequest.h; sourceTree = ""; }; + 5F644B682B7AA810000DCD78 /* BranchDeepLinkingController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchDeepLinkingController.h; sourceTree = ""; }; + 5F644B692B7AA810000DCD78 /* BranchPluginSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchPluginSupport.h; sourceTree = ""; }; + 5F644B6A2B7AA810000DCD78 /* BranchScene.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchScene.h; sourceTree = ""; }; + 5F644B6B2B7AA810000DCD78 /* BNCPreferenceHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCPreferenceHelper.h; sourceTree = ""; }; + 5F644B6C2B7AA810000DCD78 /* BNCServerInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCServerInterface.h; sourceTree = ""; }; + 5F644B6D2B7AA810000DCD78 /* BNCProductCategory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCProductCategory.h; sourceTree = ""; }; + 5F644B6F2B7AA810000DCD78 /* BNCKeyChain.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCKeyChain.h; sourceTree = ""; }; + 5F644B702B7AA810000DCD78 /* BNCAppleReceipt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCAppleReceipt.h; sourceTree = ""; }; + 5F644B712B7AA810000DCD78 /* BNCPasteboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCPasteboard.h; sourceTree = ""; }; + 5F644B722B7AA810000DCD78 /* BranchContentPathProperties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchContentPathProperties.h; sourceTree = ""; }; + 5F644B732B7AA810000DCD78 /* BNCSKAdNetwork.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCSKAdNetwork.h; sourceTree = ""; }; + 5F644B742B7AA810000DCD78 /* BNCJSONUtility.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCJSONUtility.h; sourceTree = ""; }; + 5F644B752B7AA810000DCD78 /* UIViewController+Branch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIViewController+Branch.h"; sourceTree = ""; }; + 5F644B762B7AA810000DCD78 /* BNCAppGroupsData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCAppGroupsData.h; sourceTree = ""; }; + 5F644B782B7AA810000DCD78 /* BNCServerAPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCServerAPI.h; sourceTree = ""; }; + 5F644B792B7AA810000DCD78 /* BNCSpotlightService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCSpotlightService.h; sourceTree = ""; }; + 5F644B7A2B7AA811000DCD78 /* BNCEventUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCEventUtils.h; sourceTree = ""; }; + 5F644B7B2B7AA811000DCD78 /* BNCCallbackMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCCallbackMap.h; sourceTree = ""; }; + 5F644B7C2B7AA811000DCD78 /* BranchShortUrlSyncRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchShortUrlSyncRequest.h; sourceTree = ""; }; + 5F644B7D2B7AA811000DCD78 /* BNCQRCodeCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCQRCodeCache.h; sourceTree = ""; }; + 5F644B7E2B7AA811000DCD78 /* BranchOpenRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchOpenRequest.h; sourceTree = ""; }; + 5F644B7F2B7AA811000DCD78 /* BranchShortUrlRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchShortUrlRequest.h; sourceTree = ""; }; + 5F644B802B7AA811000DCD78 /* BNCUrlQueryParameter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCUrlQueryParameter.h; sourceTree = ""; }; + 5F644B812B7AA811000DCD78 /* BNCApplication.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCApplication.h; sourceTree = ""; }; + 5F644B822B7AA811000DCD78 /* NSMutableDictionary+Branch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSMutableDictionary+Branch.h"; sourceTree = ""; }; + 5F644B832B7AA811000DCD78 /* BNCDeviceSystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCDeviceSystem.h; sourceTree = ""; }; + 5F644B842B7AA811000DCD78 /* BNCUserAgentCollector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCUserAgentCollector.h; sourceTree = ""; }; + 5F644B852B7AA811000DCD78 /* BNCEncodingUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCEncodingUtils.h; sourceTree = ""; }; + 5F644B862B7AA811000DCD78 /* NSError+Branch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSError+Branch.h"; sourceTree = ""; }; + 5F644B872B7AA811000DCD78 /* BNCURLFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCURLFilter.h; sourceTree = ""; }; + 5F644B882B7AA811000DCD78 /* BNCNetworkInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCNetworkInterface.h; sourceTree = ""; }; + 5F644B8A2B7AA811000DCD78 /* BNCSystemObserver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCSystemObserver.h; sourceTree = ""; }; + 5F644B8B2B7AA811000DCD78 /* NSString+Branch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+Branch.h"; sourceTree = ""; }; + 5F644B8C2B7AA811000DCD78 /* BranchInstallRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchInstallRequest.h; sourceTree = ""; }; + 5F644B8D2B7AA811000DCD78 /* Branch+Validator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Branch+Validator.h"; sourceTree = ""; }; + 5F644B8E2B7AA811000DCD78 /* BNCDeepLinkViewControllerInstance.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCDeepLinkViewControllerInstance.h; sourceTree = ""; }; + 5F644B8F2B7AA811000DCD78 /* BNCContentDiscoveryManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCContentDiscoveryManager.h; sourceTree = ""; }; + 5F644B902B7AA811000DCD78 /* BNCDeviceInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCDeviceInfo.h; sourceTree = ""; }; + 5F644B922B7AA811000DCD78 /* BranchContentDiscoverer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchContentDiscoverer.h; sourceTree = ""; }; + 5F644B932B7AA811000DCD78 /* BranchSpotlightUrlRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchSpotlightUrlRequest.h; sourceTree = ""; }; + 5F644B942B7AA811000DCD78 /* BranchContentDiscoveryManifest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchContentDiscoveryManifest.h; sourceTree = ""; }; + 5F644B952B7AA811000DCD78 /* BNCConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCConfig.h; sourceTree = ""; }; + 5F644B962B7AA811000DCD78 /* BranchConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchConstants.h; sourceTree = ""; }; + 5F644B972B7AA811000DCD78 /* BNCPartnerParameters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCPartnerParameters.h; sourceTree = ""; }; + 5F644B982B7AA811000DCD78 /* BranchJsonConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchJsonConfig.h; sourceTree = ""; }; + 5F644B992B7AA811000DCD78 /* BranchLATDRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchLATDRequest.h; sourceTree = ""; }; + 5F644B9A2B7AA811000DCD78 /* BNCCrashlyticsWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCCrashlyticsWrapper.h; sourceTree = ""; }; + 5F644B9B2B7AA811000DCD78 /* BNCRequestFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCRequestFactory.h; sourceTree = ""; }; + 5F644B9C2B7AA811000DCD78 /* BNCReferringURLUtility.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCReferringURLUtility.h; sourceTree = ""; }; + 5F644B9D2B7AA811000DCD78 /* BNCNetworkService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCNetworkService.h; sourceTree = ""; }; + 5F644B9E2B7AA811000DCD78 /* BNCReachability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCReachability.h; sourceTree = ""; }; + 5F644B9F2B7AA811000DCD78 /* BranchDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchDelegate.m; sourceTree = ""; }; + 5F644BA02B7AA811000DCD78 /* BNCLinkData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCLinkData.m; sourceTree = ""; }; + 5F644BA12B7AA811000DCD78 /* Branch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Branch.m; sourceTree = ""; }; + 5F644BA22B7AA811000DCD78 /* BNCJSONUtility.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCJSONUtility.m; sourceTree = ""; }; + 5F644BA32B7AA811000DCD78 /* BNCCurrency.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCCurrency.m; sourceTree = ""; }; + 5F644BA42B7AA811000DCD78 /* BranchLastAttributedTouchData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchLastAttributedTouchData.m; sourceTree = ""; }; + 5F644BA52B7AA811000DCD78 /* BNCSKAdNetwork.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCSKAdNetwork.m; sourceTree = ""; }; + 5F644BA62B7AA811000DCD78 /* BranchContentPathProperties.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchContentPathProperties.m; sourceTree = ""; }; + 5F644BA72B7AA811000DCD78 /* BNCPasteboard.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCPasteboard.m; sourceTree = ""; }; + 5F644BA82B7AA811000DCD78 /* BNCAppleReceipt.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCAppleReceipt.m; sourceTree = ""; }; + 5F644BA92B7AA811000DCD78 /* BranchLinkProperties.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchLinkProperties.m; sourceTree = ""; }; + 5F644BAA2B7AA811000DCD78 /* BNCInitSessionResponse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCInitSessionResponse.m; sourceTree = ""; }; + 5F644BAB2B7AA811000DCD78 /* BNCLinkCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCLinkCache.m; sourceTree = ""; }; + 5F644BAC2B7AA811000DCD78 /* BNCSpotlightService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCSpotlightService.m; sourceTree = ""; }; + 5F644BAD2B7AA811000DCD78 /* BNCServerAPI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCServerAPI.m; sourceTree = ""; }; + 5F644BAE2B7AA811000DCD78 /* BranchShareLink.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchShareLink.m; sourceTree = ""; }; + 5F644BAF2B7AA811000DCD78 /* UIViewController+Branch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIViewController+Branch.m"; sourceTree = ""; }; + 5F644BB02B7AA811000DCD78 /* BNCAppGroupsData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCAppGroupsData.m; sourceTree = ""; }; + 5F644BB12B7AA811000DCD78 /* BNCServerResponse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCServerResponse.m; sourceTree = ""; }; + 5F644BB22B7AA811000DCD78 /* BranchEvent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchEvent.m; sourceTree = ""; }; + 5F644BB32B7AA811000DCD78 /* BranchShortUrlRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchShortUrlRequest.m; sourceTree = ""; }; + 5F644BB42B7AA811000DCD78 /* BranchOpenRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchOpenRequest.m; sourceTree = ""; }; + 5F644BB52B7AA811000DCD78 /* BNCQRCodeCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCQRCodeCache.m; sourceTree = ""; }; + 5F644BB62B7AA811000DCD78 /* BranchShortUrlSyncRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchShortUrlSyncRequest.m; sourceTree = ""; }; + 5F644BB72B7AA811000DCD78 /* BNCCallbackMap.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCCallbackMap.m; sourceTree = ""; }; + 5F644BB82B7AA811000DCD78 /* BNCEventUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCEventUtils.m; sourceTree = ""; }; 5F67F48D228F535500067429 /* BNCEncodingUtilsTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BNCEncodingUtilsTests.m; sourceTree = ""; }; - 5F73FC7C23313F7A000EBD32 /* BNCJSONUtility.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BNCJSONUtility.h; sourceTree = ""; }; - 5F73FC7D23313F7A000EBD32 /* BNCJSONUtility.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BNCJSONUtility.m; sourceTree = ""; }; + 5F6D86D82BB5E9650068B536 /* BNCClassSerializationTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BNCClassSerializationTests.m; sourceTree = ""; }; 5F73FC8023314697000EBD32 /* BNCJSONUtilityTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BNCJSONUtilityTests.m; sourceTree = ""; }; - 5F892EBC2361157D0023AEC1 /* NSError+Branch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSError+Branch.m"; sourceTree = ""; }; - 5F892EBD2361157D0023AEC1 /* NSError+Branch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSError+Branch.h"; sourceTree = ""; }; - 5F892EC4236116CC0023AEC1 /* NSErrorBranchCategoryTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSErrorBranchCategoryTests.m; sourceTree = ""; }; + 5F8650192B76DA3200364BDE /* NSMutableDictionaryBranchTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NSMutableDictionaryBranchTests.m; sourceTree = ""; }; + 5F892EC4236116CC0023AEC1 /* NSErrorBranchTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSErrorBranchTests.m; sourceTree = ""; }; 5F8B7B3B21B5F5CD009CE0A6 /* Branch-SDK-Unhosted-Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Branch-SDK-Unhosted-Tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 5F8B7B3F21B5F5CD009CE0A6 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 5F8B7B4621B5F5F0009CE0A6 /* Branch_setBranchKeyTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Branch_setBranchKeyTests.m; sourceTree = ""; }; 5F8BB66D278771890055D2DC /* BNCKeyChainTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BNCKeyChainTests.m; sourceTree = ""; }; 5F909B712332BEF600A774D2 /* BranchLastAttributedTouchDataTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BranchLastAttributedTouchDataTests.m; sourceTree = ""; }; - 5F92B22F23834AFD00CA909B /* BNCReachability.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BNCReachability.h; sourceTree = ""; }; - 5F92B23023834AFD00CA909B /* BNCReachability.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BNCReachability.m; sourceTree = ""; }; 5F92B23323835FEB00CA909B /* BNCReachabilityTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BNCReachabilityTests.m; sourceTree = ""; }; 5F92B2352383644C00CA909B /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; }; - 5F92B23D238486E200CA909B /* BNCNetworkInterface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BNCNetworkInterface.h; sourceTree = ""; }; - 5F92B23E238486E200CA909B /* BNCNetworkInterface.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BNCNetworkInterface.m; sourceTree = ""; }; 5F92B241238752A500CA909B /* BNCDeviceInfoTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BNCDeviceInfoTests.m; sourceTree = ""; }; 5FA9112E29BC662000F3D35C /* BNCNetworkInterfaceTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BNCNetworkInterfaceTests.m; sourceTree = ""; }; - 5FB0AA69231875B400A0F9EA /* BNCUserAgentCollector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCUserAgentCollector.h; sourceTree = ""; }; - 5FB0AA6A231875B500A0F9EA /* BNCUserAgentCollector.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCUserAgentCollector.m; sourceTree = ""; }; - 5FB38C7E2521234F00E9A85A /* BNCAppGroupsData.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BNCAppGroupsData.h; sourceTree = ""; }; - 5FB38C7F2521234F00E9A85A /* BNCAppGroupsData.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BNCAppGroupsData.m; sourceTree = ""; }; 5FB6CC12264F0C7C0020E478 /* BNCServerRequestQueueTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BNCServerRequestQueueTests.m; sourceTree = ""; }; 5FC20E722A93D85F00D9E1C8 /* BNCRequestFactoryTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BNCRequestFactoryTests.m; sourceTree = ""; }; 5FC4CF7E24860C320001E701 /* latd.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = latd.json; sourceTree = ""; }; @@ -474,22 +497,12 @@ 5FC4CF8224860C320001E701 /* example.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = example.json; sourceTree = ""; }; 5FC4CF8324860C320001E701 /* latd_empty_data.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = latd_empty_data.json; sourceTree = ""; }; 5FC4CF8424860C320001E701 /* latd_missing_data.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = latd_missing_data.json; sourceTree = ""; }; - 5FC7326622D81002006E6FBC /* BNCAppleReceipt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCAppleReceipt.h; sourceTree = ""; }; - 5FC7326722D81002006E6FBC /* BNCAppleReceipt.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCAppleReceipt.m; sourceTree = ""; }; 5FC7326F22DD1F93006E6FBC /* BNCAppleReceiptTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BNCAppleReceiptTests.m; sourceTree = ""; }; 5FCF7EAC29DC96A7008D629E /* BNCURLFilterSkiplistUpgradeTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BNCURLFilterSkiplistUpgradeTests.m; sourceTree = ""; }; 5FD1786D26DEE49C009696E3 /* BNCPasteboardTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCPasteboardTests.m; sourceTree = ""; }; - 5FDB04EB24E4D23300F2F267 /* BNCSKAdNetwork.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BNCSKAdNetwork.h; sourceTree = ""; }; - 5FDB04EC24E4D23300F2F267 /* BNCSKAdNetwork.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BNCSKAdNetwork.m; sourceTree = ""; }; 5FDB04EF24E4D27000F2F267 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.0.sdk/System/iOSSupport/System/Library/Frameworks/StoreKit.framework; sourceTree = DEVELOPER_DIR; }; 5FDB04F324E6156800F2F267 /* BNCSKAdNetworkTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BNCSKAdNetworkTests.m; sourceTree = ""; }; - 5FDF914325818280009BE5A3 /* BNCPartnerParameters.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BNCPartnerParameters.h; sourceTree = ""; }; - 5FDF914425818280009BE5A3 /* BNCPartnerParameters.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BNCPartnerParameters.m; sourceTree = ""; }; 5FDF91582581CDF4009BE5A3 /* BNCPartnerParametersTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BNCPartnerParametersTests.m; sourceTree = ""; }; - 5FE276AD2432705B00EA1BD2 /* BNCInitSessionResponse.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BNCInitSessionResponse.h; sourceTree = ""; }; - 5FE276AE2432705B00EA1BD2 /* BNCInitSessionResponse.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BNCInitSessionResponse.m; sourceTree = ""; }; - 5FE693F52405E91500E3AEE2 /* BNCCallbackMap.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BNCCallbackMap.h; sourceTree = ""; }; - 5FE693F62405E91500E3AEE2 /* BNCCallbackMap.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BNCCallbackMap.m; sourceTree = ""; }; 5FE694372405FA2700E3AEE2 /* BNCCallbackMapTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BNCCallbackMapTests.m; sourceTree = ""; }; 5FF7D2852A9549B40049158D /* AdServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AdServices.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.0.sdk/System/Library/Frameworks/AdServices.framework; sourceTree = DEVELOPER_DIR; }; 63E4C4861D25E16A00A45FD8 /* LogOutputViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LogOutputViewController.h; sourceTree = ""; }; @@ -511,69 +524,25 @@ 670016731940F51400A9E103 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 670016781940F51400A9E103 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; 670016791940F51400A9E103 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; - 670016BD1946309100A9E103 /* Branch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Branch.h; sourceTree = ""; }; - 670016BE1946309100A9E103 /* Branch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Branch.m; sourceTree = ""; }; - 670016C11946309100A9E103 /* BNCPreferenceHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCPreferenceHelper.h; sourceTree = ""; }; - 670016C21946309100A9E103 /* BNCPreferenceHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCPreferenceHelper.m; sourceTree = ""; }; - 670016C71946309100A9E103 /* BNCSystemObserver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCSystemObserver.h; sourceTree = ""; }; - 670016C81946309100A9E103 /* BNCSystemObserver.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCSystemObserver.m; sourceTree = ""; }; 67163AAD1B9A036F007A8AB1 /* SafariServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SafariServices.framework; path = System/Library/Frameworks/SafariServices.framework; sourceTree = SDKROOT; }; 677F4CB41C1FB0FA0029F2B3 /* Branch-TestBed.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = "Branch-TestBed.entitlements"; sourceTree = ""; }; 67BBCF271A69E49A009C7DAE /* AdSupport.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AdSupport.framework; path = System/Library/Frameworks/AdSupport.framework; sourceTree = SDKROOT; }; 67F270881BA9FCFF002546A7 /* CoreSpotlight.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreSpotlight.framework; path = System/Library/Frameworks/CoreSpotlight.framework; sourceTree = SDKROOT; }; - 713E79E4D7BF588897570949 /* Pods-Branch-SDK-Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Branch-SDK-Tests.release.xcconfig"; path = "Target Support Files/Pods-Branch-SDK-Tests/Pods-Branch-SDK-Tests.release.xcconfig"; sourceTree = ""; }; - 7B18DF471F1F00E200C25C84 /* BNCCrashlyticsWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCCrashlyticsWrapper.h; sourceTree = ""; }; - 7B18DF481F1F00E200C25C84 /* BNCCrashlyticsWrapper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCCrashlyticsWrapper.m; sourceTree = ""; }; - 7D5882301CA1BEEA00FF6358 /* BNCDeviceInfo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BNCDeviceInfo.h; sourceTree = ""; }; - 7D5882391CA1DF2700FF6358 /* BNCDeviceInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCDeviceInfo.m; sourceTree = ""; }; - 7E30BCF21A71EEEE00AC7402 /* BNCLinkData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCLinkData.h; sourceTree = ""; }; - 7E30BCF31A71EEEE00AC7402 /* BNCLinkData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCLinkData.m; sourceTree = ""; }; - 7E30BCF51A72FE7900AC7402 /* BNCLinkCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCLinkCache.h; sourceTree = ""; }; - 7E30BCF61A72FE7900AC7402 /* BNCLinkCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCLinkCache.m; sourceTree = ""; }; - 7E6ACAF919E324120066913E /* BNCConfig.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BNCConfig.h; sourceTree = ""; }; 7E6B3B511AA42D0E005F45BF /* Branch-SDK-Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Branch-SDK-Tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; - 9A2B7DD31FEC3BAE00CD188B /* Branch+Validator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Branch+Validator.h"; sourceTree = ""; }; - 9A2B7DD41FEC3BAE00CD188B /* Branch+Validator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "Branch+Validator.m"; sourceTree = ""; }; C10A6DE029A97E440061A851 /* TestStoreKitConfig.storekit */ = {isa = PBXFileReference; lastKnownFileType = text; path = TestStoreKitConfig.storekit; sourceTree = ""; }; - C10A6DE129A991CB0061A851 /* BNCEventUtils.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BNCEventUtils.m; sourceTree = ""; }; - C10A6DE329A991E30061A851 /* BNCEventUtils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BNCEventUtils.h; sourceTree = ""; }; C10A6DE529A995590061A851 /* StoreKitTestCertificate.cer */ = {isa = PBXFileReference; lastKnownFileType = file; path = StoreKitTestCertificate.cer; sourceTree = ""; }; C10C61A9282481FB00761D7E /* BranchShareLinkTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BranchShareLinkTests.m; sourceTree = ""; }; - C10C61AB28248E5A00761D7E /* BNCQRCodeCache.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BNCQRCodeCache.h; sourceTree = ""; }; - C10C61AC28248E5A00761D7E /* BNCQRCodeCache.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BNCQRCodeCache.m; sourceTree = ""; }; C10F393927A0872800BF5D36 /* BranchPluginSupportTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BranchPluginSupportTests.m; sourceTree = ""; }; C12320B42808DB90007771C0 /* BranchQRCodeTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BranchQRCodeTests.m; sourceTree = ""; }; - C12320B6280E2060007771C0 /* BranchQRCode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BranchQRCode.h; sourceTree = ""; }; - C12320B8280E2091007771C0 /* BranchQRCode.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BranchQRCode.m; sourceTree = ""; }; C15CC9DD2ABCB549003CC339 /* BNCCurrencyTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BNCCurrencyTests.m; sourceTree = ""; }; + C15CC9DF2ABCF8C8003CC339 /* BranchActivityItemTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BranchActivityItemTests.m; sourceTree = ""; }; C1614D55285BC8A00098946B /* LinkPresentation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = LinkPresentation.framework; path = System/Library/Frameworks/LinkPresentation.framework; sourceTree = SDKROOT; }; - C1614D5A285BD4AF0098946B /* BranchPluginSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchPluginSupport.h; sourceTree = ""; }; - C1614D5B285BD4AF0098946B /* BranchPluginSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchPluginSupport.m; sourceTree = ""; }; - C173945E2A8AEDFB006068F2 /* BNCProductCategory.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BNCProductCategory.h; sourceTree = ""; }; - C173945F2A8AEE0E006068F2 /* BNCProductCategory.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BNCProductCategory.m; sourceTree = ""; }; - C17394622A8C2282006068F2 /* BNCCurrency.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BNCCurrency.h; sourceTree = ""; }; - C17394632A8C228D006068F2 /* BNCCurrency.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BNCCurrency.m; sourceTree = ""; }; - C1CC887D29BAA06600BDD2B5 /* BNCReferringURLUtility.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BNCReferringURLUtility.h; sourceTree = ""; }; - C1CC887E29BAA06600BDD2B5 /* BNCReferringURLUtility.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BNCReferringURLUtility.m; sourceTree = ""; }; + C17DAF7A2AC20C2000B16B1A /* BranchClassTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BranchClassTests.m; sourceTree = ""; }; C1CC888129BAAFC000BDD2B5 /* BNCReferringURLUtilityTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BNCReferringURLUtilityTests.m; sourceTree = ""; }; - C1CC888629C27E8000BDD2B5 /* BNCUrlQueryParameter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BNCUrlQueryParameter.h; sourceTree = ""; }; - C1CC888729C27E8000BDD2B5 /* BNCUrlQueryParameter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BNCUrlQueryParameter.m; sourceTree = ""; }; - D258D2C41A794D64004A1C90 /* BranchActivityItemProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchActivityItemProvider.h; sourceTree = ""; }; - D258D2C51A794D64004A1C90 /* BranchActivityItemProvider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchActivityItemProvider.m; sourceTree = ""; }; - E2B947491D15D73900F2270D /* BNCCallbacks.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BNCCallbacks.h; sourceTree = ""; }; E72489D028E40D0200DCD8FD /* PasteControlViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PasteControlViewController.h; sourceTree = ""; }; E72489D128E40D0200DCD8FD /* PasteControlViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PasteControlViewController.m; sourceTree = ""; }; - E729974B28E2BBFA007D91B2 /* BranchPasteControl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BranchPasteControl.h; sourceTree = ""; }; - E729974C28E2BBFA007D91B2 /* BranchPasteControl.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BranchPasteControl.m; sourceTree = ""; }; E7A728BC2AA9A112009343B7 /* BNCAPIServerTest.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BNCAPIServerTest.m; sourceTree = ""; }; - E7CBC3972AA9403100B2D0D9 /* BNCServerAPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCServerAPI.h; sourceTree = ""; }; - E7CBC3982AA9403100B2D0D9 /* BNCServerAPI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCServerAPI.m; sourceTree = ""; }; - F185BAA81F3D30D70056300C /* BNCSpotlightService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCSpotlightService.h; sourceTree = ""; }; - F185BAA91F3D30D70056300C /* BNCSpotlightService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCSpotlightService.m; sourceTree = ""; }; - F1D3591E1ED4DCC500A93FD5 /* BNCDeepLinkViewControllerInstance.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCDeepLinkViewControllerInstance.h; sourceTree = ""; }; - F1D3591F1ED4DCC500A93FD5 /* BNCDeepLinkViewControllerInstance.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCDeepLinkViewControllerInstance.m; sourceTree = ""; }; F1D4F9AC1F323F01002D13FF /* Branch-TestBed-UITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Branch-TestBed-UITests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; - F2C896423B99BFA2E8B0E4D6 /* libPods-Branch-SDK-Tests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Branch-SDK-Tests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -582,7 +551,6 @@ buildActionMask = 2147483647; files = ( 5F92B2362383644C00CA909B /* SystemConfiguration.framework in Frameworks */, - 5F437E38237DE1320052064B /* CoreTelephony.framework in Frameworks */, 5F205D05231864E800C776D1 /* WebKit.framework in Frameworks */, 5FF7D2862A9549B40049158D /* AdServices.framework in Frameworks */, 466B584F1B17775900A69EDE /* AdSupport.framework in Frameworks */, @@ -622,9 +590,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4DD056122177A65C009BD3DD /* libOCMock.a in Frameworks */, - 4DD056142177A65C009BD3DD /* libOHHTTPStubs.a in Frameworks */, - CE09D25C88071212954A776D /* libPods-Branch-SDK-Tests.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -644,21 +609,19 @@ children = ( E7A728BC2AA9A112009343B7 /* BNCAPIServerTest.m */, 5FC7326F22DD1F93006E6FBC /* BNCAppleReceiptTests.m */, - 4D1683972098C901008819E3 /* BNCApplication.Test.m */, - 4D7881FB209CF2D4002B750F /* BNCApplication+BNCTest.h */, - 4D7881FC209CF2D4002B750F /* BNCApplication+BNCTest.m */, + 4D1683972098C901008819E3 /* BNCApplicationTests.m */, 5FE694372405FA2700E3AEE2 /* BNCCallbackMapTests.m */, - 4D16839D2098C901008819E3 /* BNCCrashlyticsWrapper.Test.m */, + 4D16839D2098C901008819E3 /* BNCCrashlyticsWrapperTests.m */, + C15CC9DD2ABCB549003CC339 /* BNCCurrencyTests.m */, 5F92B241238752A500CA909B /* BNCDeviceInfoTests.m */, 5F437E3F237E1A560052064B /* BNCDeviceSystemTests.m */, 5F2035CB240DDE90004FDC3E /* BNCDisableAdNetworkCalloutsTests.m */, - 4D16838E2098C901008819E3 /* BNCEncodingUtils.Test.m */, + 4D16838E2098C901008819E3 /* BNCEncodingUtilsTests.m */, 5F3D6719233062FD00454FF1 /* BNCJsonLoader.h */, 5F3D671A233062FD00454FF1 /* BNCJsonLoader.m */, 5F73FC8023314697000EBD32 /* BNCJSONUtilityTests.m */, 5F8BB66D278771890055D2DC /* BNCKeyChainTests.m */, 4D1683842098C901008819E3 /* BNCLinkDataTests.m */, - 4D1683902098C901008819E3 /* BNCLog.Test.m */, 5FA9112E29BC662000F3D35C /* BNCNetworkInterfaceTests.m */, 5FDF91582581CDF4009BE5A3 /* BNCPartnerParametersTests.m */, 5FD1786D26DEE49C009696E3 /* BNCPasteboardTests.m */, @@ -666,39 +629,29 @@ 5F92B23323835FEB00CA909B /* BNCReachabilityTests.m */, C1CC888129BAAFC000BDD2B5 /* BNCReferringURLUtilityTests.m */, 5FC20E722A93D85F00D9E1C8 /* BNCRequestFactoryTests.m */, - 4D16837E2098C901008819E3 /* BNCServerInterface.Test.m */, - 4D16837D2098C901008819E3 /* BNCServerRequestQueueOldTests.m */, 5FB6CC12264F0C7C0020E478 /* BNCServerRequestQueueTests.m */, 5FDB04F324E6156800F2F267 /* BNCSKAdNetworkTests.m */, 4D16838F2098C901008819E3 /* BNCSystemObserverTests.m */, - 4D1683A12098C901008819E3 /* BNCTestCase.h */, - 4D16838D2098C901008819E3 /* BNCTestCase.m */, - 4D7881F9209CF2D4002B750F /* BNCTestCase.strings */, - 4D7881FA209CF2D4002B750F /* BNCTestCase.Test.m */, 5FCF7EAC29DC96A7008D629E /* BNCURLFilterSkiplistUpgradeTests.m */, 4D16838C2098C901008819E3 /* BNCURLFilterTests.m */, 5F205D022318641700C776D1 /* BNCUserAgentCollectorTests.m */, 4D1683812098C901008819E3 /* Branch-SDK-Tests-Bridging-Header.h */, - 4D1683922098C901008819E3 /* BranchDelegate.Test.m */, + C15CC9DF2ABCF8C8003CC339 /* BranchActivityItemTests.m */, + C17DAF7A2AC20C2000B16B1A /* BranchClassTests.m */, 4D16839C2098C901008819E3 /* BranchEvent.Test.m */, 4D1683952098C901008819E3 /* BranchEvent.Test.swift */, - 4D1683822098C901008819E3 /* BranchInstallRequestTests.m */, 5F909B712332BEF600A774D2 /* BranchLastAttributedTouchDataTests.m */, - 4D1683932098C901008819E3 /* BranchNetworkScenario.Test.m */, - 4D16837F2098C901008819E3 /* BranchOpenRequestTests.m */, + 5F5FDA132B7DE27D00F14A43 /* BranchLoggerTests.m */, C10F393927A0872800BF5D36 /* BranchPluginSupportTests.m */, C12320B42808DB90007771C0 /* BranchQRCodeTests.m */, - 4D1683862098C901008819E3 /* BranchSDKFunctionalityTests.m */, - 4D16837B2098C901008819E3 /* BranchSetIdentityTests.m */, C10C61A9282481FB00761D7E /* BranchShareLinkTests.m */, - 4D1683962098C901008819E3 /* BranchUniversalObject.Test.m */, + 4D1683962098C901008819E3 /* BranchUniversalObjectTests.m */, 4AB16367239E3A2700D42931 /* DispatchToIsolationQueueTests.m */, 4D16839F2098C901008819E3 /* Info.plist */, - 5F892EC4236116CC0023AEC1 /* NSErrorBranchCategoryTests.m */, - 4D16839E2098C901008819E3 /* NSString+Branch.Test.m */, - E7A728BC2AA9A112009343B7 /* BNCAPIServerTest.m */, - C15CC9DD2ABCB549003CC339 /* BNCCurrencyTests.m */, - + 5F892EC4236116CC0023AEC1 /* NSErrorBranchTests.m */, + 5F8650192B76DA3200364BDE /* NSMutableDictionaryBranchTests.m */, + 4D16839E2098C901008819E3 /* NSStringBranchTests.m */, + 5F6D86D82BB5E9650068B536 /* BNCClassSerializationTests.m */, ); path = "Branch-SDK-Tests"; sourceTree = ""; @@ -720,6 +673,172 @@ path = "Branch-TestBed-UITests"; sourceTree = ""; }; + 5F644B252B7AA810000DCD78 /* BranchSDK */ = { + isa = PBXGroup; + children = ( + 5F644BB02B7AA811000DCD78 /* BNCAppGroupsData.m */, + 5F644BA82B7AA811000DCD78 /* BNCAppleReceipt.m */, + 5F644B2B2B7AA810000DCD78 /* BNCApplication.m */, + 5F644BB72B7AA811000DCD78 /* BNCCallbackMap.m */, + 5F644B3D2B7AA810000DCD78 /* BNCConfig.m */, + 5F644B322B7AA810000DCD78 /* BNCContentDiscoveryManager.m */, + 5F644B492B7AA810000DCD78 /* BNCCrashlyticsWrapper.m */, + 5F644BA32B7AA811000DCD78 /* BNCCurrency.m */, + 5F644B302B7AA810000DCD78 /* BNCDeepLinkViewControllerInstance.m */, + 5F644B432B7AA810000DCD78 /* BNCDeviceInfo.m */, + 5F644B2C2B7AA810000DCD78 /* BNCDeviceSystem.m */, + 5F644B282B7AA810000DCD78 /* BNCEncodingUtils.m */, + 5F644BB82B7AA811000DCD78 /* BNCEventUtils.m */, + 5F644BAA2B7AA811000DCD78 /* BNCInitSessionResponse.m */, + 5F644BA22B7AA811000DCD78 /* BNCJSONUtility.m */, + 5F644B512B7AA810000DCD78 /* BNCKeyChain.m */, + 5F644BAB2B7AA811000DCD78 /* BNCLinkCache.m */, + 5F644BA02B7AA811000DCD78 /* BNCLinkData.m */, + 5F644B3B2B7AA810000DCD78 /* BNCNetworkInterface.m */, + 5F644B442B7AA810000DCD78 /* BNCNetworkService.m */, + 5F644B4D2B7AA810000DCD78 /* BNCPartnerParameters.m */, + 5F644BA72B7AA811000DCD78 /* BNCPasteboard.m */, + 5F644B3C2B7AA810000DCD78 /* BNCPreferenceHelper.m */, + 5F644B482B7AA810000DCD78 /* BNCProductCategory.m */, + 5F644BB52B7AA811000DCD78 /* BNCQRCodeCache.m */, + 5F644B452B7AA810000DCD78 /* BNCReachability.m */, + 5F644B472B7AA810000DCD78 /* BNCReferringURLUtility.m */, + 5F644B462B7AA810000DCD78 /* BNCRequestFactory.m */, + 5F644BAD2B7AA811000DCD78 /* BNCServerAPI.m */, + 5F644B4A2B7AA810000DCD78 /* BNCServerInterface.m */, + 5F644B3A2B7AA810000DCD78 /* BNCServerRequest.m */, + 5F644B2E2B7AA810000DCD78 /* BNCServerRequestQueue.m */, + 5F644BB12B7AA811000DCD78 /* BNCServerResponse.m */, + 5F644BA52B7AA811000DCD78 /* BNCSKAdNetwork.m */, + 5F644BAC2B7AA811000DCD78 /* BNCSpotlightService.m */, + 5F644B372B7AA810000DCD78 /* BNCSystemObserver.m */, + 5F644B392B7AA810000DCD78 /* BNCURLFilter.m */, + 5F644B2F2B7AA810000DCD78 /* BNCUrlQueryParameter.m */, + 5F644B272B7AA810000DCD78 /* BNCUserAgentCollector.m */, + 5F644BA12B7AA811000DCD78 /* Branch.m */, + 5F644B332B7AA810000DCD78 /* Branch+Validator.m */, + 5F644B4F2B7AA810000DCD78 /* BranchActivityItemProvider.m */, + 5F644B3E2B7AA810000DCD78 /* BranchConstants.m */, + 5F644B422B7AA810000DCD78 /* BranchContentDiscoverer.m */, + 5F644B3F2B7AA810000DCD78 /* BranchContentDiscoveryManifest.m */, + 5F644BA62B7AA811000DCD78 /* BranchContentPathProperties.m */, + 5F644B4E2B7AA810000DCD78 /* BranchCSSearchableItemAttributeSet.m */, + 5F644B9F2B7AA811000DCD78 /* BranchDelegate.m */, + 5F644BB22B7AA811000DCD78 /* BranchEvent.m */, + 5F644B342B7AA810000DCD78 /* BranchInstallRequest.m */, + 5F644B4B2B7AA810000DCD78 /* BranchJsonConfig.m */, + 5F644BA42B7AA811000DCD78 /* BranchLastAttributedTouchData.m */, + 5F644B4C2B7AA810000DCD78 /* BranchLATDRequest.m */, + 5F644BA92B7AA811000DCD78 /* BranchLinkProperties.m */, + 5F5FDA0F2B7DE20800F14A43 /* BranchLogger.m */, + 5F644BB42B7AA811000DCD78 /* BranchOpenRequest.m */, + 5F644B2A2B7AA810000DCD78 /* BranchPasteControl.m */, + 5F644B352B7AA810000DCD78 /* BranchPluginSupport.m */, + 5F644B502B7AA810000DCD78 /* BranchQRCode.m */, + 5F644B312B7AA810000DCD78 /* BranchScene.m */, + 5F644BAE2B7AA811000DCD78 /* BranchShareLink.m */, + 5F644BB32B7AA811000DCD78 /* BranchShortUrlRequest.m */, + 5F644BB62B7AA811000DCD78 /* BranchShortUrlSyncRequest.m */, + 5F644B402B7AA810000DCD78 /* BranchSpotlightUrlRequest.m */, + 5F644B292B7AA810000DCD78 /* BranchUniversalObject.m */, + 5F644B262B7AA810000DCD78 /* NSError+Branch.m */, + 5F644B2D2B7AA810000DCD78 /* NSMutableDictionary+Branch.m */, + 5F644B362B7AA810000DCD78 /* NSString+Branch.m */, + 5F644BAF2B7AA811000DCD78 /* UIViewController+Branch.m */, + 5F644B6E2B7AA810000DCD78 /* Private */, + 5F644B522B7AA810000DCD78 /* Public */, + ); + name = BranchSDK; + path = ../Sources/BranchSDK; + sourceTree = ""; + }; + 5F644B522B7AA810000DCD78 /* Public */ = { + isa = PBXGroup; + children = ( + 5F644B5E2B7AA810000DCD78 /* BNCCallbacks.h */, + 5F644B5A2B7AA810000DCD78 /* BNCCurrency.h */, + 5F644B612B7AA810000DCD78 /* BNCInitSessionResponse.h */, + 5F644B602B7AA810000DCD78 /* BNCLinkCache.h */, + 5F644B532B7AA810000DCD78 /* BNCLinkData.h */, + 5F644B632B7AA810000DCD78 /* BNCNetworkServiceProtocol.h */, + 5F644B6B2B7AA810000DCD78 /* BNCPreferenceHelper.h */, + 5F644B6D2B7AA810000DCD78 /* BNCProductCategory.h */, + 5F644B6C2B7AA810000DCD78 /* BNCServerInterface.h */, + 5F644B672B7AA810000DCD78 /* BNCServerRequest.h */, + 5F644B642B7AA810000DCD78 /* BNCServerRequestQueue.h */, + 5F644B5D2B7AA810000DCD78 /* BNCServerResponse.h */, + 5F644B5C2B7AA810000DCD78 /* Branch.h */, + 5F644B562B7AA810000DCD78 /* BranchActivityItemProvider.h */, + 5F644B572B7AA810000DCD78 /* BranchCSSearchableItemAttributeSet.h */, + 5F644B682B7AA810000DCD78 /* BranchDeepLinkingController.h */, + 5F644B542B7AA810000DCD78 /* BranchDelegate.h */, + 5F644B622B7AA810000DCD78 /* BranchEvent.h */, + 5F644B5B2B7AA810000DCD78 /* BranchLastAttributedTouchData.h */, + 5F644B582B7AA810000DCD78 /* BranchLinkProperties.h */, + 5F5FDA112B7DE22A00F14A43 /* BranchLogger.h */, + 5F644B652B7AA810000DCD78 /* BranchPasteControl.h */, + 5F644B692B7AA810000DCD78 /* BranchPluginSupport.h */, + 5F644B552B7AA810000DCD78 /* BranchQRCode.h */, + 5F644B6A2B7AA810000DCD78 /* BranchScene.h */, + 5F644B592B7AA810000DCD78 /* BranchSDK.h */, + 5F644B5F2B7AA810000DCD78 /* BranchShareLink.h */, + 5F644B662B7AA810000DCD78 /* BranchUniversalObject.h */, + ); + path = Public; + sourceTree = ""; + }; + 5F644B6E2B7AA810000DCD78 /* Private */ = { + isa = PBXGroup; + children = ( + 5F644B762B7AA810000DCD78 /* BNCAppGroupsData.h */, + 5F644B702B7AA810000DCD78 /* BNCAppleReceipt.h */, + 5F644B812B7AA811000DCD78 /* BNCApplication.h */, + 5F644B7B2B7AA811000DCD78 /* BNCCallbackMap.h */, + 5F644B952B7AA811000DCD78 /* BNCConfig.h */, + 5F644B8F2B7AA811000DCD78 /* BNCContentDiscoveryManager.h */, + 5F644B9A2B7AA811000DCD78 /* BNCCrashlyticsWrapper.h */, + 5F644B8E2B7AA811000DCD78 /* BNCDeepLinkViewControllerInstance.h */, + 5F644B902B7AA811000DCD78 /* BNCDeviceInfo.h */, + 5F644B832B7AA811000DCD78 /* BNCDeviceSystem.h */, + 5F644B852B7AA811000DCD78 /* BNCEncodingUtils.h */, + 5F644B7A2B7AA811000DCD78 /* BNCEventUtils.h */, + 5F644B742B7AA810000DCD78 /* BNCJSONUtility.h */, + 5F644B6F2B7AA810000DCD78 /* BNCKeyChain.h */, + 5F644B882B7AA811000DCD78 /* BNCNetworkInterface.h */, + 5F644B9D2B7AA811000DCD78 /* BNCNetworkService.h */, + 5F644B972B7AA811000DCD78 /* BNCPartnerParameters.h */, + 5F644B712B7AA810000DCD78 /* BNCPasteboard.h */, + 5F644B7D2B7AA811000DCD78 /* BNCQRCodeCache.h */, + 5F644B9E2B7AA811000DCD78 /* BNCReachability.h */, + 5F644B9C2B7AA811000DCD78 /* BNCReferringURLUtility.h */, + 5F644B9B2B7AA811000DCD78 /* BNCRequestFactory.h */, + 5F644B782B7AA810000DCD78 /* BNCServerAPI.h */, + 5F644B732B7AA810000DCD78 /* BNCSKAdNetwork.h */, + 5F644B792B7AA810000DCD78 /* BNCSpotlightService.h */, + 5F644B8A2B7AA811000DCD78 /* BNCSystemObserver.h */, + 5F644B872B7AA811000DCD78 /* BNCURLFilter.h */, + 5F644B802B7AA811000DCD78 /* BNCUrlQueryParameter.h */, + 5F644B842B7AA811000DCD78 /* BNCUserAgentCollector.h */, + 5F644B8D2B7AA811000DCD78 /* Branch+Validator.h */, + 5F644B962B7AA811000DCD78 /* BranchConstants.h */, + 5F644B922B7AA811000DCD78 /* BranchContentDiscoverer.h */, + 5F644B942B7AA811000DCD78 /* BranchContentDiscoveryManifest.h */, + 5F644B722B7AA810000DCD78 /* BranchContentPathProperties.h */, + 5F644B8C2B7AA811000DCD78 /* BranchInstallRequest.h */, + 5F644B982B7AA811000DCD78 /* BranchJsonConfig.h */, + 5F644B992B7AA811000DCD78 /* BranchLATDRequest.h */, + 5F644B7E2B7AA811000DCD78 /* BranchOpenRequest.h */, + 5F644B7F2B7AA811000DCD78 /* BranchShortUrlRequest.h */, + 5F644B7C2B7AA811000DCD78 /* BranchShortUrlSyncRequest.h */, + 5F644B932B7AA811000DCD78 /* BranchSpotlightUrlRequest.h */, + 5F644B862B7AA811000DCD78 /* NSError+Branch.h */, + 5F644B822B7AA811000DCD78 /* NSMutableDictionary+Branch.h */, + 5F644B8B2B7AA811000DCD78 /* NSString+Branch.h */, + 5F644B752B7AA810000DCD78 /* UIViewController+Branch.h */, + ); + path = Private; + sourceTree = ""; + }; 5F8B7B3C21B5F5CD009CE0A6 /* Branch-SDK-Unhosted-Tests */ = { isa = PBXGroup; children = ( @@ -748,7 +867,7 @@ 6589EBA52674270100F2E28B /* Branch-TestBed-CI.xctestplan */, 033FC71025AC1E5800D8319E /* Branch-TestBed.xctestplan */, 4D93D8592098CC4400CFABA6 /* README.md */, - 670016BB1946309100A9E103 /* BranchSDK */, + 5F644B252B7AA810000DCD78 /* BranchSDK */, 4D16837A2098C901008819E3 /* Branch-SDK-Tests */, 5F8B7B3C21B5F5CD009CE0A6 /* Branch-SDK-Unhosted-Tests */, 670016691940F51400A9E103 /* Branch-TestBed */, @@ -756,7 +875,6 @@ 5FC4CF7D24860C320001E701 /* cannedData */, 670016621940F51400A9E103 /* Frameworks */, 670016611940F51400A9E103 /* Products */, - D7B9BBDAF01EEBE97D55F0AF /* Pods */, ); sourceTree = ""; }; @@ -792,7 +910,6 @@ 670016631940F51400A9E103 /* Foundation.framework */, 670016651940F51400A9E103 /* CoreGraphics.framework */, 670016671940F51400A9E103 /* UIKit.framework */, - F2C896423B99BFA2E8B0E4D6 /* libPods-Branch-SDK-Tests.a */, ); name = Frameworks; sourceTree = ""; @@ -810,15 +927,15 @@ 63E4C4861D25E16A00A45FD8 /* LogOutputViewController.h */, 63E4C4871D25E16A00A45FD8 /* LogOutputViewController.m */, 4DBEFFFB1FB12A1000F7C41B /* Main.storyboard */, - E72489D028E40D0200DCD8FD /* PasteControlViewController.h */, - E72489D128E40D0200DCD8FD /* PasteControlViewController.m */, 63E4C4891D25E17B00A45FD8 /* NavigationController.h */, 63E4C48A1D25E17B00A45FD8 /* NavigationController.m */, + E72489D028E40D0200DCD8FD /* PasteControlViewController.h */, + E72489D128E40D0200DCD8FD /* PasteControlViewController.m */, + C10A6DE529A995590061A851 /* StoreKitTestCertificate.cer */, 6700166A1940F51400A9E103 /* Supporting Files */, + C10A6DE029A97E440061A851 /* TestStoreKitConfig.storekit */, 670016781940F51400A9E103 /* ViewController.h */, 670016791940F51400A9E103 /* ViewController.m */, - C10A6DE029A97E440061A851 /* TestStoreKitConfig.storekit */, - C10A6DE529A995590061A851 /* StoreKitTestCertificate.cer */, ); path = "Branch-TestBed"; sourceTree = ""; @@ -834,167 +951,6 @@ name = "Supporting Files"; sourceTree = ""; }; - 670016BB1946309100A9E103 /* BranchSDK */ = { - isa = PBXGroup; - children = ( - 5FB38C7E2521234F00E9A85A /* BNCAppGroupsData.h */, - 5FB38C7F2521234F00E9A85A /* BNCAppGroupsData.m */, - 5FC7326622D81002006E6FBC /* BNCAppleReceipt.h */, - 5FC7326722D81002006E6FBC /* BNCAppleReceipt.m */, - 4D59B51B2006979B00F89FD5 /* BNCApplication.h */, - 4D59B51C2006979B00F89FD5 /* BNCApplication.m */, - 5FE693F52405E91500E3AEE2 /* BNCCallbackMap.h */, - 5FE693F62405E91500E3AEE2 /* BNCCallbackMap.m */, - E2B947491D15D73900F2270D /* BNCCallbacks.h */, - 7E6ACAF919E324120066913E /* BNCConfig.h */, - 4D3FA94A1DFF31EB00E2B6A9 /* BNCConfig.m */, - 466D5A0F1B5991E3009DB845 /* BNCContentDiscoveryManager.h */, - 466D5A101B5991E3009DB845 /* BNCContentDiscoveryManager.m */, - 7B18DF471F1F00E200C25C84 /* BNCCrashlyticsWrapper.h */, - 7B18DF481F1F00E200C25C84 /* BNCCrashlyticsWrapper.m */, - C17394622A8C2282006068F2 /* BNCCurrency.h */, - C17394632A8C228D006068F2 /* BNCCurrency.m */, - F1D3591E1ED4DCC500A93FD5 /* BNCDeepLinkViewControllerInstance.h */, - F1D3591F1ED4DCC500A93FD5 /* BNCDeepLinkViewControllerInstance.m */, - 7D5882301CA1BEEA00FF6358 /* BNCDeviceInfo.h */, - 7D5882391CA1DF2700FF6358 /* BNCDeviceInfo.m */, - 5F437E3B237E03C00052064B /* BNCDeviceSystem.h */, - 5F437E3C237E03C00052064B /* BNCDeviceSystem.m */, - 464EA3991ACB38EC000E4094 /* BNCEncodingUtils.h */, - 464EA39A1ACB38EC000E4094 /* BNCEncodingUtils.m */, - C10A6DE329A991E30061A851 /* BNCEventUtils.h */, - C10A6DE129A991CB0061A851 /* BNCEventUtils.m */, - 4DE649191FE1D7F500226507 /* BNCFieldDefines.h */, - 5FE276AD2432705B00EA1BD2 /* BNCInitSessionResponse.h */, - 5FE276AE2432705B00EA1BD2 /* BNCInitSessionResponse.m */, - 5F73FC7C23313F7A000EBD32 /* BNCJSONUtility.h */, - 5F73FC7D23313F7A000EBD32 /* BNCJSONUtility.m */, - 4D59B51D2006979C00F89FD5 /* BNCKeyChain.h */, - 4D59B51E2006979C00F89FD5 /* BNCKeyChain.m */, - 7E30BCF51A72FE7900AC7402 /* BNCLinkCache.h */, - 7E30BCF61A72FE7900AC7402 /* BNCLinkCache.m */, - 7E30BCF21A71EEEE00AC7402 /* BNCLinkData.h */, - 7E30BCF31A71EEEE00AC7402 /* BNCLinkData.m */, - 4DA577151E67B1D600A43BDD /* BNCLog.h */, - 4DA577161E67B1D600A43BDD /* BNCLog.m */, - 5F92B23D238486E200CA909B /* BNCNetworkInterface.h */, - 5F92B23E238486E200CA909B /* BNCNetworkInterface.m */, - 5F38020224DCC2E600E6FAFD /* BNCNetworkService.h */, - 5F3801F924DCC2E500E6FAFD /* BNCNetworkService.m */, - 5F3801FA24DCC2E500E6FAFD /* BNCNetworkServiceProtocol.h */, - 5FDF914325818280009BE5A3 /* BNCPartnerParameters.h */, - 5FDF914425818280009BE5A3 /* BNCPartnerParameters.m */, - 5F4101F326851DC7003699AD /* BNCPasteboard.h */, - 5F4101F426851DC7003699AD /* BNCPasteboard.m */, - 670016C11946309100A9E103 /* BNCPreferenceHelper.h */, - 670016C21946309100A9E103 /* BNCPreferenceHelper.m */, - C173945E2A8AEDFB006068F2 /* BNCProductCategory.h */, - C173945F2A8AEE0E006068F2 /* BNCProductCategory.m */, - C10C61AB28248E5A00761D7E /* BNCQRCodeCache.h */, - C10C61AC28248E5A00761D7E /* BNCQRCodeCache.m */, - 5F92B22F23834AFD00CA909B /* BNCReachability.h */, - 5F92B23023834AFD00CA909B /* BNCReachability.m */, - C1CC887D29BAA06600BDD2B5 /* BNCReferringURLUtility.h */, - C1CC887E29BAA06600BDD2B5 /* BNCReferringURLUtility.m */, - 5F5335C12A8D92C5006CF171 /* BNCRequestFactory.h */, - 5F5335C22A8D92C5006CF171 /* BNCRequestFactory.m */, - E7CBC3972AA9403100B2D0D9 /* BNCServerAPI.h */, - E7CBC3982AA9403100B2D0D9 /* BNCServerAPI.m */, - 5F3801EB24DCC2E400E6FAFD /* BNCServerInterface.h */, - 5F38020724DCC2E700E6FAFD /* BNCServerInterface.m */, - 5F38020824DCC2E700E6FAFD /* BNCServerRequest.h */, - 5F3801E024DCC2E200E6FAFD /* BNCServerRequest.m */, - 5F38020124DCC2E600E6FAFD /* BNCServerRequestQueue.h */, - 5F38020324DCC2E600E6FAFD /* BNCServerRequestQueue.m */, - 5F3801F024DCC2E400E6FAFD /* BNCServerResponse.h */, - 5F3801FC24DCC2E600E6FAFD /* BNCServerResponse.m */, - 5FDB04EB24E4D23300F2F267 /* BNCSKAdNetwork.h */, - 5FDB04EC24E4D23300F2F267 /* BNCSKAdNetwork.m */, - F185BAA81F3D30D70056300C /* BNCSpotlightService.h */, - F185BAA91F3D30D70056300C /* BNCSpotlightService.m */, - 670016C71946309100A9E103 /* BNCSystemObserver.h */, - 670016C81946309100A9E103 /* BNCSystemObserver.m */, - 4D7881F6209CF28E002B750F /* BNCThreads.h */, - 4D7881F5209CF28E002B750F /* BNCThreads.m */, - 4D955CCA2035021400FB8008 /* BNCURLFilter.h */, - 4D955CCB2035021400FB8008 /* BNCURLFilter.m */, - C1CC888629C27E8000BDD2B5 /* BNCUrlQueryParameter.h */, - C1CC888729C27E8000BDD2B5 /* BNCUrlQueryParameter.m */, - 5FB0AA69231875B400A0F9EA /* BNCUserAgentCollector.h */, - 5FB0AA6A231875B500A0F9EA /* BNCUserAgentCollector.m */, - 670016BD1946309100A9E103 /* Branch.h */, - 670016BE1946309100A9E103 /* Branch.m */, - 9A2B7DD31FEC3BAE00CD188B /* Branch+Validator.h */, - 9A2B7DD41FEC3BAE00CD188B /* Branch+Validator.m */, - D258D2C41A794D64004A1C90 /* BranchActivityItemProvider.h */, - D258D2C51A794D64004A1C90 /* BranchActivityItemProvider.m */, - 4665AF221B28935700184037 /* BranchConstants.h */, - 4665AF251B28B9BB00184037 /* BranchConstants.m */, - 5F38020924DCC2E700E6FAFD /* BranchContentDiscoverer.h */, - 5F38020C24DCC2E700E6FAFD /* BranchContentDiscoverer.m */, - 5F38020424DCC2E600E6FAFD /* BranchContentDiscoveryManifest.h */, - 5F3801FB24DCC2E500E6FAFD /* BranchContentDiscoveryManifest.m */, - 5F3801DF24DCC2E200E6FAFD /* BranchContentPathProperties.h */, - 5F3801EC24DCC2E400E6FAFD /* BranchContentPathProperties.m */, - 54391A131BA249FA0061CB0F /* BranchCSSearchableItemAttributeSet.h */, - 54391A141BA249FA0061CB0F /* BranchCSSearchableItemAttributeSet.m */, - 46DBB42F1B335A9B00642FC8 /* BranchDeepLinkingController.h */, - 4DB327FD1FA10B9000ACF9B0 /* BranchDelegate.h */, - 4DB327FE1FA10B9000ACF9B0 /* BranchDelegate.m */, - 4DCF4AF81F4388F600AF9AAB /* BranchEvent.h */, - 4DCF4AF91F4388F600AF9AAB /* BranchEvent.m */, - 5F3801FE24DCC2E600E6FAFD /* BranchInstallRequest.h */, - 5F3801E424DCC2E300E6FAFD /* BranchInstallRequest.m */, - 3A78D573251EB59B002A25CF /* BranchJsonConfig.h */, - 3A78D575251EB5BF002A25CF /* BranchJsonConfig.m */, - 5F3D6713232C589100454FF1 /* BranchLastAttributedTouchData.h */, - 5F3D6712232C589100454FF1 /* BranchLastAttributedTouchData.m */, - 5F3801F624DCC2E500E6FAFD /* BranchLATDRequest.h */, - 5F3801EE24DCC2E400E6FAFD /* BranchLATDRequest.m */, - 54FF1F8F1BD1DC320004CE2E /* BranchLinkProperties.h */, - 54FF1F901BD1DC320004CE2E /* BranchLinkProperties.m */, - 5F3801FD24DCC2E600E6FAFD /* BranchOpenRequest.h */, - 5F3801E824DCC2E300E6FAFD /* BranchOpenRequest.m */, - E729974B28E2BBFA007D91B2 /* BranchPasteControl.h */, - E729974C28E2BBFA007D91B2 /* BranchPasteControl.m */, - C1614D5A285BD4AF0098946B /* BranchPluginSupport.h */, - C1614D5B285BD4AF0098946B /* BranchPluginSupport.m */, - C12320B6280E2060007771C0 /* BranchQRCode.h */, - C12320B8280E2091007771C0 /* BranchQRCode.m */, - 5F32D7C1242AC338000DE539 /* BranchScene.h */, - 5F32D7C2242AC338000DE539 /* BranchScene.m */, - 4DB567311E79F46000A8A324 /* BranchShareLink.h */, - 4DB567321E79F46000A8A324 /* BranchShareLink.m */, - 5F3801F524DCC2E500E6FAFD /* BranchShortUrlRequest.h */, - 5F38020B24DCC2E700E6FAFD /* BranchShortUrlRequest.m */, - 5F3801F724DCC2E500E6FAFD /* BranchShortUrlSyncRequest.h */, - 5F3801E624DCC2E300E6FAFD /* BranchShortUrlSyncRequest.m */, - 5F3801E724DCC2E300E6FAFD /* BranchSpotlightUrlRequest.h */, - 5F38020024DCC2E600E6FAFD /* BranchSpotlightUrlRequest.m */, - 54FF1F8B1BD1D4AE0004CE2E /* BranchUniversalObject.h */, - 54FF1F8C1BD1D4AE0004CE2E /* BranchUniversalObject.m */, - 5F892EBD2361157D0023AEC1 /* NSError+Branch.h */, - 5F892EBC2361157D0023AEC1 /* NSError+Branch.m */, - 4D3514191E3201D80085EBA1 /* NSMutableDictionary+Branch.h */, - 4D35141A1E3201D80085EBA1 /* NSMutableDictionary+Branch.m */, - 4DA577201E67B28700A43BDD /* NSString+Branch.h */, - 4DA577211E67B28700A43BDD /* NSString+Branch.m */, - 4D9607F21FBF9472008AB3C2 /* UIViewController+Branch.h */, - 4D9607F31FBF9473008AB3C2 /* UIViewController+Branch.m */, - ); - name = BranchSDK; - path = ../BranchSDK; - sourceTree = ""; - }; - D7B9BBDAF01EEBE97D55F0AF /* Pods */ = { - isa = PBXGroup; - children = ( - 130D24DFC422D39DC8CB96CC /* Pods-Branch-SDK-Tests.debug.xcconfig */, - 713E79E4D7BF588897570949 /* Pods-Branch-SDK-Tests.release.xcconfig */, - ); - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ @@ -1002,81 +958,79 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 3A78D574251EB59B002A25CF /* BranchJsonConfig.h in Headers */, - 5F38022C24DCC2E800E6FAFD /* BranchOpenRequest.h in Headers */, - 5F38022624DCC2E800E6FAFD /* BranchShortUrlSyncRequest.h in Headers */, - 5FB38C802521234F00E9A85A /* BNCAppGroupsData.h in Headers */, - 9A2B7DD51FEC3BAF00CD188B /* Branch+Validator.h in Headers */, - F185BAAA1F3D30D70056300C /* BNCSpotlightService.h in Headers */, - 5FDB04ED24E4D23300F2F267 /* BNCSKAdNetwork.h in Headers */, - E7CBC3992AA9403200B2D0D9 /* BNCServerAPI.h in Headers */, - 4D955CCC2035021400FB8008 /* BNCURLFilter.h in Headers */, - 5F38023824DCC2E800E6FAFD /* BranchContentDiscoverer.h in Headers */, - 5F38023324DCC2E800E6FAFD /* BranchContentDiscoveryManifest.h in Headers */, - 5F38023724DCC2E800E6FAFD /* BNCServerRequest.h in Headers */, - E2B9474A1D15D75000F2270D /* BNCCallbacks.h in Headers */, - 4DCAC8021F426F7C00405D1D /* BNCConfig.h in Headers */, - 4D59B5212006979C00F89FD5 /* BNCKeyChain.h in Headers */, - C1CC888829C27E8000BDD2B5 /* BNCUrlQueryParameter.h in Headers */, - 4DCAC8091F426F7C00405D1D /* BNCLinkCache.h in Headers */, - 4DCAC80A1F426F7C00405D1D /* BNCLinkData.h in Headers */, - 5F73FC7E23313F7A000EBD32 /* BNCJSONUtility.h in Headers */, - E729974D28E2BBFA007D91B2 /* BranchPasteControl.h in Headers */, - 4DCAC80B1F426F7C00405D1D /* BNCLog.h in Headers */, - 4DCAC80C1F426F7C00405D1D /* BNCPreferenceHelper.h in Headers */, - 4DCAC8101F426F7C00405D1D /* Branch.h in Headers */, - 4DCAC8111F426F7C00405D1D /* BranchActivityItemProvider.h in Headers */, - 4DCAC8121F426F7C00405D1D /* BranchConstants.h in Headers */, - 5F38022924DCC2E800E6FAFD /* BNCNetworkServiceProtocol.h in Headers */, - 5F437E3D237E03C00052064B /* BNCDeviceSystem.h in Headers */, - C10A6DE429A991E30061A851 /* BNCEventUtils.h in Headers */, - C17394652A8C23D1006068F2 /* BNCCurrency.h in Headers */, - C17394612A8C20FD006068F2 /* BNCProductCategory.h in Headers */, - C1CC887F29BAA06600BDD2B5 /* BNCReferringURLUtility.h in Headers */, - C12320B7280E2060007771C0 /* BranchQRCode.h in Headers */, - 4DCAC8171F426F7C00405D1D /* BranchDeepLinkingController.h in Headers */, - 4DB327FF1FA10B9000ACF9B0 /* BranchDelegate.h in Headers */, - 5F38022424DCC2E800E6FAFD /* BranchShortUrlRequest.h in Headers */, - 5F22AFC1240600BE00837CF5 /* BNCCallbackMap.m in Headers */, - 4DCF4B031F438A8700AF9AAB /* BranchEvent.h in Headers */, - 5F38023124DCC2E800E6FAFD /* BNCNetworkService.h in Headers */, - 5F38021624DCC2E800E6FAFD /* BranchSpotlightUrlRequest.h in Headers */, - 5F4101F526851DC7003699AD /* BNCPasteboard.h in Headers */, - C1614D5C285BD4AF0098946B /* BranchPluginSupport.h in Headers */, - 4DCAC8181F426F7C00405D1D /* BranchLinkProperties.h in Headers */, - 4DCAC81A1F426F7C00405D1D /* BranchUniversalObject.h in Headers */, - 4DCAC8191F426F7C00405D1D /* BranchShareLink.h in Headers */, - 5FC7326822D81002006E6FBC /* BNCAppleReceipt.h in Headers */, - 5FDF914525818280009BE5A3 /* BNCPartnerParameters.h in Headers */, - 4DE6491A1FE1D7F500226507 /* BNCFieldDefines.h in Headers */, - 4D9607F41FBF9473008AB3C2 /* UIViewController+Branch.h in Headers */, - 4D7881F8209CF28F002B750F /* BNCThreads.h in Headers */, - 4DCAC8031F426F7C00405D1D /* BNCContentDiscoveryManager.h in Headers */, - 5F38022524DCC2E800E6FAFD /* BranchLATDRequest.h in Headers */, - 4DCAC8051F426F7C00405D1D /* BNCDeviceInfo.h in Headers */, - 4DCAC8061F426F7C00405D1D /* BNCEncodingUtils.h in Headers */, - 5F92B23123834AFD00CA909B /* BNCReachability.h in Headers */, - 4DCAC80E1F426F7C00405D1D /* BNCSystemObserver.h in Headers */, - C10C61AD28248E5A00761D7E /* BNCQRCodeCache.h in Headers */, - 5FE693F72405E91500E3AEE2 /* BNCCallbackMap.h in Headers */, - 5F38021F24DCC2E800E6FAFD /* BNCServerResponse.h in Headers */, - 5F38023024DCC2E800E6FAFD /* BNCServerRequestQueue.h in Headers */, - 4DCAC8161F426F7C00405D1D /* BranchCSSearchableItemAttributeSet.h in Headers */, - 4D59B51F2006979C00F89FD5 /* BNCApplication.h in Headers */, - 5FB0AA6B231875B500A0F9EA /* BNCUserAgentCollector.h in Headers */, - 5F892EBF2361157E0023AEC1 /* NSError+Branch.h in Headers */, - 5F3D6715232C589100454FF1 /* BranchLastAttributedTouchData.h in Headers */, - 5F38020E24DCC2E800E6FAFD /* BranchContentPathProperties.h in Headers */, - 5F92B23F238486E200CA909B /* BNCNetworkInterface.h in Headers */, - 4DCAC8301F426F7C00405D1D /* NSMutableDictionary+Branch.h in Headers */, - 4DCAC8311F426F7C00405D1D /* NSString+Branch.h in Headers */, - 5F38021A24DCC2E800E6FAFD /* BNCServerInterface.h in Headers */, - 5F38022D24DCC2E800E6FAFD /* BranchInstallRequest.h in Headers */, - 5F5335C32A8D92C5006CF171 /* BNCRequestFactory.h in Headers */, - 5FE276AF2432705B00EA1BD2 /* BNCInitSessionResponse.h in Headers */, - F1D359201ED4DCC500A93FD5 /* BNCDeepLinkViewControllerInstance.h in Headers */, - 7B18DF491F1F00E200C25C84 /* BNCCrashlyticsWrapper.h in Headers */, - 5F32D7C3242AC339000DE539 /* BranchScene.h in Headers */, + 5F644BE52B7AA811000DCD78 /* BNCLinkData.h in Headers */, + 5F644BE62B7AA811000DCD78 /* BranchDelegate.h in Headers */, + 5F644BE72B7AA811000DCD78 /* BranchQRCode.h in Headers */, + 5F644BE82B7AA811000DCD78 /* BranchActivityItemProvider.h in Headers */, + 5F644BE92B7AA811000DCD78 /* BranchCSSearchableItemAttributeSet.h in Headers */, + 5F644BEA2B7AA811000DCD78 /* BranchLinkProperties.h in Headers */, + 5F644BEB2B7AA811000DCD78 /* BranchSDK.h in Headers */, + 5F644BEC2B7AA811000DCD78 /* BNCCurrency.h in Headers */, + 5F644BED2B7AA811000DCD78 /* BranchLastAttributedTouchData.h in Headers */, + 5F644BEE2B7AA811000DCD78 /* Branch.h in Headers */, + 5F644BEF2B7AA811000DCD78 /* BNCServerResponse.h in Headers */, + 5F644BF02B7AA811000DCD78 /* BNCCallbacks.h in Headers */, + 5F644BF12B7AA811000DCD78 /* BranchShareLink.h in Headers */, + 5F644BF22B7AA811000DCD78 /* BNCLinkCache.h in Headers */, + 5F644BF32B7AA811000DCD78 /* BNCInitSessionResponse.h in Headers */, + 5F644BF42B7AA811000DCD78 /* BranchEvent.h in Headers */, + 5F644BF52B7AA811000DCD78 /* BNCNetworkServiceProtocol.h in Headers */, + 5F644BF62B7AA811000DCD78 /* BNCServerRequestQueue.h in Headers */, + 5F644BF72B7AA811000DCD78 /* BranchPasteControl.h in Headers */, + 5F644BF82B7AA811000DCD78 /* BranchUniversalObject.h in Headers */, + 5F644BF92B7AA811000DCD78 /* BNCServerRequest.h in Headers */, + 5F644BFA2B7AA811000DCD78 /* BranchDeepLinkingController.h in Headers */, + 5F644BFB2B7AA811000DCD78 /* BranchPluginSupport.h in Headers */, + 5F644BFC2B7AA811000DCD78 /* BranchScene.h in Headers */, + 5F644BFD2B7AA811000DCD78 /* BNCPreferenceHelper.h in Headers */, + 5F644BFE2B7AA811000DCD78 /* BNCServerInterface.h in Headers */, + 5F644BFF2B7AA811000DCD78 /* BNCProductCategory.h in Headers */, + 5F644C1C2B7AA811000DCD78 /* NSString+Branch.h in Headers */, + 5F644C132B7AA811000DCD78 /* NSMutableDictionary+Branch.h in Headers */, + 5F644C122B7AA811000DCD78 /* BNCApplication.h in Headers */, + 5F5FDA122B7DE22A00F14A43 /* BranchLogger.h in Headers */, + 5F644C102B7AA811000DCD78 /* BranchShortUrlRequest.h in Headers */, + 5F644C232B7AA811000DCD78 /* BranchContentDiscoverer.h in Headers */, + 5F644C032B7AA811000DCD78 /* BranchContentPathProperties.h in Headers */, + 5F644C042B7AA811000DCD78 /* BNCSKAdNetwork.h in Headers */, + 5F644C0E2B7AA811000DCD78 /* BNCQRCodeCache.h in Headers */, + 5F644C2E2B7AA811000DCD78 /* BNCNetworkService.h in Headers */, + 5F644C1B2B7AA811000DCD78 /* BNCSystemObserver.h in Headers */, + 5F644C292B7AA811000DCD78 /* BranchJsonConfig.h in Headers */, + 5F644C2A2B7AA811000DCD78 /* BranchLATDRequest.h in Headers */, + 5F644C1F2B7AA811000DCD78 /* BNCDeepLinkViewControllerInstance.h in Headers */, + 5F644C0A2B7AA811000DCD78 /* BNCSpotlightService.h in Headers */, + 5F644C212B7AA811000DCD78 /* BNCDeviceInfo.h in Headers */, + 5F644C282B7AA811000DCD78 /* BNCPartnerParameters.h in Headers */, + 5F644C242B7AA811000DCD78 /* BranchSpotlightUrlRequest.h in Headers */, + 5F644C052B7AA811000DCD78 /* BNCJSONUtility.h in Headers */, + 5F644C2D2B7AA811000DCD78 /* BNCReferringURLUtility.h in Headers */, + 5F644C0B2B7AA811000DCD78 /* BNCEventUtils.h in Headers */, + 5F644C272B7AA811000DCD78 /* BranchConstants.h in Headers */, + 5F644C002B7AA811000DCD78 /* BNCKeyChain.h in Headers */, + 5F644C1D2B7AA811000DCD78 /* BranchInstallRequest.h in Headers */, + 5F644C0D2B7AA811000DCD78 /* BranchShortUrlSyncRequest.h in Headers */, + 5F644C152B7AA811000DCD78 /* BNCUserAgentCollector.h in Headers */, + 5F644C262B7AA811000DCD78 /* BNCConfig.h in Headers */, + 5F644C092B7AA811000DCD78 /* BNCServerAPI.h in Headers */, + 5F644C202B7AA811000DCD78 /* BNCContentDiscoveryManager.h in Headers */, + 5F644C0C2B7AA811000DCD78 /* BNCCallbackMap.h in Headers */, + 5F644C192B7AA811000DCD78 /* BNCNetworkInterface.h in Headers */, + 5F644C172B7AA811000DCD78 /* NSError+Branch.h in Headers */, + 5F644C182B7AA811000DCD78 /* BNCURLFilter.h in Headers */, + 5F644C072B7AA811000DCD78 /* BNCAppGroupsData.h in Headers */, + 5F644C252B7AA811000DCD78 /* BranchContentDiscoveryManifest.h in Headers */, + 5F644C162B7AA811000DCD78 /* BNCEncodingUtils.h in Headers */, + 5F644C012B7AA811000DCD78 /* BNCAppleReceipt.h in Headers */, + 5F644C1E2B7AA811000DCD78 /* Branch+Validator.h in Headers */, + 5F644C112B7AA811000DCD78 /* BNCUrlQueryParameter.h in Headers */, + 5F644C2B2B7AA811000DCD78 /* BNCCrashlyticsWrapper.h in Headers */, + 5F644C2F2B7AA811000DCD78 /* BNCReachability.h in Headers */, + 5F644C062B7AA811000DCD78 /* UIViewController+Branch.h in Headers */, + 5F644C022B7AA811000DCD78 /* BNCPasteboard.h in Headers */, + 5F644C0F2B7AA811000DCD78 /* BranchOpenRequest.h in Headers */, + 5F644C2C2B7AA811000DCD78 /* BNCRequestFactory.h in Headers */, + 5F644C142B7AA811000DCD78 /* BNCDeviceSystem.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1141,7 +1095,6 @@ isa = PBXNativeTarget; buildConfigurationList = 7E6B3B571AA42D0E005F45BF /* Build configuration list for PBXNativeTarget "Branch-SDK-Tests" */; buildPhases = ( - BF36CDEC6A8D1A1CF5E669A4 /* [CP] Check Pods Manifest.lock */, 7E6B3B4D1AA42D0E005F45BF /* Sources */, 7E6B3B4E1AA42D0E005F45BF /* Frameworks */, 7E6B3B4F1AA42D0E005F45BF /* Resources */, @@ -1271,7 +1224,6 @@ 5FC4CF8C24860C440001E701 /* latd.json in Resources */, 5FC4CF9024860C440001E701 /* example.json in Resources */, 5FC4CF9224860C440001E701 /* latd_missing_data.json in Resources */, - 4D7881FD209CF2D4002B750F /* BNCTestCase.strings in Resources */, 5FC4CF8D24860C440001E701 /* latd_missing_window.json in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -1303,28 +1255,6 @@ shellPath = /bin/sh; shellScript = "xcrun simctl terminate booted io.branch.sdk.Branch-TestBed\nxcrun simctl uninstall booted io.branch.sdk.Branch-TestBed\n"; }; - BF36CDEC6A8D1A1CF5E669A4 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Branch-SDK-Tests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -1332,76 +1262,75 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - C10A6DE229A991CB0061A851 /* BNCEventUtils.m in Sources */, - C1CC888029BAA06600BDD2B5 /* BNCReferringURLUtility.m in Sources */, - C12320B9280E2091007771C0 /* BranchQRCode.m in Sources */, - 5FDF914625818280009BE5A3 /* BNCPartnerParameters.m in Sources */, - 5F38020F24DCC2E800E6FAFD /* BNCServerRequest.m in Sources */, - 5FC7326922D81002006E6FBC /* BNCAppleReceipt.m in Sources */, - 7D58823A1CA1DF2700FF6358 /* BNCDeviceInfo.m in Sources */, - 5FE276B02432705B00EA1BD2 /* BNCInitSessionResponse.m in Sources */, - 5F38021524DCC2E800E6FAFD /* BranchShortUrlSyncRequest.m in Sources */, - 5F38023224DCC2E800E6FAFD /* BNCServerRequestQueue.m in Sources */, - 7B18DF4A1F1F00E200C25C84 /* BNCCrashlyticsWrapper.m in Sources */, - 5F92B23223834AFD00CA909B /* BNCReachability.m in Sources */, - 5F38021324DCC2E800E6FAFD /* BranchInstallRequest.m in Sources */, - 466D5A121B5991E3009DB845 /* BNCContentDiscoveryManager.m in Sources */, - 466B58551B17779C00A69EDE /* Branch.m in Sources */, - 5F437E3E237E03C00052064B /* BNCDeviceSystem.m in Sources */, - 5F38023B24DCC2E800E6FAFD /* BranchContentDiscoverer.m in Sources */, - 5F4101F626851DC7003699AD /* BNCPasteboard.m in Sources */, - 4DBC88651F3A55B700E119BF /* NSString+Branch.m in Sources */, - 54FF1F8E1BD1D4AE0004CE2E /* BranchUniversalObject.m in Sources */, - 4DA577181E67B1D600A43BDD /* BNCLog.m in Sources */, - 5F38021D24DCC2E800E6FAFD /* BranchLATDRequest.m in Sources */, - 5F3D6714232C589100454FF1 /* BranchLastAttributedTouchData.m in Sources */, - 3A78D576251EB5BF002A25CF /* BranchJsonConfig.m in Sources */, - 5FDB04EE24E4D23300F2F267 /* BNCSKAdNetwork.m in Sources */, - 4DB328001FA10B9000ACF9B0 /* BranchDelegate.m in Sources */, - 5F38022F24DCC2E800E6FAFD /* BranchSpotlightUrlRequest.m in Sources */, - E729974E28E2BBFA007D91B2 /* BranchPasteControl.m in Sources */, - 466B58591B17779C00A69EDE /* BNCPreferenceHelper.m in Sources */, - 5F38021724DCC2E800E6FAFD /* BranchOpenRequest.m in Sources */, - 4D59B5222006979C00F89FD5 /* BNCKeyChain.m in Sources */, - F1D359211ED4DCC500A93FD5 /* BNCDeepLinkViewControllerInstance.m in Sources */, - 5FF7D2842A9549970049158D /* BNCRequestFactory.m in Sources */, - 466B585F1B17779C00A69EDE /* BNCSystemObserver.m in Sources */, - 4DB567341E79F46000A8A324 /* BranchShareLink.m in Sources */, - C10C61AE28248E5A00761D7E /* BNCQRCodeCache.m in Sources */, - 5FB38C812521234F00E9A85A /* BNCAppGroupsData.m in Sources */, - 5F38023624DCC2E800E6FAFD /* BNCServerInterface.m in Sources */, - 5F38022B24DCC2E800E6FAFD /* BNCServerResponse.m in Sources */, - C1614D5D285BD4AF0098946B /* BranchPluginSupport.m in Sources */, - 4D3FA94B1DFF31EB00E2B6A9 /* BNCConfig.m in Sources */, - F185BAAB1F3D30D70056300C /* BNCSpotlightService.m in Sources */, - 4665AF261B28B9BB00184037 /* BranchConstants.m in Sources */, - 5F38023A24DCC2E800E6FAFD /* BranchShortUrlRequest.m in Sources */, - 5F38021B24DCC2E800E6FAFD /* BranchContentPathProperties.m in Sources */, - 5F32D7C4242AC339000DE539 /* BranchScene.m in Sources */, - C17394642A8C228D006068F2 /* BNCCurrency.m in Sources */, - 4DCF4AFB1F4388F600AF9AAB /* BranchEvent.m in Sources */, - C17394602A8AEE0E006068F2 /* BNCProductCategory.m in Sources */, - 5FB0AA6C231875B500A0F9EA /* BNCUserAgentCollector.m in Sources */, - 4D9607F51FBF9473008AB3C2 /* UIViewController+Branch.m in Sources */, - C1CC888929C27E8000BDD2B5 /* BNCUrlQueryParameter.m in Sources */, - E7CBC39A2AA9403200B2D0D9 /* BNCServerAPI.m in Sources */, - 4D35141C1E3201D80085EBA1 /* NSMutableDictionary+Branch.m in Sources */, - 4D955CCD2035021400FB8008 /* BNCURLFilter.m in Sources */, - 466B58681B17779C00A69EDE /* BNCLinkData.m in Sources */, - 54FF1F921BD1DC320004CE2E /* BranchLinkProperties.m in Sources */, - 466B586A1B17779C00A69EDE /* BNCLinkCache.m in Sources */, - 4D7881F7209CF28F002B750F /* BNCThreads.m in Sources */, - 5F892EBE2361157E0023AEC1 /* NSError+Branch.m in Sources */, - 9A2B7DD61FEC3BAF00CD188B /* Branch+Validator.m in Sources */, - 5FE693F82405E91500E3AEE2 /* BNCCallbackMap.m in Sources */, - 5F92B240238486E200CA909B /* BNCNetworkInterface.m in Sources */, - 466B586C1B17779C00A69EDE /* BranchActivityItemProvider.m in Sources */, - 466B586E1B17779C00A69EDE /* BNCEncodingUtils.m in Sources */, - 5F38022824DCC2E800E6FAFD /* BNCNetworkService.m in Sources */, - 5F38022A24DCC2E800E6FAFD /* BranchContentDiscoveryManifest.m in Sources */, - 54391A161BA249FA0061CB0F /* BranchCSSearchableItemAttributeSet.m in Sources */, - 5F73FC7F23313F7A000EBD32 /* BNCJSONUtility.m in Sources */, - 4D59B5202006979C00F89FD5 /* BNCApplication.m in Sources */, + 5F644C482B7AA811000DCD78 /* BNCCallbackMap.m in Sources */, + 5F644BBE2B7AA811000DCD78 /* BNCApplication.m in Sources */, + 5F644C302B7AA811000DCD78 /* BranchDelegate.m in Sources */, + 5F5FDA102B7DE20800F14A43 /* BranchLogger.m in Sources */, + 5F644C3D2B7AA811000DCD78 /* BNCSpotlightService.m in Sources */, + 5F644BC02B7AA811000DCD78 /* NSMutableDictionary+Branch.m in Sources */, + 5F644BBC2B7AA811000DCD78 /* BranchUniversalObject.m in Sources */, + 5F644BE42B7AA811000DCD78 /* BNCKeyChain.m in Sources */, + 5F644BDE2B7AA811000DCD78 /* BranchJsonConfig.m in Sources */, + 5F644BE02B7AA811000DCD78 /* BNCPartnerParameters.m in Sources */, + 5F644BDF2B7AA811000DCD78 /* BranchLATDRequest.m in Sources */, + 5F644C382B7AA811000DCD78 /* BNCPasteboard.m in Sources */, + 5F644BE22B7AA811000DCD78 /* BranchActivityItemProvider.m in Sources */, + 5F644BE12B7AA811000DCD78 /* BranchCSSearchableItemAttributeSet.m in Sources */, + 5F644BD92B7AA811000DCD78 /* BNCRequestFactory.m in Sources */, + 5F644BC32B7AA811000DCD78 /* BNCDeepLinkViewControllerInstance.m in Sources */, + 5F644C3C2B7AA811000DCD78 /* BNCLinkCache.m in Sources */, + 5F644C332B7AA811000DCD78 /* BNCJSONUtility.m in Sources */, + 5F644BDB2B7AA811000DCD78 /* BNCProductCategory.m in Sources */, + 5F644C322B7AA811000DCD78 /* Branch.m in Sources */, + 5F644BC72B7AA811000DCD78 /* BranchInstallRequest.m in Sources */, + 5F644BC62B7AA811000DCD78 /* Branch+Validator.m in Sources */, + 5F644BBA2B7AA811000DCD78 /* BNCUserAgentCollector.m in Sources */, + 5F644C362B7AA811000DCD78 /* BNCSKAdNetwork.m in Sources */, + 5F644BD02B7AA811000DCD78 /* BNCConfig.m in Sources */, + 5F644BD52B7AA811000DCD78 /* BranchContentDiscoverer.m in Sources */, + 5F644BBF2B7AA811000DCD78 /* BNCDeviceSystem.m in Sources */, + 5F644BB92B7AA811000DCD78 /* NSError+Branch.m in Sources */, + 5F644C412B7AA811000DCD78 /* BNCAppGroupsData.m in Sources */, + 5F644BBD2B7AA811000DCD78 /* BranchPasteControl.m in Sources */, + 5F644C492B7AA811000DCD78 /* BNCEventUtils.m in Sources */, + 5F644BD32B7AA811000DCD78 /* BranchSpotlightUrlRequest.m in Sources */, + 5F644BE32B7AA811000DCD78 /* BranchQRCode.m in Sources */, + 5F644BCA2B7AA811000DCD78 /* BNCSystemObserver.m in Sources */, + 5F644BC82B7AA811000DCD78 /* BranchPluginSupport.m in Sources */, + 5F644C462B7AA811000DCD78 /* BNCQRCodeCache.m in Sources */, + 5F644BD82B7AA811000DCD78 /* BNCReachability.m in Sources */, + 5F644BC92B7AA811000DCD78 /* NSString+Branch.m in Sources */, + 5F644C442B7AA811000DCD78 /* BranchShortUrlRequest.m in Sources */, + 5F644BDD2B7AA811000DCD78 /* BNCServerInterface.m in Sources */, + 5F644BC42B7AA811000DCD78 /* BranchScene.m in Sources */, + 5F644BBB2B7AA811000DCD78 /* BNCEncodingUtils.m in Sources */, + 5F644BD62B7AA811000DCD78 /* BNCDeviceInfo.m in Sources */, + 5F644BC22B7AA811000DCD78 /* BNCUrlQueryParameter.m in Sources */, + 5F644C3E2B7AA811000DCD78 /* BNCServerAPI.m in Sources */, + 5F644BD12B7AA811000DCD78 /* BranchConstants.m in Sources */, + 5F644C342B7AA811000DCD78 /* BNCCurrency.m in Sources */, + 5F644C472B7AA811000DCD78 /* BranchShortUrlSyncRequest.m in Sources */, + 5F644BC52B7AA811000DCD78 /* BNCContentDiscoveryManager.m in Sources */, + 5F644BCC2B7AA811000DCD78 /* BNCURLFilter.m in Sources */, + 5F644C352B7AA811000DCD78 /* BranchLastAttributedTouchData.m in Sources */, + 5F644BCE2B7AA811000DCD78 /* BNCNetworkInterface.m in Sources */, + 5F644BD72B7AA811000DCD78 /* BNCNetworkService.m in Sources */, + 5F644C402B7AA811000DCD78 /* UIViewController+Branch.m in Sources */, + 5F644BC12B7AA811000DCD78 /* BNCServerRequestQueue.m in Sources */, + 5F644C452B7AA811000DCD78 /* BranchOpenRequest.m in Sources */, + 5F644C312B7AA811000DCD78 /* BNCLinkData.m in Sources */, + 5F644BD22B7AA811000DCD78 /* BranchContentDiscoveryManifest.m in Sources */, + 5F644BDC2B7AA811000DCD78 /* BNCCrashlyticsWrapper.m in Sources */, + 5F644C3F2B7AA811000DCD78 /* BranchShareLink.m in Sources */, + 5F644BCD2B7AA811000DCD78 /* BNCServerRequest.m in Sources */, + 5F644C3A2B7AA811000DCD78 /* BranchLinkProperties.m in Sources */, + 5F644C432B7AA811000DCD78 /* BranchEvent.m in Sources */, + 5F644C392B7AA811000DCD78 /* BNCAppleReceipt.m in Sources */, + 5F644BDA2B7AA811000DCD78 /* BNCReferringURLUtility.m in Sources */, + 5F644C422B7AA811000DCD78 /* BNCServerResponse.m in Sources */, + 5F644C3B2B7AA811000DCD78 /* BNCInitSessionResponse.m in Sources */, + 5F644BCF2B7AA811000DCD78 /* BNCPreferenceHelper.m in Sources */, + 5F644C372B7AA811000DCD78 /* BranchContentPathProperties.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1419,7 +1348,6 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - C10B7A07285BD7F100D26273 /* BranchPluginSupport.m in Sources */, 63E4C4881D25E16A00A45FD8 /* LogOutputViewController.m in Sources */, 6700167A1940F51400A9E103 /* ViewController.m in Sources */, 4DBEFFF61FB114F900F7C41B /* ArrayPickerView.m in Sources */, @@ -1434,53 +1362,45 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 5F22AFC0240600A200837CF5 /* BNCCallbackMap.m in Sources */, - 4D1683B72098C902008819E3 /* BNCTestCase.m in Sources */, - 4D1683B82098C902008819E3 /* BNCEncodingUtils.Test.m in Sources */, + 4D1683B82098C902008819E3 /* BNCEncodingUtilsTests.m in Sources */, 5F909B5E23314CE900A774D2 /* BNCJSONUtilityTests.m in Sources */, 5F909B722332BEF600A774D2 /* BranchLastAttributedTouchDataTests.m in Sources */, - 4D7881FE209CF2D4002B750F /* BNCTestCase.Test.m in Sources */, 5FC20E732A93D85F00D9E1C8 /* BNCRequestFactoryTests.m in Sources */, - 4D1683B02098C902008819E3 /* BranchSDKFunctionalityTests.m in Sources */, 5FA9112F29BC662000F3D35C /* BNCNetworkInterfaceTests.m in Sources */, 5FD1786E26DEE49D009696E3 /* BNCPasteboardTests.m in Sources */, + 5F86501A2B76DA3200364BDE /* NSMutableDictionaryBranchTests.m in Sources */, + 5FCDD36A2B7AC1D500EAF29F /* BranchPluginSupportTests.m in Sources */, 5F92B242238752A500CA909B /* BNCDeviceInfoTests.m in Sources */, 4D1683C62098C902008819E3 /* BranchEvent.Test.m in Sources */, C15CC9DE2ABCB549003CC339 /* BNCCurrencyTests.m in Sources */, - C10F393A27A0872800BF5D36 /* BranchPluginSupportTests.m in Sources */, - 5F83B9ED2433BAAA0054A022 /* BNCServerInterface.Test.m in Sources */, 5F205D0823186AF700C776D1 /* BNCUserAgentCollectorTests.m in Sources */, 5FCF7EAD29DC96A7008D629E /* BNCURLFilterSkiplistUpgradeTests.m in Sources */, + 5F6D86D92BB5E9650068B536 /* BNCClassSerializationTests.m in Sources */, E7A728BD2AA9A112009343B7 /* BNCAPIServerTest.m in Sources */, - 4D1683C12098C902008819E3 /* BNCApplication.Test.m in Sources */, + 4D1683C12098C902008819E3 /* BNCApplicationTests.m in Sources */, 4D1683B92098C902008819E3 /* BNCSystemObserverTests.m in Sources */, 4D1683CA2098C902008819E3 /* BNCPreferenceHelperTests.m in Sources */, 4AB16368239E3A2700D42931 /* DispatchToIsolationQueueTests.m in Sources */, + 5F5FDA142B7DE27D00F14A43 /* BranchLoggerTests.m in Sources */, 5F8BB66E278771890055D2DC /* BNCKeyChainTests.m in Sources */, C1CC888229BAAFC000BDD2B5 /* BNCReferringURLUtilityTests.m in Sources */, 5FE694382405FA2700E3AEE2 /* BNCCallbackMapTests.m in Sources */, 5FDB04F424E6156800F2F267 /* BNCSKAdNetworkTests.m in Sources */, 5FB6CC13264F0C7C0020E478 /* BNCServerRequestQueueTests.m in Sources */, - 4D1683BA2098C902008819E3 /* BNCLog.Test.m in Sources */, 4D1683AE2098C902008819E3 /* BNCLinkDataTests.m in Sources */, - 4D1683BD2098C902008819E3 /* BranchNetworkScenario.Test.m in Sources */, - 4D7881FF209CF2D4002B750F /* BNCApplication+BNCTest.m in Sources */, + C15CC9E02ABCF8C8003CC339 /* BranchActivityItemTests.m in Sources */, 5F92B23423835FEB00CA909B /* BNCReachabilityTests.m in Sources */, + C17DAF7B2AC20C2000B16B1A /* BranchClassTests.m in Sources */, C12320B52808DB90007771C0 /* BranchQRCodeTests.m in Sources */, 5F3D671B233062FD00454FF1 /* BNCJsonLoader.m in Sources */, - 4D1683C02098C902008819E3 /* BranchUniversalObject.Test.m in Sources */, + 4D1683C02098C902008819E3 /* BranchUniversalObjectTests.m in Sources */, 5FC7327022DD1F93006E6FBC /* BNCAppleReceiptTests.m in Sources */, - 4D1683C82098C902008819E3 /* NSString+Branch.Test.m in Sources */, - 5F892EC5236116CD0023AEC1 /* NSErrorBranchCategoryTests.m in Sources */, - 4D1683AA2098C902008819E3 /* BranchOpenRequestTests.m in Sources */, - 4D1683A82098C902008819E3 /* BNCServerRequestQueueOldTests.m in Sources */, - 4D1683A62098C902008819E3 /* BranchSetIdentityTests.m in Sources */, - 4D1683BC2098C902008819E3 /* BranchDelegate.Test.m in Sources */, + 4D1683C82098C902008819E3 /* NSStringBranchTests.m in Sources */, + 5F892EC5236116CD0023AEC1 /* NSErrorBranchTests.m in Sources */, 4D1683B62098C902008819E3 /* BNCURLFilterTests.m in Sources */, C10C61AA282481FB00761D7E /* BranchShareLinkTests.m in Sources */, 5F437E40237E1A560052064B /* BNCDeviceSystemTests.m in Sources */, - 4D1683AC2098C902008819E3 /* BranchInstallRequestTests.m in Sources */, - 4D1683C72098C902008819E3 /* BNCCrashlyticsWrapper.Test.m in Sources */, + 4D1683C72098C902008819E3 /* BNCCrashlyticsWrapperTests.m in Sources */, 5FDF91592581CDF4009BE5A3 /* BNCPartnerParametersTests.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -1764,7 +1684,6 @@ PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = ""; PROVISIONING_PROFILE_SPECIFIER = ""; - USER_HEADER_SEARCH_PATHS = $PROJECT_DIR; WRAPPER_EXTENSION = app; }; name = Debug; @@ -1787,20 +1706,17 @@ PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = ""; PROVISIONING_PROFILE_SPECIFIER = ""; - USER_HEADER_SEARCH_PATHS = $PROJECT_DIR; WRAPPER_EXTENSION = app; }; name = Release; }; 7E6B3B581AA42D0E005F45BF /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 130D24DFC422D39DC8CB96CC /* Pods-Branch-SDK-Tests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_WARN_UNREACHABLE_CODE = YES; DEVELOPMENT_TEAM = R63EM248DP; ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = "$(inherited)"; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", @@ -1820,13 +1736,11 @@ }; 7E6B3B591AA42D0E005F45BF /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 713E79E4D7BF588897570949 /* Pods-Branch-SDK-Tests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_WARN_UNREACHABLE_CODE = YES; DEVELOPMENT_TEAM = R63EM248DP; ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = "$(inherited)"; INFOPLIST_FILE = "Branch-SDK-Tests/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; @@ -1848,7 +1762,6 @@ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = R63EM248DP; - HEADER_SEARCH_PATHS = "\"${PODS_ROOT}/Headers/Public\""; INFOPLIST_FILE = "Branch-TestBed-UITests/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; @@ -1869,7 +1782,6 @@ COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = R63EM248DP; - HEADER_SEARCH_PATHS = "\"${PODS_ROOT}/Headers/Public\""; INFOPLIST_FILE = "Branch-TestBed-UITests/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; diff --git a/Branch-TestBed/Branch-TestBed.xcodeproj/xcshareddata/xcschemes/Branch-SDK-Tests.xcscheme b/Branch-TestBed/Branch-TestBed.xcodeproj/xcshareddata/xcschemes/Branch-SDK-Tests.xcscheme index 74263b91d..1f130cd47 100644 --- a/Branch-TestBed/Branch-TestBed.xcodeproj/xcshareddata/xcschemes/Branch-SDK-Tests.xcscheme +++ b/Branch-TestBed/Branch-TestBed.xcodeproj/xcshareddata/xcschemes/Branch-SDK-Tests.xcscheme @@ -123,15 +123,6 @@ savedToolIdentifier = "" useCustomWorkingDirectory = "NO" debugDocumentVersioning = "YES"> - - - - diff --git a/Branch-TestBed/Branch-TestBed.xcodeproj/xcshareddata/xcschemes/Branch-TestBed-CI.xcscheme b/Branch-TestBed/Branch-TestBed.xcodeproj/xcshareddata/xcschemes/Branch-TestBed-CI.xcscheme index b159d1b87..7fab3a2a5 100644 --- a/Branch-TestBed/Branch-TestBed.xcodeproj/xcshareddata/xcschemes/Branch-TestBed-CI.xcscheme +++ b/Branch-TestBed/Branch-TestBed.xcodeproj/xcshareddata/xcschemes/Branch-TestBed-CI.xcscheme @@ -114,8 +114,6 @@ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" enableThreadSanitizer = "YES" - language = "ru" - region = "RU" launchStyle = "0" useCustomWorkingDirectory = "NO" ignoresPersistentStateOnLaunch = "NO" diff --git a/Branch-TestBed/Branch-TestBed.xcodeproj/xcshareddata/xcschemes/Branch-TestBed.xcscheme b/Branch-TestBed/Branch-TestBed.xcodeproj/xcshareddata/xcschemes/Branch-TestBed.xcscheme index 329bd6f00..c5d59f939 100644 --- a/Branch-TestBed/Branch-TestBed.xcodeproj/xcshareddata/xcschemes/Branch-TestBed.xcscheme +++ b/Branch-TestBed/Branch-TestBed.xcodeproj/xcshareddata/xcschemes/Branch-TestBed.xcscheme @@ -114,8 +114,6 @@ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" enableThreadSanitizer = "YES" - language = "ru" - region = "RU" launchStyle = "0" useCustomWorkingDirectory = "NO" ignoresPersistentStateOnLaunch = "NO" @@ -145,7 +143,7 @@ referenceType = "1"> + identifier = "../../Branch-TestBed/TestStoreKitConfig.storekit"> - - - - - - diff --git a/Branch-TestBed/Branch-TestBed.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Branch-TestBed/Branch-TestBed.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d981003..000000000 --- a/Branch-TestBed/Branch-TestBed.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/Branch-TestBed/Branch-TestBed/AppDelegate.m b/Branch-TestBed/Branch-TestBed/AppDelegate.m index 09925169f..a8c160cea 100644 --- a/Branch-TestBed/Branch-TestBed/AppDelegate.m +++ b/Branch-TestBed/Branch-TestBed/AppDelegate.m @@ -12,10 +12,9 @@ #import "ViewController.h" #import "Branch.h" #import "BNCEncodingUtils.h" -#import "BNCLog.h" AppDelegate* appDelegate = nil; -void APPLogHookFunction(NSDate*_Nonnull timestamp, BNCLogLevel level, NSString*_Nullable message); +void APPLogHookFunction(NSDate*_Nonnull timestamp, BranchLogLevel level, NSString*_Nullable message); @implementation AppDelegate @@ -23,8 +22,6 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { appDelegate = self; - BNCLogSetOutputFunction(APPLogHookFunction); - BNCLogSetDisplayLevel(BNCLogLevelAll); /* Set Branch.useTestBranchKey = YES; to have Branch use the test key that's in the app's @@ -34,14 +31,20 @@ - (BOOL)application:(UIApplication *)application // Branch.useTestBranchKey = YES; // Make sure to comment this line out for production apps!!! Branch *branch = [Branch getInstance]; - + + // Change the Branch base API URL + //[Branch setAPIUrl:@"https://api3.branch.io"]; + // test pre init support //[self testDispatchToIsolationQueue:branch] - - // Comment out (for match guarantee testing) / or un-comment to toggle debugging: - // Note: Unit tests will fail if 'setDebug' is set. - // [branch setDebug]; - [branch enableLogging]; + [branch enableLoggingAtLevel:BranchLogLevelVerbose withCallback:^(NSString * _Nonnull message, BranchLogLevel logLevel, NSError * _Nullable error) { + // Handle the log message and error here. For example, printing to the console: + if (error) { + NSLog(@"[BranchLog] Level: %lu, Message: %@, Error: %@", (unsigned long)logLevel, message, error.localizedDescription); + } else { + NSLog(@"[BranchLog] Level: %lu, Message: %@", (unsigned long)logLevel, message); + } + }]; // Comment out in production. Un-comment to test your Branch SDK Integration: //[branch validateSDKIntegration]; @@ -209,7 +212,7 @@ -(void)application:(UIApplication *)application */ // hook Function for SDK - Its for taking control of Logging messages. -void APPLogHookFunction(NSDate*_Nonnull timestamp, BNCLogLevel level, NSString*_Nullable message) { +void APPLogHookFunction(NSDate*_Nonnull timestamp, BranchLogLevel level, NSString*_Nullable message) { [appDelegate processLogMessage:message]; } diff --git a/Branch-TestBed/Branch-TestBed/Branch-TestBed-Info.plist b/Branch-TestBed/Branch-TestBed/Branch-TestBed-Info.plist index e4be1bcd3..e7f466f5c 100644 --- a/Branch-TestBed/Branch-TestBed/Branch-TestBed-Info.plist +++ b/Branch-TestBed/Branch-TestBed/Branch-TestBed-Info.plist @@ -4,8 +4,6 @@ AppIdentifierPrefix $(AppIdentifierPrefix) - BranchLogLevel - BNCLogLevelAll CFBundleDevelopmentRegion en CFBundleDisplayName @@ -54,7 +52,7 @@ branch_key live - key_live_feebgAAhbH9Tv85H5wLQhpdaefiZv5Dv + key_live_hcnegAumkH7Kv18M8AOHhfgiohpXq5tB test key_test_hdcBLUy1xZ1JD0tKg7qrLcgirFmPPVJc diff --git a/Branch-TestBed/Branch-TestBed/TestStoreKitConfig.storekit b/Branch-TestBed/Branch-TestBed/TestStoreKitConfig.storekit index 2691c66c4..f7a44629a 100644 --- a/Branch-TestBed/Branch-TestBed/TestStoreKitConfig.storekit +++ b/Branch-TestBed/Branch-TestBed/TestStoreKitConfig.storekit @@ -21,7 +21,56 @@ } ], "settings" : { - + "_failTransactionsEnabled" : false, + "_locale" : "en_US", + "_storefront" : "USA", + "_storeKitErrors" : [ + { + "current" : null, + "enabled" : false, + "name" : "Load Products" + }, + { + "current" : null, + "enabled" : false, + "name" : "Purchase" + }, + { + "current" : null, + "enabled" : false, + "name" : "Verification" + }, + { + "current" : null, + "enabled" : false, + "name" : "App Store Sync" + }, + { + "current" : null, + "enabled" : false, + "name" : "Subscription Status" + }, + { + "current" : null, + "enabled" : false, + "name" : "App Transaction" + }, + { + "current" : null, + "enabled" : false, + "name" : "Manage Subscriptions Sheet" + }, + { + "current" : null, + "enabled" : false, + "name" : "Refund Request Sheet" + }, + { + "current" : null, + "enabled" : false, + "name" : "Offer Code Redeem Sheet" + } + ] }, "subscriptionGroups" : [ { @@ -60,7 +109,7 @@ } ], "version" : { - "major" : 2, + "major" : 3, "minor" : 0 } } diff --git a/Branch-TestBed/Podfile b/Branch-TestBed/Podfile deleted file mode 100644 index b618d26bc..000000000 --- a/Branch-TestBed/Podfile +++ /dev/null @@ -1,8 +0,0 @@ -source 'https://github.com/CocoaPods/Specs.git' -platform :ios, '8.0' - -target 'Branch-SDK-Tests' do - project 'Branch-TestBed' - pod 'OCMock', :inhibit_warnings => true - pod 'OHHTTPStubs' -end diff --git a/Branch-TestBed/Podfile.lock b/Branch-TestBed/Podfile.lock deleted file mode 100644 index 19f88d201..000000000 --- a/Branch-TestBed/Podfile.lock +++ /dev/null @@ -1,32 +0,0 @@ -PODS: - - OCMock (3.7.1) - - OHHTTPStubs (9.1.0): - - OHHTTPStubs/Default (= 9.1.0) - - OHHTTPStubs/Core (9.1.0) - - OHHTTPStubs/Default (9.1.0): - - OHHTTPStubs/Core - - OHHTTPStubs/JSON - - OHHTTPStubs/NSURLSession - - OHHTTPStubs/OHPathHelpers - - OHHTTPStubs/JSON (9.1.0): - - OHHTTPStubs/Core - - OHHTTPStubs/NSURLSession (9.1.0): - - OHHTTPStubs/Core - - OHHTTPStubs/OHPathHelpers (9.1.0) - -DEPENDENCIES: - - OCMock - - OHHTTPStubs - -SPEC REPOS: - https://github.com/CocoaPods/Specs.git: - - OCMock - - OHHTTPStubs - -SPEC CHECKSUMS: - OCMock: 75fbeaa46a9b11f8c182bbb1d1f7e9a35ccc9955 - OHHTTPStubs: 90eac6d8f2c18317baeca36698523dc67c513831 - -PODFILE CHECKSUM: 829cf437db3e2065c6c17ddea2f24b51cb0aecc0 - -COCOAPODS: 1.12.1 diff --git a/BranchSDK.podspec b/BranchSDK.podspec index 555f13065..7a8018064 100644 --- a/BranchSDK.podspec +++ b/BranchSDK.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = "BranchSDK" - s.version = "3.0.0" + s.version = "3.4.3" s.summary = "Create an HTTP URL for any piece of content in your app" s.description = <<-DESC - Want the highest possible conversions on your sharing feature? @@ -18,19 +18,17 @@ Use the Branch SDK (branch.io) to create and power the links that point back to s.ios.deployment_target = '12.0' s.tvos.deployment_target = '12.0' - s.resources = ["BranchSDK/*.{xcprivacy}"] - s.ios.source_files = "BranchSDK/*.{h,m}" + s.resource_bundles = { 'BranchSDK' => 'Sources/Resources/*.xcprivacy' } + s.ios.source_files = "Sources/BranchSDK/**/*.{h,m}" - s.tvos.source_files = "BranchSDK/*.{h,m}" - s.tvos.exclude_files = "BranchSDK/BNCAdClient.{h,m}", - "BranchSDK/BNCAppleSearchAds.{h,m}", - "BranchSDK/BNCContentDiscoveryManager.{h,m}", - "BranchSDK/BNCUserAgentCollector.{h,m}", - "BranchSDK/BNCSpotlightService.{h,m}", - "BranchSDK/BranchActivityItemProvider.{h,m}", - "BranchSDK/BranchCSSearchableItemAttributeSet.{h,m}", - "BranchSDK/BranchShareLink.{h,m}", - "BranchSDK/BranchPasteControl.{h,m}" + s.tvos.source_files = "Sources/BranchSDK/**/*.{h,m}" + s.tvos.exclude_files = "Sources/BranchSDK/**/BNCContentDiscoveryManager.{h,m}", + "Sources/BranchSDK/**/BNCUserAgentCollector.{h,m}", + "Sources/BranchSDK/**/BNCSpotlightService.{h,m}", + "Sources/BranchSDK/**/BranchActivityItemProvider.{h,m}", + "Sources/BranchSDK/**/BranchCSSearchableItemAttributeSet.{h,m}", + "Sources/BranchSDK/**/BranchShareLink.{h,m}", + "Sources/BranchSDK/**/BranchPasteControl.{h,m}" s.frameworks = 'CoreServices', 'SystemConfiguration' s.weak_framework = 'LinkPresentation' diff --git a/BranchSDK.xcodeproj/project.pbxproj b/BranchSDK.xcodeproj/project.pbxproj index 6c2392513..5991a7013 100644 --- a/BranchSDK.xcodeproj/project.pbxproj +++ b/BranchSDK.xcodeproj/project.pbxproj @@ -54,138 +54,6 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 5F1B240929148CBD003BEEC7 /* BranchPasteControl.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F1B240729148CBD003BEEC7 /* BranchPasteControl.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F1B240A29148CBD003BEEC7 /* BranchPasteControl.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F1B240729148CBD003BEEC7 /* BranchPasteControl.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F1B240B29148CBD003BEEC7 /* BranchPasteControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F1B240829148CBD003BEEC7 /* BranchPasteControl.m */; }; - 5F1B240C29148CBD003BEEC7 /* BranchPasteControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F1B240829148CBD003BEEC7 /* BranchPasteControl.m */; }; - 5F2210C52894A34000C5B190 /* BranchShortUrlSyncRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210272894A33E00C5B190 /* BranchShortUrlSyncRequest.h */; }; - 5F2210C62894A34000C5B190 /* BNCDeviceSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210282894A33E00C5B190 /* BNCDeviceSystem.h */; }; - 5F2210C72894A34000C5B190 /* BNCURLFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210292894A33E00C5B190 /* BNCURLFilter.m */; }; - 5F2210C82894A34000C5B190 /* NSString+Branch.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22102A2894A33E00C5B190 /* NSString+Branch.m */; }; - 5F2210C92894A34000C5B190 /* BNCReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22102B2894A33E00C5B190 /* BNCReachability.h */; }; - 5F2210CA2894A34000C5B190 /* BranchInstallRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22102C2894A33E00C5B190 /* BranchInstallRequest.m */; }; - 5F2210CD2894A34000C5B190 /* BNCDeviceInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22102F2894A33E00C5B190 /* BNCDeviceInfo.h */; }; - 5F2210CF2894A34000C5B190 /* BranchJsonConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210312894A33E00C5B190 /* BranchJsonConfig.m */; }; - 5F2210D02894A34000C5B190 /* BNCSKAdNetwork.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210322894A33E00C5B190 /* BNCSKAdNetwork.h */; }; - 5F2210D12894A34000C5B190 /* BranchShortUrlSyncRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210332894A33E00C5B190 /* BranchShortUrlSyncRequest.m */; }; - 5F2210D22894A34000C5B190 /* BranchOpenRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210342894A33E00C5B190 /* BranchOpenRequest.m */; }; - 5F2210D32894A34000C5B190 /* NSMutableDictionary+Branch.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210352894A33E00C5B190 /* NSMutableDictionary+Branch.m */; }; - 5F2210D42894A34000C5B190 /* BranchConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210362894A33E00C5B190 /* BranchConstants.m */; }; - 5F2210D52894A34000C5B190 /* BNCDeepLinkViewControllerInstance.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210372894A33E00C5B190 /* BNCDeepLinkViewControllerInstance.m */; }; - 5F2210D62894A34000C5B190 /* BranchLATDRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210382894A33E00C5B190 /* BranchLATDRequest.h */; }; - 5F2210D72894A34000C5B190 /* BNCJSONUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210392894A33E00C5B190 /* BNCJSONUtility.h */; }; - 5F2210D82894A34000C5B190 /* BranchCSSearchableItemAttributeSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22103A2894A33E00C5B190 /* BranchCSSearchableItemAttributeSet.m */; }; - 5F2210D92894A34000C5B190 /* BNCAppleReceipt.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22103B2894A33E00C5B190 /* BNCAppleReceipt.h */; }; - 5F2210DA2894A34000C5B190 /* BNCReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22103C2894A33E00C5B190 /* BNCReachability.m */; }; - 5F2210DB2894A34000C5B190 /* BNCSystemObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22103D2894A33E00C5B190 /* BNCSystemObserver.h */; }; - 5F2210DC2894A34000C5B190 /* BNCSpotlightService.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22103E2894A33E00C5B190 /* BNCSpotlightService.m */; }; - 5F2210DD2894A34000C5B190 /* BranchSpotlightUrlRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22103F2894A33E00C5B190 /* BranchSpotlightUrlRequest.m */; }; - 5F2210DE2894A34000C5B190 /* BNCPreferenceHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210402894A33E00C5B190 /* BNCPreferenceHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F2210DF2894A34000C5B190 /* UIViewController+Branch.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210412894A33E00C5B190 /* UIViewController+Branch.m */; }; - 5F2210E02894A34000C5B190 /* BranchLATDRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210422894A33E00C5B190 /* BranchLATDRequest.m */; }; - 5F2210E12894A34000C5B190 /* BranchEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210432894A33E00C5B190 /* BranchEvent.m */; }; - 5F2210E22894A34000C5B190 /* BranchCSSearchableItemAttributeSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210442894A33E00C5B190 /* BranchCSSearchableItemAttributeSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F2210E42894A34000C5B190 /* BNCDeviceSystem.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210462894A33E00C5B190 /* BNCDeviceSystem.m */; }; - 5F2210E62894A34000C5B190 /* BNCServerResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210482894A33E00C5B190 /* BNCServerResponse.m */; }; - 5F2210E72894A34000C5B190 /* BranchInstallRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210492894A33E00C5B190 /* BranchInstallRequest.h */; }; - 5F2210EA2894A34000C5B190 /* BNCThreads.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22104C2894A33F00C5B190 /* BNCThreads.h */; }; - 5F2210EB2894A34000C5B190 /* BNCNetworkService.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22104D2894A33F00C5B190 /* BNCNetworkService.h */; }; - 5F2210EC2894A34000C5B190 /* BNCLinkCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22104E2894A33F00C5B190 /* BNCLinkCache.m */; }; - 5F2210ED2894A34000C5B190 /* BranchLinkProperties.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22104F2894A33F00C5B190 /* BranchLinkProperties.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F2210EF2894A34000C5B190 /* BranchOpenRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210512894A33F00C5B190 /* BranchOpenRequest.h */; }; - 5F2210F12894A34000C5B190 /* BNCLinkData.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210532894A33F00C5B190 /* BNCLinkData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F2210F22894A34000C5B190 /* BranchPluginSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210542894A33F00C5B190 /* BranchPluginSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F2210F32894A34000C5B190 /* BNCLinkCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210552894A33F00C5B190 /* BNCLinkCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F2210F42894A34000C5B190 /* BNCCallbackMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210562894A33F00C5B190 /* BNCCallbackMap.h */; }; - 5F2210F52894A34000C5B190 /* BranchScene.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210572894A33F00C5B190 /* BranchScene.m */; }; - 5F2210F62894A34000C5B190 /* NSString+Branch.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210582894A33F00C5B190 /* NSString+Branch.h */; }; - 5F2210F72894A34000C5B190 /* BNCNetworkServiceProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210592894A33F00C5B190 /* BNCNetworkServiceProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F2210F82894A34000C5B190 /* BranchJsonConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22105A2894A33F00C5B190 /* BranchJsonConfig.h */; }; - 5F2210F92894A34000C5B190 /* BNCConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22105B2894A33F00C5B190 /* BNCConfig.m */; }; - 5F2210FA2894A34000C5B190 /* BranchUniversalObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22105C2894A33F00C5B190 /* BranchUniversalObject.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F2210FB2894A34000C5B190 /* BranchDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22105D2894A33F00C5B190 /* BranchDelegate.m */; }; - 5F2210FC2894A34000C5B190 /* BNCApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22105E2894A33F00C5B190 /* BNCApplication.h */; }; - 5F2210FF2894A34000C5B190 /* BranchScene.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210612894A33F00C5B190 /* BranchScene.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F2211002894A34000C5B190 /* BNCServerRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210622894A33F00C5B190 /* BNCServerRequest.m */; }; - 5F2211012894A34000C5B190 /* BNCFieldDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210632894A33F00C5B190 /* BNCFieldDefines.h */; }; - 5F2211022894A34000C5B190 /* BNCAppleReceipt.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210642894A33F00C5B190 /* BNCAppleReceipt.m */; }; - 5F2211042894A34000C5B190 /* BNCServerResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210662894A33F00C5B190 /* BNCServerResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F2211052894A34000C5B190 /* BranchContentDiscoveryManifest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210672894A33F00C5B190 /* BranchContentDiscoveryManifest.h */; }; - 5F2211072894A34000C5B190 /* BranchDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210692894A33F00C5B190 /* BranchDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F22110A2894A34000C5B190 /* BranchShortUrlRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22106C2894A33F00C5B190 /* BranchShortUrlRequest.h */; }; - 5F22110B2894A34000C5B190 /* BNCServerInterface.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22106D2894A33F00C5B190 /* BNCServerInterface.m */; }; - 5F22110C2894A34000C5B190 /* BNCCrashlyticsWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22106E2894A33F00C5B190 /* BNCCrashlyticsWrapper.h */; }; - 5F22110E2894A34000C5B190 /* BranchContentDiscoverer.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210702894A33F00C5B190 /* BranchContentDiscoverer.h */; }; - 5F22110F2894A34000C5B190 /* BranchContentDiscoverer.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210712894A33F00C5B190 /* BranchContentDiscoverer.m */; }; - 5F2211102894A34000C5B190 /* BNCLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210722894A33F00C5B190 /* BNCLog.m */; }; - 5F2211112894A34000C5B190 /* BNCContentDiscoveryManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210732894A33F00C5B190 /* BNCContentDiscoveryManager.h */; }; - 5F2211122894A34000C5B190 /* BNCInitSessionResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210742894A33F00C5B190 /* BNCInitSessionResponse.m */; }; - 5F2211142894A34000C5B190 /* BranchConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210762894A33F00C5B190 /* BranchConstants.h */; }; - 5F2211152894A34000C5B190 /* BranchPluginSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210772894A33F00C5B190 /* BranchPluginSupport.m */; }; - 5F2211162894A34000C5B190 /* BNCInitSessionResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210782894A33F00C5B190 /* BNCInitSessionResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F2211172894A34000C5B190 /* BranchShortUrlRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210792894A33F00C5B190 /* BranchShortUrlRequest.m */; }; - 5F2211192894A34000C5B190 /* UIViewController+Branch.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22107B2894A33F00C5B190 /* UIViewController+Branch.h */; }; - 5F22111A2894A34000C5B190 /* BNCDeepLinkViewControllerInstance.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22107C2894A33F00C5B190 /* BNCDeepLinkViewControllerInstance.h */; }; - 5F22111B2894A34000C5B190 /* BranchEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22107D2894A33F00C5B190 /* BranchEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F22111C2894A34000C5B190 /* Branch+Validator.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22107E2894A33F00C5B190 /* Branch+Validator.h */; }; - 5F22111D2894A34000C5B190 /* BNCPartnerParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22107F2894A33F00C5B190 /* BNCPartnerParameters.h */; }; - 5F22111E2894A34000C5B190 /* BranchContentPathProperties.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210802894A33F00C5B190 /* BranchContentPathProperties.h */; }; - 5F22111F2894A34000C5B190 /* BNCUserAgentCollector.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210812894A33F00C5B190 /* BNCUserAgentCollector.h */; }; - 5F2211202894A34000C5B190 /* BranchShareLink.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210822894A33F00C5B190 /* BranchShareLink.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F2211212894A34000C5B190 /* BranchLastAttributedTouchData.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210832894A33F00C5B190 /* BranchLastAttributedTouchData.m */; }; - 5F2211222894A34000C5B190 /* BNCSKAdNetwork.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210842894A33F00C5B190 /* BNCSKAdNetwork.m */; }; - 5F2211242894A34000C5B190 /* BNCSystemObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210862894A33F00C5B190 /* BNCSystemObserver.m */; }; - 5F2211262894A34000C5B190 /* BNCAppGroupsData.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210882894A33F00C5B190 /* BNCAppGroupsData.h */; }; - 5F2211272894A34000C5B190 /* BranchContentDiscoveryManifest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210892894A33F00C5B190 /* BranchContentDiscoveryManifest.m */; }; - 5F2211282894A34000C5B190 /* BranchQRCode.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22108A2894A33F00C5B190 /* BranchQRCode.m */; }; - 5F2211292894A34000C5B190 /* BNCQRCodeCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22108B2894A33F00C5B190 /* BNCQRCodeCache.h */; }; - 5F22112A2894A34000C5B190 /* BNCEncodingUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22108C2894A33F00C5B190 /* BNCEncodingUtils.m */; }; - 5F22112B2894A34000C5B190 /* BranchLinkProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22108D2894A33F00C5B190 /* BranchLinkProperties.m */; }; - 5F22112C2894A34000C5B190 /* BNCJSONUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22108E2894A34000C5B190 /* BNCJSONUtility.m */; }; - 5F22112D2894A34000C5B190 /* BNCServerInterface.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22108F2894A34000C5B190 /* BNCServerInterface.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F22112E2894A34000C5B190 /* BranchSpotlightUrlRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210902894A34000C5B190 /* BranchSpotlightUrlRequest.h */; }; - 5F2211302894A34000C5B190 /* Branch.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210922894A34000C5B190 /* Branch.m */; }; - 5F2211312894A34000C5B190 /* BNCKeyChain.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210932894A34000C5B190 /* BNCKeyChain.m */; }; - 5F2211322894A34000C5B190 /* BranchUniversalObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210942894A34000C5B190 /* BranchUniversalObject.m */; }; - 5F2211332894A34000C5B190 /* BNCCallbacks.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210952894A34000C5B190 /* BNCCallbacks.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F2211342894A34000C5B190 /* Branch+Validator.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210962894A34000C5B190 /* Branch+Validator.m */; }; - 5F2211352894A34000C5B190 /* BNCCallbackMap.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210972894A34000C5B190 /* BNCCallbackMap.m */; }; - 5F2211362894A34000C5B190 /* BranchQRCode.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210982894A34000C5B190 /* BranchQRCode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F2211372894A34000C5B190 /* NSMutableDictionary+Branch.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210992894A34000C5B190 /* NSMutableDictionary+Branch.h */; }; - 5F2211382894A34000C5B190 /* BNCCrashlyticsWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22109A2894A34000C5B190 /* BNCCrashlyticsWrapper.m */; }; - 5F2211392894A34000C5B190 /* BNCApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22109B2894A34000C5B190 /* BNCApplication.m */; }; - 5F22113B2894A34000C5B190 /* BNCServerRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22109D2894A34000C5B190 /* BNCServerRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F22113C2894A34000C5B190 /* BranchActivityItemProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22109E2894A34000C5B190 /* BranchActivityItemProvider.m */; }; - 5F22113D2894A34000C5B190 /* BranchContentPathProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22109F2894A34000C5B190 /* BranchContentPathProperties.m */; }; - 5F22113F2894A34000C5B190 /* BNCPreferenceHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210A12894A34000C5B190 /* BNCPreferenceHelper.m */; }; - 5F2211412894A34000C5B190 /* BNCAppGroupsData.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210A32894A34000C5B190 /* BNCAppGroupsData.m */; }; - 5F2211422894A34000C5B190 /* BNCLinkData.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210A42894A34000C5B190 /* BNCLinkData.m */; }; - 5F2211442894A34000C5B190 /* BNCPasteboard.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210A62894A34000C5B190 /* BNCPasteboard.h */; }; - 5F2211452894A34000C5B190 /* BNCURLFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210A72894A34000C5B190 /* BNCURLFilter.h */; }; - 5F2211462894A34000C5B190 /* BNCServerRequestQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210A82894A34000C5B190 /* BNCServerRequestQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F2211472894A34000C5B190 /* BNCConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210A92894A34000C5B190 /* BNCConfig.h */; }; - 5F2211482894A34000C5B190 /* BNCNetworkInterface.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210AA2894A34000C5B190 /* BNCNetworkInterface.h */; }; - 5F2211492894A34000C5B190 /* BranchDeepLinkingController.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210AB2894A34000C5B190 /* BranchDeepLinkingController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F22114B2894A34000C5B190 /* BNCThreads.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210AD2894A34000C5B190 /* BNCThreads.m */; }; - 5F22114C2894A34000C5B190 /* NSError+Branch.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210AE2894A34000C5B190 /* NSError+Branch.m */; }; - 5F22114D2894A34000C5B190 /* BNCServerRequestQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210AF2894A34000C5B190 /* BNCServerRequestQueue.m */; }; - 5F22114E2894A34000C5B190 /* BranchLastAttributedTouchData.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210B02894A34000C5B190 /* BranchLastAttributedTouchData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F22114F2894A34000C5B190 /* BNCLog.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210B12894A34000C5B190 /* BNCLog.h */; }; - 5F2211502894A34000C5B190 /* BNCEncodingUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210B22894A34000C5B190 /* BNCEncodingUtils.h */; }; - 5F2211512894A34000C5B190 /* BNCNetworkService.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210B32894A34000C5B190 /* BNCNetworkService.m */; }; - 5F2211522894A34000C5B190 /* BNCPartnerParameters.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210B42894A34000C5B190 /* BNCPartnerParameters.m */; }; - 5F2211532894A34000C5B190 /* BNCKeyChain.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210B52894A34000C5B190 /* BNCKeyChain.h */; }; - 5F2211542894A34000C5B190 /* BNCContentDiscoveryManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210B62894A34000C5B190 /* BNCContentDiscoveryManager.m */; }; - 5F2211552894A34000C5B190 /* BNCQRCodeCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210B72894A34000C5B190 /* BNCQRCodeCache.m */; }; - 5F2211562894A34000C5B190 /* Branch.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210B82894A34000C5B190 /* Branch.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F2211592894A34000C5B190 /* BNCDeviceInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210BB2894A34000C5B190 /* BNCDeviceInfo.m */; }; - 5F22115A2894A34000C5B190 /* NSError+Branch.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210BC2894A34000C5B190 /* NSError+Branch.h */; }; - 5F22115B2894A34000C5B190 /* BNCNetworkInterface.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210BD2894A34000C5B190 /* BNCNetworkInterface.m */; }; - 5F22115C2894A34000C5B190 /* BNCSpotlightService.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210BE2894A34000C5B190 /* BNCSpotlightService.h */; }; - 5F22115D2894A34000C5B190 /* BranchActivityItemProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210BF2894A34000C5B190 /* BranchActivityItemProvider.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F22115E2894A34000C5B190 /* BNCPasteboard.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210C02894A34000C5B190 /* BNCPasteboard.m */; }; - 5F2211612894A34000C5B190 /* BNCUserAgentCollector.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210C32894A34000C5B190 /* BNCUserAgentCollector.m */; }; - 5F2211622894A34100C5B190 /* BranchShareLink.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210C42894A34000C5B190 /* BranchShareLink.m */; }; 5F2211722894A9C000C5B190 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F2211712894A9C000C5B190 /* AppDelegate.swift */; }; 5F2211742894A9C000C5B190 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F2211732894A9C000C5B190 /* SceneDelegate.swift */; }; 5F2211762894A9C000C5B190 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F2211752894A9C000C5B190 /* ViewController.swift */; }; @@ -195,296 +63,432 @@ 5F2211892894A9C100C5B190 /* TestHostTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F2211882894A9C100C5B190 /* TestHostTests.swift */; }; 5F2211932894A9C100C5B190 /* TestHostUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F2211922894A9C100C5B190 /* TestHostUITests.swift */; }; 5F2211952894A9C100C5B190 /* TestHostUITestsLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F2211942894A9C100C5B190 /* TestHostUITestsLaunchTests.swift */; }; - 5F5139962AC21F6E004A3BA4 /* BNCRequestFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F5139942AC21F6E004A3BA4 /* BNCRequestFactory.h */; }; - 5F5139972AC21F6E004A3BA4 /* BNCRequestFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F5139942AC21F6E004A3BA4 /* BNCRequestFactory.h */; }; - 5F5139982AC21F6E004A3BA4 /* BNCRequestFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F5139942AC21F6E004A3BA4 /* BNCRequestFactory.h */; }; - 5F5139992AC21F6E004A3BA4 /* BNCRequestFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F5139952AC21F6E004A3BA4 /* BNCRequestFactory.m */; }; - 5F51399A2AC21F6E004A3BA4 /* BNCRequestFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F5139952AC21F6E004A3BA4 /* BNCRequestFactory.m */; }; - 5F51399B2AC21F6E004A3BA4 /* BNCRequestFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F5139952AC21F6E004A3BA4 /* BNCRequestFactory.m */; }; + 5F5FDA162B7DE2FE00F14A43 /* BranchLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F5FDA152B7DE2FE00F14A43 /* BranchLogger.m */; }; + 5F5FDA172B7DE2FE00F14A43 /* BranchLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F5FDA152B7DE2FE00F14A43 /* BranchLogger.m */; }; + 5F5FDA182B7DE2FE00F14A43 /* BranchLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F5FDA152B7DE2FE00F14A43 /* BranchLogger.m */; }; + 5F5FDA1A2B7DE31E00F14A43 /* BranchLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F5FDA192B7DE31E00F14A43 /* BranchLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5F5FDA1B2B7DE31E00F14A43 /* BranchLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F5FDA192B7DE31E00F14A43 /* BranchLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5F5FDA1C2B7DE31E00F14A43 /* BranchLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F5FDA192B7DE31E00F14A43 /* BranchLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; 5F6DD2482894AEBD00AE9FB0 /* BranchSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5F22101D2894A0DB00C5B190 /* BranchSDK.framework */; }; 5F6DD24C2894AF5E00AE9FB0 /* NSURLSession+Branch.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F6DD24A2894AF5E00AE9FB0 /* NSURLSession+Branch.m */; }; 5F73EBFA28ECE65400608601 /* BranchSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5F73EBF428ECE65400608601 /* BranchSDK.framework */; }; 5F73EBFB28ECE65400608601 /* BranchSDK.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 5F73EBF428ECE65400608601 /* BranchSDK.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 5F79039428B59145003144CD /* BNCAppGroupsData.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210882894A33F00C5B190 /* BNCAppGroupsData.h */; }; - 5F79039628B59145003144CD /* BNCAppleReceipt.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22103B2894A33E00C5B190 /* BNCAppleReceipt.h */; }; - 5F79039828B59146003144CD /* BNCApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22105E2894A33F00C5B190 /* BNCApplication.h */; }; - 5F79039A28B59146003144CD /* BNCCallbackMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210562894A33F00C5B190 /* BNCCallbackMap.h */; }; - 5F79039B28B59146003144CD /* BNCCallbacks.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210952894A34000C5B190 /* BNCCallbacks.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F79039D28B59146003144CD /* BNCConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210A92894A34000C5B190 /* BNCConfig.h */; }; - 5F79039F28B59146003144CD /* BNCCrashlyticsWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22106E2894A33F00C5B190 /* BNCCrashlyticsWrapper.h */; }; - 5F7903A028B59146003144CD /* BNCDeepLinkViewControllerInstance.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22107C2894A33F00C5B190 /* BNCDeepLinkViewControllerInstance.h */; }; - 5F7903A128B59146003144CD /* BNCDeviceInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22102F2894A33E00C5B190 /* BNCDeviceInfo.h */; }; - 5F7903A228B59146003144CD /* BNCDeviceSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210282894A33E00C5B190 /* BNCDeviceSystem.h */; }; - 5F7903A328B59146003144CD /* BNCEncodingUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210B22894A34000C5B190 /* BNCEncodingUtils.h */; }; - 5F7903A528B59146003144CD /* BNCFieldDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210632894A33F00C5B190 /* BNCFieldDefines.h */; }; - 5F7903A628B59146003144CD /* BNCInitSessionResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210782894A33F00C5B190 /* BNCInitSessionResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F7903A728B59146003144CD /* BNCJSONUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210392894A33E00C5B190 /* BNCJSONUtility.h */; }; - 5F7903A828B59146003144CD /* BNCKeyChain.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210B52894A34000C5B190 /* BNCKeyChain.h */; }; - 5F7903A928B59146003144CD /* BNCLinkCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210552894A33F00C5B190 /* BNCLinkCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F7903AA28B59146003144CD /* BNCLinkData.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210532894A33F00C5B190 /* BNCLinkData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F7903AC28B59146003144CD /* BNCLog.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210B12894A34000C5B190 /* BNCLog.h */; }; - 5F7903AD28B59146003144CD /* BNCNetworkInterface.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210AA2894A34000C5B190 /* BNCNetworkInterface.h */; }; - 5F7903AE28B59146003144CD /* BNCNetworkService.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22104D2894A33F00C5B190 /* BNCNetworkService.h */; }; - 5F7903AF28B59146003144CD /* BNCNetworkServiceProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210592894A33F00C5B190 /* BNCNetworkServiceProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F7903B028B59146003144CD /* BNCPartnerParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22107F2894A33F00C5B190 /* BNCPartnerParameters.h */; }; - 5F7903B128B59146003144CD /* BNCPasteboard.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210A62894A34000C5B190 /* BNCPasteboard.h */; }; - 5F7903B228B59146003144CD /* BNCPreferenceHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210402894A33E00C5B190 /* BNCPreferenceHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F7903B328B59146003144CD /* BNCQRCodeCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22108B2894A33F00C5B190 /* BNCQRCodeCache.h */; }; - 5F7903B428B59147003144CD /* BNCReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22102B2894A33E00C5B190 /* BNCReachability.h */; }; - 5F7903B528B59147003144CD /* BNCServerInterface.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22108F2894A34000C5B190 /* BNCServerInterface.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F7903B628B59147003144CD /* BNCServerRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22109D2894A34000C5B190 /* BNCServerRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F7903B728B59147003144CD /* BNCServerRequestQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210A82894A34000C5B190 /* BNCServerRequestQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F7903B828B59147003144CD /* BNCServerResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210662894A33F00C5B190 /* BNCServerResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F7903B928B59147003144CD /* BNCSKAdNetwork.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210322894A33E00C5B190 /* BNCSKAdNetwork.h */; }; - 5F7903BB28B59147003144CD /* BNCSystemObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22103D2894A33E00C5B190 /* BNCSystemObserver.h */; }; - 5F7903BD28B59147003144CD /* BNCThreads.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22104C2894A33F00C5B190 /* BNCThreads.h */; }; - 5F7903BF28B59147003144CD /* BNCURLFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210A72894A34000C5B190 /* BNCURLFilter.h */; }; - 5F7903C128B59147003144CD /* Branch.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210B82894A34000C5B190 /* Branch.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F7903C228B59147003144CD /* Branch+Validator.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22107E2894A33F00C5B190 /* Branch+Validator.h */; }; - 5F7903C528B59147003144CD /* BranchConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210762894A33F00C5B190 /* BranchConstants.h */; }; - 5F7903CC28B59147003144CD /* BranchDeepLinkingController.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210AB2894A34000C5B190 /* BranchDeepLinkingController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F7903CD28B59147003144CD /* BranchDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210692894A33F00C5B190 /* BranchDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F7903CE28B59147003144CD /* BranchEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22107D2894A33F00C5B190 /* BranchEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F7903CF28B59147003144CD /* BranchInstallRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210492894A33E00C5B190 /* BranchInstallRequest.h */; }; - 5F7903D028B59147003144CD /* BranchJsonConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22105A2894A33F00C5B190 /* BranchJsonConfig.h */; }; - 5F7903D128B59148003144CD /* BranchLastAttributedTouchData.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210B02894A34000C5B190 /* BranchLastAttributedTouchData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F7903D228B59148003144CD /* BranchLATDRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210382894A33E00C5B190 /* BranchLATDRequest.h */; }; - 5F7903D328B59148003144CD /* BranchLinkProperties.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22104F2894A33F00C5B190 /* BranchLinkProperties.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F7903D528B59148003144CD /* BranchOpenRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210512894A33F00C5B190 /* BranchOpenRequest.h */; }; - 5F7903D628B59148003144CD /* BranchPluginSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210542894A33F00C5B190 /* BranchPluginSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F7903D728B59148003144CD /* BranchQRCode.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210982894A34000C5B190 /* BranchQRCode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F7903D928B59148003144CD /* BranchScene.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210612894A33F00C5B190 /* BranchScene.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F7903DC28B59148003144CD /* BranchShortUrlRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22106C2894A33F00C5B190 /* BranchShortUrlRequest.h */; }; - 5F7903DD28B59148003144CD /* BranchShortUrlSyncRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210272894A33E00C5B190 /* BranchShortUrlSyncRequest.h */; }; - 5F7903DE28B59148003144CD /* BranchSpotlightUrlRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210902894A34000C5B190 /* BranchSpotlightUrlRequest.h */; }; - 5F7903DF28B59148003144CD /* BranchUniversalObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22105C2894A33F00C5B190 /* BranchUniversalObject.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F7903E128B59148003144CD /* NSError+Branch.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210BC2894A34000C5B190 /* NSError+Branch.h */; }; - 5F7903E228B59148003144CD /* NSMutableDictionary+Branch.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210992894A34000C5B190 /* NSMutableDictionary+Branch.h */; }; - 5F7903E328B59148003144CD /* NSString+Branch.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210582894A33F00C5B190 /* NSString+Branch.h */; }; - 5F7903E428B59148003144CD /* UIViewController+Branch.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22107B2894A33F00C5B190 /* UIViewController+Branch.h */; }; - 5F7903E528B5A166003144CD /* BNCAppGroupsData.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210A32894A34000C5B190 /* BNCAppGroupsData.m */; }; - 5F7903E728B5A166003144CD /* BNCAppleReceipt.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210642894A33F00C5B190 /* BNCAppleReceipt.m */; }; - 5F7903E928B5A166003144CD /* BNCApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22109B2894A34000C5B190 /* BNCApplication.m */; }; - 5F7903EB28B5A166003144CD /* BNCCallbackMap.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210972894A34000C5B190 /* BNCCallbackMap.m */; }; - 5F7903ED28B5A166003144CD /* BNCConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22105B2894A33F00C5B190 /* BNCConfig.m */; }; - 5F7903EF28B5A166003144CD /* BNCCrashlyticsWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22109A2894A34000C5B190 /* BNCCrashlyticsWrapper.m */; }; - 5F7903F028B5C93E003144CD /* BNCDeepLinkViewControllerInstance.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210372894A33E00C5B190 /* BNCDeepLinkViewControllerInstance.m */; }; - 5F7903F128B5C93E003144CD /* BNCDeviceInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210BB2894A34000C5B190 /* BNCDeviceInfo.m */; }; - 5F7903F228B5C93E003144CD /* BNCDeviceSystem.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210462894A33E00C5B190 /* BNCDeviceSystem.m */; }; - 5F7903F328B5C93E003144CD /* BNCEncodingUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22108C2894A33F00C5B190 /* BNCEncodingUtils.m */; }; - 5F7903F528B5C93E003144CD /* BNCInitSessionResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210742894A33F00C5B190 /* BNCInitSessionResponse.m */; }; - 5F7903F628B5C93E003144CD /* BNCJSONUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22108E2894A34000C5B190 /* BNCJSONUtility.m */; }; - 5F7903F728B5C93E003144CD /* BNCKeyChain.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210932894A34000C5B190 /* BNCKeyChain.m */; }; - 5F7903F828B5C93E003144CD /* BNCLinkCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22104E2894A33F00C5B190 /* BNCLinkCache.m */; }; - 5F7903F928B5C93E003144CD /* BNCLinkData.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210A42894A34000C5B190 /* BNCLinkData.m */; }; - 5F7903FB28B5C93E003144CD /* BNCLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210722894A33F00C5B190 /* BNCLog.m */; }; - 5F7903FC28B5C93E003144CD /* BNCNetworkInterface.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210BD2894A34000C5B190 /* BNCNetworkInterface.m */; }; - 5F7903FD28B5C93E003144CD /* BNCNetworkService.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210B32894A34000C5B190 /* BNCNetworkService.m */; }; - 5F7903FE28B5C93E003144CD /* BNCPartnerParameters.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210B42894A34000C5B190 /* BNCPartnerParameters.m */; }; - 5F7903FF28B5C93E003144CD /* BNCPasteboard.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210C02894A34000C5B190 /* BNCPasteboard.m */; }; - 5F79040028B5C93E003144CD /* BNCPreferenceHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210A12894A34000C5B190 /* BNCPreferenceHelper.m */; }; - 5F79040128B5C93E003144CD /* BNCQRCodeCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210B72894A34000C5B190 /* BNCQRCodeCache.m */; }; - 5F79040228B5C93E003144CD /* BNCReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22103C2894A33E00C5B190 /* BNCReachability.m */; }; - 5F79040328B5C93E003144CD /* BNCServerInterface.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22106D2894A33F00C5B190 /* BNCServerInterface.m */; }; - 5F79040428B5C93E003144CD /* BNCServerRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210622894A33F00C5B190 /* BNCServerRequest.m */; }; - 5F79040528B5C93E003144CD /* BNCServerRequestQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210AF2894A34000C5B190 /* BNCServerRequestQueue.m */; }; - 5F79040628B5C93E003144CD /* BNCServerResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210482894A33E00C5B190 /* BNCServerResponse.m */; }; - 5F79040728B5C93E003144CD /* BNCSKAdNetwork.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210842894A33F00C5B190 /* BNCSKAdNetwork.m */; }; - 5F79040928B5C93E003144CD /* BNCSystemObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210862894A33F00C5B190 /* BNCSystemObserver.m */; }; - 5F79040B28B5C93E003144CD /* BNCThreads.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210AD2894A34000C5B190 /* BNCThreads.m */; }; - 5F79040D28B5C93E003144CD /* BNCURLFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210292894A33E00C5B190 /* BNCURLFilter.m */; }; - 5F79040F28B5C93E003144CD /* Branch.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210922894A34000C5B190 /* Branch.m */; }; - 5F79041028B5C93E003144CD /* Branch+Validator.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210962894A34000C5B190 /* Branch+Validator.m */; }; - 5F79041328B5C93E003144CD /* BranchConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210362894A33E00C5B190 /* BranchConstants.m */; }; - 5F79041A28B5C93E003144CD /* BranchDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22105D2894A33F00C5B190 /* BranchDelegate.m */; }; - 5F79041B28B5C93E003144CD /* BranchEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210432894A33E00C5B190 /* BranchEvent.m */; }; - 5F79041C28B5C93E003144CD /* BranchInstallRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22102C2894A33E00C5B190 /* BranchInstallRequest.m */; }; - 5F79041D28B5C93E003144CD /* BranchJsonConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210312894A33E00C5B190 /* BranchJsonConfig.m */; }; - 5F79041E28B5C93E003144CD /* BranchLastAttributedTouchData.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210832894A33F00C5B190 /* BranchLastAttributedTouchData.m */; }; - 5F79041F28B5C93E003144CD /* BranchLATDRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210422894A33E00C5B190 /* BranchLATDRequest.m */; }; - 5F79042028B5C93E003144CD /* BranchLinkProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22108D2894A33F00C5B190 /* BranchLinkProperties.m */; }; - 5F79042228B5C93F003144CD /* BranchOpenRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210342894A33E00C5B190 /* BranchOpenRequest.m */; }; - 5F79042328B5C93F003144CD /* BranchPluginSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210772894A33F00C5B190 /* BranchPluginSupport.m */; }; - 5F79042428B5C93F003144CD /* BranchQRCode.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22108A2894A33F00C5B190 /* BranchQRCode.m */; }; - 5F79042628B5C93F003144CD /* BranchScene.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210572894A33F00C5B190 /* BranchScene.m */; }; - 5F79042928B5C93F003144CD /* BranchShortUrlRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210792894A33F00C5B190 /* BranchShortUrlRequest.m */; }; - 5F79042A28B5C93F003144CD /* BranchShortUrlSyncRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210332894A33E00C5B190 /* BranchShortUrlSyncRequest.m */; }; - 5F79042B28B5C93F003144CD /* BranchSpotlightUrlRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22103F2894A33E00C5B190 /* BranchSpotlightUrlRequest.m */; }; - 5F79042C28B5C93F003144CD /* BranchUniversalObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210942894A34000C5B190 /* BranchUniversalObject.m */; }; - 5F79042E28B5C93F003144CD /* NSError+Branch.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210AE2894A34000C5B190 /* NSError+Branch.m */; }; - 5F79042F28B5C93F003144CD /* NSMutableDictionary+Branch.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210352894A33E00C5B190 /* NSMutableDictionary+Branch.m */; }; - 5F79043028B5C93F003144CD /* NSString+Branch.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22102A2894A33E00C5B190 /* NSString+Branch.m */; }; - 5F79043128B5C93F003144CD /* UIViewController+Branch.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210412894A33E00C5B190 /* UIViewController+Branch.m */; }; + 5FA71BA82B7AE6B2008009CA /* Branch.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3A22B7AC6A100EAF29F /* Branch.h */; settings = {ATTRIBUTES = (Public, ); }; }; 5FC446652ACCB97000FF1C87 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 5FC446642ACCB96000FF1C87 /* PrivacyInfo.xcprivacy */; }; 5FC446662ACCB97100FF1C87 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 5FC446642ACCB96000FF1C87 /* PrivacyInfo.xcprivacy */; }; 5FC446672ACCB97200FF1C87 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 5FC446642ACCB96000FF1C87 /* PrivacyInfo.xcprivacy */; }; - 5FF2AFE028E7C22400393216 /* BranchSDK.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FF2AFDF28E7C22100393216 /* BranchSDK.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5FF2AFE128E7C22400393216 /* BranchSDK.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FF2AFDF28E7C22100393216 /* BranchSDK.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5FF9DDFB28EE78A700D62DE1 /* BNCAppGroupsData.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210A32894A34000C5B190 /* BNCAppGroupsData.m */; }; - 5FF9DDFF28EE78A700D62DE1 /* BNCAppleReceipt.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210642894A33F00C5B190 /* BNCAppleReceipt.m */; }; - 5FF9DE0328EE78A700D62DE1 /* BNCApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22109B2894A34000C5B190 /* BNCApplication.m */; }; - 5FF9DE0528EE78A700D62DE1 /* BNCCallbackMap.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210972894A34000C5B190 /* BNCCallbackMap.m */; }; - 5FF9DE0A28EE78A700D62DE1 /* BNCConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22105B2894A33F00C5B190 /* BNCConfig.m */; }; - 5FF9DE0C28EE78A700D62DE1 /* BNCContentDiscoveryManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210B62894A34000C5B190 /* BNCContentDiscoveryManager.m */; }; - 5FF9DE0E28EE78A700D62DE1 /* BNCCrashlyticsWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22109A2894A34000C5B190 /* BNCCrashlyticsWrapper.m */; }; - 5FF9DE1028EE78A700D62DE1 /* BNCDeepLinkViewControllerInstance.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210372894A33E00C5B190 /* BNCDeepLinkViewControllerInstance.m */; }; - 5FF9DE1228EE78A700D62DE1 /* BNCDeviceInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210BB2894A34000C5B190 /* BNCDeviceInfo.m */; }; - 5FF9DE1428EE78A700D62DE1 /* BNCDeviceSystem.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210462894A33E00C5B190 /* BNCDeviceSystem.m */; }; - 5FF9DE1628EE78A700D62DE1 /* BNCEncodingUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22108C2894A33F00C5B190 /* BNCEncodingUtils.m */; }; - 5FF9DE1B28EE78A700D62DE1 /* BNCInitSessionResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210742894A33F00C5B190 /* BNCInitSessionResponse.m */; }; - 5FF9DE1D28EE78A700D62DE1 /* BNCJSONUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22108E2894A34000C5B190 /* BNCJSONUtility.m */; }; - 5FF9DE1F28EE78A700D62DE1 /* BNCKeyChain.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210932894A34000C5B190 /* BNCKeyChain.m */; }; - 5FF9DE2128EE78A700D62DE1 /* BNCLinkCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22104E2894A33F00C5B190 /* BNCLinkCache.m */; }; - 5FF9DE2328EE78A700D62DE1 /* BNCLinkData.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210A42894A34000C5B190 /* BNCLinkData.m */; }; - 5FF9DE2728EE78A800D62DE1 /* BNCLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210722894A33F00C5B190 /* BNCLog.m */; }; - 5FF9DE2928EE78A800D62DE1 /* BNCNetworkInterface.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210BD2894A34000C5B190 /* BNCNetworkInterface.m */; }; - 5FF9DE2B28EE78A800D62DE1 /* BNCNetworkService.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210B32894A34000C5B190 /* BNCNetworkService.m */; }; - 5FF9DE2E28EE78A800D62DE1 /* BNCPartnerParameters.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210B42894A34000C5B190 /* BNCPartnerParameters.m */; }; - 5FF9DE3028EE78A800D62DE1 /* BNCPasteboard.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210C02894A34000C5B190 /* BNCPasteboard.m */; }; - 5FF9DE3228EE78A800D62DE1 /* BNCPreferenceHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210A12894A34000C5B190 /* BNCPreferenceHelper.m */; }; - 5FF9DE3428EE78A800D62DE1 /* BNCQRCodeCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210B72894A34000C5B190 /* BNCQRCodeCache.m */; }; - 5FF9DE3628EE78A800D62DE1 /* BNCReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22103C2894A33E00C5B190 /* BNCReachability.m */; }; - 5FF9DE3828EE78A800D62DE1 /* BNCServerInterface.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22106D2894A33F00C5B190 /* BNCServerInterface.m */; }; - 5FF9DE3A28EE78A800D62DE1 /* BNCServerRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210622894A33F00C5B190 /* BNCServerRequest.m */; }; - 5FF9DE3C28EE78A800D62DE1 /* BNCServerRequestQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210AF2894A34000C5B190 /* BNCServerRequestQueue.m */; }; - 5FF9DE3E28EE78A800D62DE1 /* BNCServerResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210482894A33E00C5B190 /* BNCServerResponse.m */; }; - 5FF9DE4028EE78A800D62DE1 /* BNCSKAdNetwork.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210842894A33F00C5B190 /* BNCSKAdNetwork.m */; }; - 5FF9DE4228EE78A800D62DE1 /* BNCSpotlightService.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22103E2894A33E00C5B190 /* BNCSpotlightService.m */; }; - 5FF9DE4428EE78A800D62DE1 /* BNCSystemObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210862894A33F00C5B190 /* BNCSystemObserver.m */; }; - 5FF9DE4828EE78A800D62DE1 /* BNCThreads.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210AD2894A34000C5B190 /* BNCThreads.m */; }; - 5FF9DE4C28EE78A800D62DE1 /* BNCURLFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210292894A33E00C5B190 /* BNCURLFilter.m */; }; - 5FF9DE4E28EE78A800D62DE1 /* BNCUserAgentCollector.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210C32894A34000C5B190 /* BNCUserAgentCollector.m */; }; - 5FF9DE5028EE78A800D62DE1 /* Branch.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210922894A34000C5B190 /* Branch.m */; }; - 5FF9DE5228EE78A800D62DE1 /* Branch+Validator.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210962894A34000C5B190 /* Branch+Validator.m */; }; - 5FF9DE5428EE78A800D62DE1 /* BranchActivityItemProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22109E2894A34000C5B190 /* BranchActivityItemProvider.m */; }; - 5FF9DE5828EE78A800D62DE1 /* BranchConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210362894A33E00C5B190 /* BranchConstants.m */; }; - 5FF9DE5A28EE78A800D62DE1 /* BranchContentDiscoverer.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210712894A33F00C5B190 /* BranchContentDiscoverer.m */; }; - 5FF9DE5C28EE78A800D62DE1 /* BranchContentDiscoveryManifest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210892894A33F00C5B190 /* BranchContentDiscoveryManifest.m */; }; - 5FF9DE5E28EE78A800D62DE1 /* BranchContentPathProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22109F2894A34000C5B190 /* BranchContentPathProperties.m */; }; - 5FF9DE6428EE78A800D62DE1 /* BranchCSSearchableItemAttributeSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22103A2894A33E00C5B190 /* BranchCSSearchableItemAttributeSet.m */; }; - 5FF9DE6728EE78A800D62DE1 /* BranchDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22105D2894A33F00C5B190 /* BranchDelegate.m */; }; - 5FF9DE6928EE78A800D62DE1 /* BranchEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210432894A33E00C5B190 /* BranchEvent.m */; }; - 5FF9DE6B28EE78A800D62DE1 /* BranchInstallRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22102C2894A33E00C5B190 /* BranchInstallRequest.m */; }; - 5FF9DE6D28EE78A800D62DE1 /* BranchJsonConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210312894A33E00C5B190 /* BranchJsonConfig.m */; }; - 5FF9DE6F28EE78A800D62DE1 /* BranchLastAttributedTouchData.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210832894A33F00C5B190 /* BranchLastAttributedTouchData.m */; }; - 5FF9DE7128EE78A800D62DE1 /* BranchLATDRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210422894A33E00C5B190 /* BranchLATDRequest.m */; }; - 5FF9DE7328EE78A800D62DE1 /* BranchLinkProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22108D2894A33F00C5B190 /* BranchLinkProperties.m */; }; - 5FF9DE7728EE78A800D62DE1 /* BranchOpenRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210342894A33E00C5B190 /* BranchOpenRequest.m */; }; - 5FF9DE7928EE78A800D62DE1 /* BranchPluginSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210772894A33F00C5B190 /* BranchPluginSupport.m */; }; - 5FF9DE7B28EE78A800D62DE1 /* BranchQRCode.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22108A2894A33F00C5B190 /* BranchQRCode.m */; }; - 5FF9DE7F28EE78A800D62DE1 /* BranchScene.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210572894A33F00C5B190 /* BranchScene.m */; }; - 5FF9DE8328EE78A800D62DE1 /* BranchShareLink.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210C42894A34000C5B190 /* BranchShareLink.m */; }; - 5FF9DE8528EE78A800D62DE1 /* BranchShortUrlRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210792894A33F00C5B190 /* BranchShortUrlRequest.m */; }; - 5FF9DE8728EE78A800D62DE1 /* BranchShortUrlSyncRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210332894A33E00C5B190 /* BranchShortUrlSyncRequest.m */; }; - 5FF9DE8B28EE78A800D62DE1 /* BranchUniversalObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210942894A34000C5B190 /* BranchUniversalObject.m */; }; - 5FF9DE8F28EE78A800D62DE1 /* NSError+Branch.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210AE2894A34000C5B190 /* NSError+Branch.m */; }; - 5FF9DE9128EE78A800D62DE1 /* NSMutableDictionary+Branch.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210352894A33E00C5B190 /* NSMutableDictionary+Branch.m */; }; - 5FF9DE9328EE78A800D62DE1 /* NSString+Branch.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22102A2894A33E00C5B190 /* NSString+Branch.m */; }; - 5FF9DE9528EE78A800D62DE1 /* UIViewController+Branch.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2210412894A33E00C5B190 /* UIViewController+Branch.m */; }; - 5FF9DE9628EE790300D62DE1 /* BranchSpotlightUrlRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F22103F2894A33E00C5B190 /* BranchSpotlightUrlRequest.m */; }; - 5FF9DE9728EE797300D62DE1 /* BNCAppGroupsData.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210882894A33F00C5B190 /* BNCAppGroupsData.h */; }; - 5FF9DE9928EE797300D62DE1 /* BNCAppleReceipt.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22103B2894A33E00C5B190 /* BNCAppleReceipt.h */; }; - 5FF9DE9B28EE797300D62DE1 /* BNCApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22105E2894A33F00C5B190 /* BNCApplication.h */; }; - 5FF9DE9C28EE797300D62DE1 /* BNCCallbackMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210562894A33F00C5B190 /* BNCCallbackMap.h */; }; - 5FF9DE9D28EE797300D62DE1 /* BNCCallbacks.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210952894A34000C5B190 /* BNCCallbacks.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5FF9DE9F28EE797300D62DE1 /* BNCConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210A92894A34000C5B190 /* BNCConfig.h */; }; - 5FF9DEA028EE797300D62DE1 /* BNCContentDiscoveryManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210732894A33F00C5B190 /* BNCContentDiscoveryManager.h */; }; - 5FF9DEA128EE797300D62DE1 /* BNCCrashlyticsWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22106E2894A33F00C5B190 /* BNCCrashlyticsWrapper.h */; }; - 5FF9DEA228EE797300D62DE1 /* BNCDeepLinkViewControllerInstance.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22107C2894A33F00C5B190 /* BNCDeepLinkViewControllerInstance.h */; }; - 5FF9DEA328EE797300D62DE1 /* BNCDeviceInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22102F2894A33E00C5B190 /* BNCDeviceInfo.h */; }; - 5FF9DEA428EE797300D62DE1 /* BNCDeviceSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210282894A33E00C5B190 /* BNCDeviceSystem.h */; }; - 5FF9DEA528EE797300D62DE1 /* BNCEncodingUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210B22894A34000C5B190 /* BNCEncodingUtils.h */; }; - 5FF9DEA728EE797300D62DE1 /* BNCFieldDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210632894A33F00C5B190 /* BNCFieldDefines.h */; }; - 5FF9DEA828EE797300D62DE1 /* BNCInitSessionResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210782894A33F00C5B190 /* BNCInitSessionResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5FF9DEA928EE797300D62DE1 /* BNCJSONUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210392894A33E00C5B190 /* BNCJSONUtility.h */; }; - 5FF9DEAA28EE797300D62DE1 /* BNCKeyChain.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210B52894A34000C5B190 /* BNCKeyChain.h */; }; - 5FF9DEAB28EE797300D62DE1 /* BNCLinkCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210552894A33F00C5B190 /* BNCLinkCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5FF9DEAC28EE797300D62DE1 /* BNCLinkData.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210532894A33F00C5B190 /* BNCLinkData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5FF9DEAE28EE797300D62DE1 /* BNCLog.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210B12894A34000C5B190 /* BNCLog.h */; }; - 5FF9DEAF28EE797300D62DE1 /* BNCNetworkInterface.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210AA2894A34000C5B190 /* BNCNetworkInterface.h */; }; - 5FF9DEB028EE797300D62DE1 /* BNCNetworkService.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22104D2894A33F00C5B190 /* BNCNetworkService.h */; }; - 5FF9DEB128EE797300D62DE1 /* BNCNetworkServiceProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210592894A33F00C5B190 /* BNCNetworkServiceProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5FF9DEB228EE797300D62DE1 /* BNCPartnerParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22107F2894A33F00C5B190 /* BNCPartnerParameters.h */; }; - 5FF9DEB328EE797300D62DE1 /* BNCPasteboard.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210A62894A34000C5B190 /* BNCPasteboard.h */; }; - 5FF9DEB428EE797300D62DE1 /* BNCPreferenceHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210402894A33E00C5B190 /* BNCPreferenceHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5FF9DEB528EE797300D62DE1 /* BNCQRCodeCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22108B2894A33F00C5B190 /* BNCQRCodeCache.h */; }; - 5FF9DEB628EE797300D62DE1 /* BNCReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22102B2894A33E00C5B190 /* BNCReachability.h */; }; - 5FF9DEB728EE797300D62DE1 /* BNCServerInterface.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22108F2894A34000C5B190 /* BNCServerInterface.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5FF9DEB828EE797300D62DE1 /* BNCServerRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22109D2894A34000C5B190 /* BNCServerRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5FF9DEB928EE797300D62DE1 /* BNCServerRequestQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210A82894A34000C5B190 /* BNCServerRequestQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5FF9DEBA28EE797300D62DE1 /* BNCServerResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210662894A33F00C5B190 /* BNCServerResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5FF9DEBB28EE797300D62DE1 /* BNCSKAdNetwork.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210322894A33E00C5B190 /* BNCSKAdNetwork.h */; }; - 5FF9DEBC28EE797300D62DE1 /* BNCSpotlightService.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210BE2894A34000C5B190 /* BNCSpotlightService.h */; }; - 5FF9DEBD28EE797300D62DE1 /* BNCSystemObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22103D2894A33E00C5B190 /* BNCSystemObserver.h */; }; - 5FF9DEBF28EE797300D62DE1 /* BNCThreads.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22104C2894A33F00C5B190 /* BNCThreads.h */; }; - 5FF9DEC128EE797300D62DE1 /* BNCURLFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210A72894A34000C5B190 /* BNCURLFilter.h */; }; - 5FF9DEC228EE797400D62DE1 /* BNCUserAgentCollector.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210812894A33F00C5B190 /* BNCUserAgentCollector.h */; }; - 5FF9DEC328EE797400D62DE1 /* Branch.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210B82894A34000C5B190 /* Branch.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5FF9DEC428EE797400D62DE1 /* Branch+Validator.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22107E2894A33F00C5B190 /* Branch+Validator.h */; }; - 5FF9DEC528EE797400D62DE1 /* BranchActivityItemProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210BF2894A34000C5B190 /* BranchActivityItemProvider.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5FF9DEC728EE797400D62DE1 /* BranchConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210762894A33F00C5B190 /* BranchConstants.h */; }; - 5FF9DEC828EE797400D62DE1 /* BranchContentDiscoverer.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210702894A33F00C5B190 /* BranchContentDiscoverer.h */; }; - 5FF9DEC928EE797400D62DE1 /* BranchContentDiscoveryManifest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210672894A33F00C5B190 /* BranchContentDiscoveryManifest.h */; }; - 5FF9DECA28EE797400D62DE1 /* BranchContentPathProperties.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210802894A33F00C5B190 /* BranchContentPathProperties.h */; }; - 5FF9DECD28EE797400D62DE1 /* BranchCSSearchableItemAttributeSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210442894A33E00C5B190 /* BranchCSSearchableItemAttributeSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5FF9DECE28EE797400D62DE1 /* BranchDeepLinkingController.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210AB2894A34000C5B190 /* BranchDeepLinkingController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5FF9DECF28EE797400D62DE1 /* BranchDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210692894A33F00C5B190 /* BranchDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5FF9DED028EE797400D62DE1 /* BranchEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22107D2894A33F00C5B190 /* BranchEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5FF9DED128EE797400D62DE1 /* BranchInstallRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210492894A33E00C5B190 /* BranchInstallRequest.h */; }; - 5FF9DED228EE797400D62DE1 /* BranchJsonConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22105A2894A33F00C5B190 /* BranchJsonConfig.h */; }; - 5FF9DED328EE797400D62DE1 /* BranchLastAttributedTouchData.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210B02894A34000C5B190 /* BranchLastAttributedTouchData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5FF9DED428EE797400D62DE1 /* BranchLATDRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210382894A33E00C5B190 /* BranchLATDRequest.h */; }; - 5FF9DED528EE797400D62DE1 /* BranchLinkProperties.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22104F2894A33F00C5B190 /* BranchLinkProperties.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5FF9DED728EE797400D62DE1 /* BranchOpenRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210512894A33F00C5B190 /* BranchOpenRequest.h */; }; - 5FF9DED828EE797400D62DE1 /* BranchPluginSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210542894A33F00C5B190 /* BranchPluginSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5FF9DED928EE797400D62DE1 /* BranchQRCode.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210982894A34000C5B190 /* BranchQRCode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5FF9DEDB28EE797400D62DE1 /* BranchScene.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210612894A33F00C5B190 /* BranchScene.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5FF9DEDD28EE797400D62DE1 /* BranchShareLink.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210822894A33F00C5B190 /* BranchShareLink.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5FF9DEDE28EE797400D62DE1 /* BranchShortUrlRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22106C2894A33F00C5B190 /* BranchShortUrlRequest.h */; }; - 5FF9DEDF28EE797400D62DE1 /* BranchShortUrlSyncRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210272894A33E00C5B190 /* BranchShortUrlSyncRequest.h */; }; - 5FF9DEE028EE797400D62DE1 /* BranchSpotlightUrlRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210902894A34000C5B190 /* BranchSpotlightUrlRequest.h */; }; - 5FF9DEE128EE797400D62DE1 /* BranchUniversalObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22105C2894A33F00C5B190 /* BranchUniversalObject.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5FF9DEE328EE797400D62DE1 /* NSError+Branch.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210BC2894A34000C5B190 /* NSError+Branch.h */; }; - 5FF9DEE428EE797400D62DE1 /* NSMutableDictionary+Branch.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210992894A34000C5B190 /* NSMutableDictionary+Branch.h */; }; - 5FF9DEE528EE797400D62DE1 /* NSString+Branch.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2210582894A33F00C5B190 /* NSString+Branch.h */; }; - 5FF9DEE628EE797400D62DE1 /* UIViewController+Branch.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F22107B2894A33F00C5B190 /* UIViewController+Branch.h */; }; - 5FF9DEE728EE7A7F00D62DE1 /* BranchSDK.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FF2AFDF28E7C22100393216 /* BranchSDK.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C1B63C7D29D2380000D1136D /* BNCUrlQueryParameter.m in Sources */ = {isa = PBXBuildFile; fileRef = C1B63C7929D2380000D1136D /* BNCUrlQueryParameter.m */; }; - C1B63C7E29D2380000D1136D /* BNCReferringURLUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = C1B63C7A29D2380000D1136D /* BNCReferringURLUtility.m */; }; - C1B63C7F29D2380000D1136D /* BNCUrlQueryParameter.h in Headers */ = {isa = PBXBuildFile; fileRef = C1B63C7B29D2380000D1136D /* BNCUrlQueryParameter.h */; }; - C1B63C8029D2380000D1136D /* BNCReferringURLUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = C1B63C7C29D2380000D1136D /* BNCReferringURLUtility.h */; }; - C1B63C8129D34EEF00D1136D /* BNCReferringURLUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = C1B63C7C29D2380000D1136D /* BNCReferringURLUtility.h */; }; - C1B63C8229D34EEF00D1136D /* BNCUrlQueryParameter.h in Headers */ = {isa = PBXBuildFile; fileRef = C1B63C7B29D2380000D1136D /* BNCUrlQueryParameter.h */; }; - C1B63C8329D34EF700D1136D /* BNCReferringURLUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = C1B63C7A29D2380000D1136D /* BNCReferringURLUtility.m */; }; - C1B63C8429D34EF700D1136D /* BNCUrlQueryParameter.m in Sources */ = {isa = PBXBuildFile; fileRef = C1B63C7929D2380000D1136D /* BNCUrlQueryParameter.m */; }; - C1B63C8529D34FE400D1136D /* BNCReferringURLUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = C1B63C7C29D2380000D1136D /* BNCReferringURLUtility.h */; }; - C1B63C8629D34FE400D1136D /* BNCUrlQueryParameter.h in Headers */ = {isa = PBXBuildFile; fileRef = C1B63C7B29D2380000D1136D /* BNCUrlQueryParameter.h */; }; - C1B63C8729D34FEA00D1136D /* BNCReferringURLUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = C1B63C7A29D2380000D1136D /* BNCReferringURLUtility.m */; }; - C1B63C8829D34FEB00D1136D /* BNCUrlQueryParameter.m in Sources */ = {isa = PBXBuildFile; fileRef = C1B63C7929D2380000D1136D /* BNCUrlQueryParameter.m */; }; - C1BE797E2A9E704600E15EDF /* BNCCurrency.h in Headers */ = {isa = PBXBuildFile; fileRef = C1CDEF2E2A95717E0098524F /* BNCCurrency.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C1BE797F2A9E704700E15EDF /* BNCCurrency.h in Headers */ = {isa = PBXBuildFile; fileRef = C1CDEF2E2A95717E0098524F /* BNCCurrency.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C1BE79802A9E707200E15EDF /* BNCCurrency.m in Sources */ = {isa = PBXBuildFile; fileRef = C1CDEF2D2A95717E0098524F /* BNCCurrency.m */; }; - C1BE79812A9E707300E15EDF /* BNCCurrency.m in Sources */ = {isa = PBXBuildFile; fileRef = C1CDEF2D2A95717E0098524F /* BNCCurrency.m */; }; - C1BE79822A9E708900E15EDF /* BNCProductCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = C1CDEF322A95718C0098524F /* BNCProductCategory.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C1BE79832A9E708900E15EDF /* BNCProductCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = C1CDEF322A95718C0098524F /* BNCProductCategory.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C1BE79842A9E708F00E15EDF /* BNCProductCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = C1CDEF312A95718C0098524F /* BNCProductCategory.m */; }; - C1BE79852A9E709000E15EDF /* BNCProductCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = C1CDEF312A95718C0098524F /* BNCProductCategory.m */; }; - C1CDEF2F2A95717E0098524F /* BNCCurrency.m in Sources */ = {isa = PBXBuildFile; fileRef = C1CDEF2D2A95717E0098524F /* BNCCurrency.m */; }; - C1CDEF302A95717E0098524F /* BNCCurrency.h in Headers */ = {isa = PBXBuildFile; fileRef = C1CDEF2E2A95717E0098524F /* BNCCurrency.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C1CDEF332A95718C0098524F /* BNCProductCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = C1CDEF312A95718C0098524F /* BNCProductCategory.m */; }; - C1CDEF342A95718C0098524F /* BNCProductCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = C1CDEF322A95718C0098524F /* BNCProductCategory.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E761E92129E61DA000E55C98 /* BNCEventUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = E761E91F29E61DA000E55C98 /* BNCEventUtils.m */; }; - E761E92229E61DA000E55C98 /* BNCEventUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = E761E91F29E61DA000E55C98 /* BNCEventUtils.m */; }; - E761E92329E61DA000E55C98 /* BNCEventUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = E761E91F29E61DA000E55C98 /* BNCEventUtils.m */; }; - E761E92429E61DA000E55C98 /* BNCEventUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = E761E92029E61DA000E55C98 /* BNCEventUtils.h */; }; - E761E92529E61DA000E55C98 /* BNCEventUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = E761E92029E61DA000E55C98 /* BNCEventUtils.h */; }; - E761E92629E61DA000E55C98 /* BNCEventUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = E761E92029E61DA000E55C98 /* BNCEventUtils.h */; }; - E7653F052A9E737700C7C040 /* BNCServerAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = E7653F042A9E737700C7C040 /* BNCServerAPI.m */; }; - E7653F062A9E737700C7C040 /* BNCServerAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = E7653F042A9E737700C7C040 /* BNCServerAPI.m */; }; - E7653F072A9E737700C7C040 /* BNCServerAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = E7653F042A9E737700C7C040 /* BNCServerAPI.m */; }; - E7653F092A9E73AA00C7C040 /* BNCServerAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = E7653F082A9E73AA00C7C040 /* BNCServerAPI.h */; }; - E7653F0A2A9E73AA00C7C040 /* BNCServerAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = E7653F082A9E73AA00C7C040 /* BNCServerAPI.h */; }; - E7653F0B2A9E73AA00C7C040 /* BNCServerAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = E7653F082A9E73AA00C7C040 /* BNCServerAPI.h */; }; + 5FCDD3FF2B7AC6A100EAF29F /* NSError+Branch.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD36C2B7AC6A100EAF29F /* NSError+Branch.m */; }; + 5FCDD4002B7AC6A100EAF29F /* NSError+Branch.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD36C2B7AC6A100EAF29F /* NSError+Branch.m */; }; + 5FCDD4012B7AC6A100EAF29F /* NSError+Branch.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD36C2B7AC6A100EAF29F /* NSError+Branch.m */; }; + 5FCDD4022B7AC6A100EAF29F /* BNCUserAgentCollector.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD36D2B7AC6A100EAF29F /* BNCUserAgentCollector.m */; }; + 5FCDD4032B7AC6A100EAF29F /* BNCUserAgentCollector.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD36D2B7AC6A100EAF29F /* BNCUserAgentCollector.m */; }; + 5FCDD4052B7AC6A100EAF29F /* BNCEncodingUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD36E2B7AC6A100EAF29F /* BNCEncodingUtils.m */; }; + 5FCDD4062B7AC6A100EAF29F /* BNCEncodingUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD36E2B7AC6A100EAF29F /* BNCEncodingUtils.m */; }; + 5FCDD4072B7AC6A100EAF29F /* BNCEncodingUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD36E2B7AC6A100EAF29F /* BNCEncodingUtils.m */; }; + 5FCDD4082B7AC6A100EAF29F /* BranchUniversalObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD36F2B7AC6A100EAF29F /* BranchUniversalObject.m */; }; + 5FCDD4092B7AC6A100EAF29F /* BranchUniversalObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD36F2B7AC6A100EAF29F /* BranchUniversalObject.m */; }; + 5FCDD40A2B7AC6A100EAF29F /* BranchUniversalObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD36F2B7AC6A100EAF29F /* BranchUniversalObject.m */; }; + 5FCDD40B2B7AC6A100EAF29F /* BranchPasteControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3702B7AC6A100EAF29F /* BranchPasteControl.m */; }; + 5FCDD40C2B7AC6A100EAF29F /* BranchPasteControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3702B7AC6A100EAF29F /* BranchPasteControl.m */; }; + 5FCDD40E2B7AC6A100EAF29F /* BNCApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3712B7AC6A100EAF29F /* BNCApplication.m */; }; + 5FCDD40F2B7AC6A100EAF29F /* BNCApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3712B7AC6A100EAF29F /* BNCApplication.m */; }; + 5FCDD4102B7AC6A100EAF29F /* BNCApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3712B7AC6A100EAF29F /* BNCApplication.m */; }; + 5FCDD4112B7AC6A100EAF29F /* BNCDeviceSystem.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3722B7AC6A100EAF29F /* BNCDeviceSystem.m */; }; + 5FCDD4122B7AC6A100EAF29F /* BNCDeviceSystem.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3722B7AC6A100EAF29F /* BNCDeviceSystem.m */; }; + 5FCDD4132B7AC6A100EAF29F /* BNCDeviceSystem.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3722B7AC6A100EAF29F /* BNCDeviceSystem.m */; }; + 5FCDD4142B7AC6A100EAF29F /* NSMutableDictionary+Branch.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3732B7AC6A100EAF29F /* NSMutableDictionary+Branch.m */; }; + 5FCDD4152B7AC6A100EAF29F /* NSMutableDictionary+Branch.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3732B7AC6A100EAF29F /* NSMutableDictionary+Branch.m */; }; + 5FCDD4162B7AC6A100EAF29F /* NSMutableDictionary+Branch.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3732B7AC6A100EAF29F /* NSMutableDictionary+Branch.m */; }; + 5FCDD4172B7AC6A100EAF29F /* BNCServerRequestQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3742B7AC6A100EAF29F /* BNCServerRequestQueue.m */; }; + 5FCDD4182B7AC6A100EAF29F /* BNCServerRequestQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3742B7AC6A100EAF29F /* BNCServerRequestQueue.m */; }; + 5FCDD4192B7AC6A100EAF29F /* BNCServerRequestQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3742B7AC6A100EAF29F /* BNCServerRequestQueue.m */; }; + 5FCDD41A2B7AC6A100EAF29F /* BNCUrlQueryParameter.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3752B7AC6A100EAF29F /* BNCUrlQueryParameter.m */; }; + 5FCDD41B2B7AC6A100EAF29F /* BNCUrlQueryParameter.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3752B7AC6A100EAF29F /* BNCUrlQueryParameter.m */; }; + 5FCDD41C2B7AC6A100EAF29F /* BNCUrlQueryParameter.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3752B7AC6A100EAF29F /* BNCUrlQueryParameter.m */; }; + 5FCDD41D2B7AC6A100EAF29F /* BNCDeepLinkViewControllerInstance.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3762B7AC6A100EAF29F /* BNCDeepLinkViewControllerInstance.m */; }; + 5FCDD41E2B7AC6A100EAF29F /* BNCDeepLinkViewControllerInstance.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3762B7AC6A100EAF29F /* BNCDeepLinkViewControllerInstance.m */; }; + 5FCDD41F2B7AC6A100EAF29F /* BNCDeepLinkViewControllerInstance.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3762B7AC6A100EAF29F /* BNCDeepLinkViewControllerInstance.m */; }; + 5FCDD4202B7AC6A100EAF29F /* BranchScene.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3772B7AC6A100EAF29F /* BranchScene.m */; }; + 5FCDD4212B7AC6A100EAF29F /* BranchScene.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3772B7AC6A100EAF29F /* BranchScene.m */; }; + 5FCDD4222B7AC6A100EAF29F /* BranchScene.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3772B7AC6A100EAF29F /* BranchScene.m */; }; + 5FCDD4232B7AC6A100EAF29F /* BNCContentDiscoveryManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3782B7AC6A100EAF29F /* BNCContentDiscoveryManager.m */; }; + 5FCDD4242B7AC6A100EAF29F /* BNCContentDiscoveryManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3782B7AC6A100EAF29F /* BNCContentDiscoveryManager.m */; }; + 5FCDD4262B7AC6A100EAF29F /* Branch+Validator.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3792B7AC6A100EAF29F /* Branch+Validator.m */; }; + 5FCDD4272B7AC6A100EAF29F /* Branch+Validator.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3792B7AC6A100EAF29F /* Branch+Validator.m */; }; + 5FCDD4282B7AC6A100EAF29F /* Branch+Validator.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3792B7AC6A100EAF29F /* Branch+Validator.m */; }; + 5FCDD4292B7AC6A100EAF29F /* BranchInstallRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD37A2B7AC6A100EAF29F /* BranchInstallRequest.m */; }; + 5FCDD42A2B7AC6A100EAF29F /* BranchInstallRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD37A2B7AC6A100EAF29F /* BranchInstallRequest.m */; }; + 5FCDD42B2B7AC6A100EAF29F /* BranchInstallRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD37A2B7AC6A100EAF29F /* BranchInstallRequest.m */; }; + 5FCDD42C2B7AC6A100EAF29F /* BranchPluginSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD37B2B7AC6A100EAF29F /* BranchPluginSupport.m */; }; + 5FCDD42D2B7AC6A100EAF29F /* BranchPluginSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD37B2B7AC6A100EAF29F /* BranchPluginSupport.m */; }; + 5FCDD42E2B7AC6A100EAF29F /* BranchPluginSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD37B2B7AC6A100EAF29F /* BranchPluginSupport.m */; }; + 5FCDD42F2B7AC6A100EAF29F /* NSString+Branch.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD37C2B7AC6A100EAF29F /* NSString+Branch.m */; }; + 5FCDD4302B7AC6A100EAF29F /* NSString+Branch.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD37C2B7AC6A100EAF29F /* NSString+Branch.m */; }; + 5FCDD4312B7AC6A100EAF29F /* NSString+Branch.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD37C2B7AC6A100EAF29F /* NSString+Branch.m */; }; + 5FCDD4322B7AC6A100EAF29F /* BNCSystemObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD37D2B7AC6A100EAF29F /* BNCSystemObserver.m */; }; + 5FCDD4332B7AC6A100EAF29F /* BNCSystemObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD37D2B7AC6A100EAF29F /* BNCSystemObserver.m */; }; + 5FCDD4342B7AC6A100EAF29F /* BNCSystemObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD37D2B7AC6A100EAF29F /* BNCSystemObserver.m */; }; + 5FCDD4382B7AC6A100EAF29F /* BNCURLFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD37F2B7AC6A100EAF29F /* BNCURLFilter.m */; }; + 5FCDD4392B7AC6A100EAF29F /* BNCURLFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD37F2B7AC6A100EAF29F /* BNCURLFilter.m */; }; + 5FCDD43A2B7AC6A100EAF29F /* BNCURLFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD37F2B7AC6A100EAF29F /* BNCURLFilter.m */; }; + 5FCDD43B2B7AC6A100EAF29F /* BNCServerRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3802B7AC6A100EAF29F /* BNCServerRequest.m */; }; + 5FCDD43C2B7AC6A100EAF29F /* BNCServerRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3802B7AC6A100EAF29F /* BNCServerRequest.m */; }; + 5FCDD43D2B7AC6A100EAF29F /* BNCServerRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3802B7AC6A100EAF29F /* BNCServerRequest.m */; }; + 5FCDD43E2B7AC6A100EAF29F /* BNCNetworkInterface.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3812B7AC6A100EAF29F /* BNCNetworkInterface.m */; }; + 5FCDD43F2B7AC6A100EAF29F /* BNCNetworkInterface.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3812B7AC6A100EAF29F /* BNCNetworkInterface.m */; }; + 5FCDD4402B7AC6A100EAF29F /* BNCNetworkInterface.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3812B7AC6A100EAF29F /* BNCNetworkInterface.m */; }; + 5FCDD4412B7AC6A100EAF29F /* BNCPreferenceHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3822B7AC6A100EAF29F /* BNCPreferenceHelper.m */; }; + 5FCDD4422B7AC6A100EAF29F /* BNCPreferenceHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3822B7AC6A100EAF29F /* BNCPreferenceHelper.m */; }; + 5FCDD4432B7AC6A100EAF29F /* BNCPreferenceHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3822B7AC6A100EAF29F /* BNCPreferenceHelper.m */; }; + 5FCDD4442B7AC6A100EAF29F /* BNCConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3832B7AC6A100EAF29F /* BNCConfig.m */; }; + 5FCDD4452B7AC6A100EAF29F /* BNCConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3832B7AC6A100EAF29F /* BNCConfig.m */; }; + 5FCDD4462B7AC6A100EAF29F /* BNCConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3832B7AC6A100EAF29F /* BNCConfig.m */; }; + 5FCDD4472B7AC6A100EAF29F /* BranchConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3842B7AC6A100EAF29F /* BranchConstants.m */; }; + 5FCDD4482B7AC6A100EAF29F /* BranchConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3842B7AC6A100EAF29F /* BranchConstants.m */; }; + 5FCDD4492B7AC6A100EAF29F /* BranchConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3842B7AC6A100EAF29F /* BranchConstants.m */; }; + 5FCDD44A2B7AC6A100EAF29F /* BranchContentDiscoveryManifest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3852B7AC6A100EAF29F /* BranchContentDiscoveryManifest.m */; }; + 5FCDD44B2B7AC6A100EAF29F /* BranchContentDiscoveryManifest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3852B7AC6A100EAF29F /* BranchContentDiscoveryManifest.m */; }; + 5FCDD44C2B7AC6A100EAF29F /* BranchContentDiscoveryManifest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3852B7AC6A100EAF29F /* BranchContentDiscoveryManifest.m */; }; + 5FCDD44D2B7AC6A100EAF29F /* BranchSpotlightUrlRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3862B7AC6A100EAF29F /* BranchSpotlightUrlRequest.m */; }; + 5FCDD44E2B7AC6A100EAF29F /* BranchSpotlightUrlRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3862B7AC6A100EAF29F /* BranchSpotlightUrlRequest.m */; }; + 5FCDD44F2B7AC6A100EAF29F /* BranchSpotlightUrlRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3862B7AC6A100EAF29F /* BranchSpotlightUrlRequest.m */; }; + 5FCDD4532B7AC6A100EAF29F /* BranchContentDiscoverer.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3882B7AC6A100EAF29F /* BranchContentDiscoverer.m */; }; + 5FCDD4542B7AC6A100EAF29F /* BranchContentDiscoverer.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3882B7AC6A100EAF29F /* BranchContentDiscoverer.m */; }; + 5FCDD4552B7AC6A100EAF29F /* BranchContentDiscoverer.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3882B7AC6A100EAF29F /* BranchContentDiscoverer.m */; }; + 5FCDD4562B7AC6A100EAF29F /* BNCDeviceInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3892B7AC6A100EAF29F /* BNCDeviceInfo.m */; }; + 5FCDD4572B7AC6A100EAF29F /* BNCDeviceInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3892B7AC6A100EAF29F /* BNCDeviceInfo.m */; }; + 5FCDD4582B7AC6A100EAF29F /* BNCDeviceInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3892B7AC6A100EAF29F /* BNCDeviceInfo.m */; }; + 5FCDD4592B7AC6A100EAF29F /* BNCNetworkService.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD38A2B7AC6A100EAF29F /* BNCNetworkService.m */; }; + 5FCDD45A2B7AC6A100EAF29F /* BNCNetworkService.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD38A2B7AC6A100EAF29F /* BNCNetworkService.m */; }; + 5FCDD45B2B7AC6A100EAF29F /* BNCNetworkService.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD38A2B7AC6A100EAF29F /* BNCNetworkService.m */; }; + 5FCDD45C2B7AC6A100EAF29F /* BNCReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD38B2B7AC6A100EAF29F /* BNCReachability.m */; }; + 5FCDD45D2B7AC6A100EAF29F /* BNCReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD38B2B7AC6A100EAF29F /* BNCReachability.m */; }; + 5FCDD45E2B7AC6A100EAF29F /* BNCReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD38B2B7AC6A100EAF29F /* BNCReachability.m */; }; + 5FCDD45F2B7AC6A100EAF29F /* BNCRequestFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD38C2B7AC6A100EAF29F /* BNCRequestFactory.m */; }; + 5FCDD4602B7AC6A100EAF29F /* BNCRequestFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD38C2B7AC6A100EAF29F /* BNCRequestFactory.m */; }; + 5FCDD4612B7AC6A100EAF29F /* BNCRequestFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD38C2B7AC6A100EAF29F /* BNCRequestFactory.m */; }; + 5FCDD4622B7AC6A100EAF29F /* BNCReferringURLUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD38D2B7AC6A100EAF29F /* BNCReferringURLUtility.m */; }; + 5FCDD4632B7AC6A100EAF29F /* BNCReferringURLUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD38D2B7AC6A100EAF29F /* BNCReferringURLUtility.m */; }; + 5FCDD4642B7AC6A100EAF29F /* BNCReferringURLUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD38D2B7AC6A100EAF29F /* BNCReferringURLUtility.m */; }; + 5FCDD4652B7AC6A100EAF29F /* BNCProductCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD38E2B7AC6A100EAF29F /* BNCProductCategory.m */; }; + 5FCDD4662B7AC6A100EAF29F /* BNCProductCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD38E2B7AC6A100EAF29F /* BNCProductCategory.m */; }; + 5FCDD4672B7AC6A100EAF29F /* BNCProductCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD38E2B7AC6A100EAF29F /* BNCProductCategory.m */; }; + 5FCDD4682B7AC6A100EAF29F /* BNCCrashlyticsWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD38F2B7AC6A100EAF29F /* BNCCrashlyticsWrapper.m */; }; + 5FCDD4692B7AC6A100EAF29F /* BNCCrashlyticsWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD38F2B7AC6A100EAF29F /* BNCCrashlyticsWrapper.m */; }; + 5FCDD46A2B7AC6A100EAF29F /* BNCCrashlyticsWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD38F2B7AC6A100EAF29F /* BNCCrashlyticsWrapper.m */; }; + 5FCDD46B2B7AC6A100EAF29F /* BNCServerInterface.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3902B7AC6A100EAF29F /* BNCServerInterface.m */; }; + 5FCDD46C2B7AC6A100EAF29F /* BNCServerInterface.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3902B7AC6A100EAF29F /* BNCServerInterface.m */; }; + 5FCDD46D2B7AC6A100EAF29F /* BNCServerInterface.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3902B7AC6A100EAF29F /* BNCServerInterface.m */; }; + 5FCDD46E2B7AC6A100EAF29F /* BranchJsonConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3912B7AC6A100EAF29F /* BranchJsonConfig.m */; }; + 5FCDD46F2B7AC6A100EAF29F /* BranchJsonConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3912B7AC6A100EAF29F /* BranchJsonConfig.m */; }; + 5FCDD4702B7AC6A100EAF29F /* BranchJsonConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3912B7AC6A100EAF29F /* BranchJsonConfig.m */; }; + 5FCDD4712B7AC6A100EAF29F /* BranchLATDRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3922B7AC6A100EAF29F /* BranchLATDRequest.m */; }; + 5FCDD4722B7AC6A100EAF29F /* BranchLATDRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3922B7AC6A100EAF29F /* BranchLATDRequest.m */; }; + 5FCDD4732B7AC6A100EAF29F /* BranchLATDRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3922B7AC6A100EAF29F /* BranchLATDRequest.m */; }; + 5FCDD4742B7AC6A100EAF29F /* BNCPartnerParameters.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3932B7AC6A100EAF29F /* BNCPartnerParameters.m */; }; + 5FCDD4752B7AC6A100EAF29F /* BNCPartnerParameters.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3932B7AC6A100EAF29F /* BNCPartnerParameters.m */; }; + 5FCDD4762B7AC6A100EAF29F /* BNCPartnerParameters.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3932B7AC6A100EAF29F /* BNCPartnerParameters.m */; }; + 5FCDD4772B7AC6A100EAF29F /* BranchCSSearchableItemAttributeSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3942B7AC6A100EAF29F /* BranchCSSearchableItemAttributeSet.m */; }; + 5FCDD4782B7AC6A100EAF29F /* BranchCSSearchableItemAttributeSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3942B7AC6A100EAF29F /* BranchCSSearchableItemAttributeSet.m */; }; + 5FCDD47A2B7AC6A100EAF29F /* BranchActivityItemProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3952B7AC6A100EAF29F /* BranchActivityItemProvider.m */; }; + 5FCDD47B2B7AC6A100EAF29F /* BranchActivityItemProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3952B7AC6A100EAF29F /* BranchActivityItemProvider.m */; }; + 5FCDD47D2B7AC6A100EAF29F /* BranchQRCode.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3962B7AC6A100EAF29F /* BranchQRCode.m */; }; + 5FCDD47E2B7AC6A100EAF29F /* BranchQRCode.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3962B7AC6A100EAF29F /* BranchQRCode.m */; }; + 5FCDD47F2B7AC6A100EAF29F /* BranchQRCode.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3962B7AC6A100EAF29F /* BranchQRCode.m */; }; + 5FCDD4802B7AC6A100EAF29F /* BNCKeyChain.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3972B7AC6A100EAF29F /* BNCKeyChain.m */; }; + 5FCDD4812B7AC6A100EAF29F /* BNCKeyChain.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3972B7AC6A100EAF29F /* BNCKeyChain.m */; }; + 5FCDD4822B7AC6A100EAF29F /* BNCKeyChain.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3972B7AC6A100EAF29F /* BNCKeyChain.m */; }; + 5FCDD4832B7AC6A100EAF29F /* BNCLinkData.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3992B7AC6A100EAF29F /* BNCLinkData.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4842B7AC6A100EAF29F /* BNCLinkData.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3992B7AC6A100EAF29F /* BNCLinkData.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4852B7AC6A100EAF29F /* BNCLinkData.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3992B7AC6A100EAF29F /* BNCLinkData.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4862B7AC6A100EAF29F /* BranchDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD39A2B7AC6A100EAF29F /* BranchDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4872B7AC6A100EAF29F /* BranchDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD39A2B7AC6A100EAF29F /* BranchDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4882B7AC6A100EAF29F /* BranchDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD39A2B7AC6A100EAF29F /* BranchDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4892B7AC6A100EAF29F /* BranchQRCode.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD39B2B7AC6A100EAF29F /* BranchQRCode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD48A2B7AC6A100EAF29F /* BranchQRCode.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD39B2B7AC6A100EAF29F /* BranchQRCode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD48B2B7AC6A100EAF29F /* BranchQRCode.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD39B2B7AC6A100EAF29F /* BranchQRCode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD48C2B7AC6A100EAF29F /* BranchActivityItemProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD39C2B7AC6A100EAF29F /* BranchActivityItemProvider.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD48D2B7AC6A100EAF29F /* BranchActivityItemProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD39C2B7AC6A100EAF29F /* BranchActivityItemProvider.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD48E2B7AC6A100EAF29F /* BranchActivityItemProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD39C2B7AC6A100EAF29F /* BranchActivityItemProvider.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD48F2B7AC6A100EAF29F /* BranchCSSearchableItemAttributeSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD39D2B7AC6A100EAF29F /* BranchCSSearchableItemAttributeSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4902B7AC6A100EAF29F /* BranchCSSearchableItemAttributeSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD39D2B7AC6A100EAF29F /* BranchCSSearchableItemAttributeSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4912B7AC6A100EAF29F /* BranchCSSearchableItemAttributeSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD39D2B7AC6A100EAF29F /* BranchCSSearchableItemAttributeSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4922B7AC6A100EAF29F /* BranchLinkProperties.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD39E2B7AC6A100EAF29F /* BranchLinkProperties.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4932B7AC6A100EAF29F /* BranchLinkProperties.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD39E2B7AC6A100EAF29F /* BranchLinkProperties.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4942B7AC6A100EAF29F /* BranchLinkProperties.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD39E2B7AC6A100EAF29F /* BranchLinkProperties.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4982B7AC6A100EAF29F /* BNCCurrency.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3A02B7AC6A100EAF29F /* BNCCurrency.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4992B7AC6A100EAF29F /* BNCCurrency.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3A02B7AC6A100EAF29F /* BNCCurrency.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD49A2B7AC6A100EAF29F /* BNCCurrency.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3A02B7AC6A100EAF29F /* BNCCurrency.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD49B2B7AC6A100EAF29F /* BranchLastAttributedTouchData.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3A12B7AC6A100EAF29F /* BranchLastAttributedTouchData.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD49C2B7AC6A200EAF29F /* BranchLastAttributedTouchData.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3A12B7AC6A100EAF29F /* BranchLastAttributedTouchData.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD49D2B7AC6A200EAF29F /* BranchLastAttributedTouchData.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3A12B7AC6A100EAF29F /* BranchLastAttributedTouchData.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD49F2B7AC6A200EAF29F /* Branch.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3A22B7AC6A100EAF29F /* Branch.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4A02B7AC6A200EAF29F /* Branch.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3A22B7AC6A100EAF29F /* Branch.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4A12B7AC6A200EAF29F /* BNCServerResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3A32B7AC6A100EAF29F /* BNCServerResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4A22B7AC6A200EAF29F /* BNCServerResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3A32B7AC6A100EAF29F /* BNCServerResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4A32B7AC6A200EAF29F /* BNCServerResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3A32B7AC6A100EAF29F /* BNCServerResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4A42B7AC6A200EAF29F /* BNCCallbacks.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3A42B7AC6A100EAF29F /* BNCCallbacks.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4A52B7AC6A200EAF29F /* BNCCallbacks.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3A42B7AC6A100EAF29F /* BNCCallbacks.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4A62B7AC6A200EAF29F /* BNCCallbacks.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3A42B7AC6A100EAF29F /* BNCCallbacks.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4A72B7AC6A200EAF29F /* BranchShareLink.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3A52B7AC6A100EAF29F /* BranchShareLink.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4A82B7AC6A200EAF29F /* BranchShareLink.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3A52B7AC6A100EAF29F /* BranchShareLink.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4A92B7AC6A200EAF29F /* BranchShareLink.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3A52B7AC6A100EAF29F /* BranchShareLink.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4AA2B7AC6A200EAF29F /* BNCLinkCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3A62B7AC6A100EAF29F /* BNCLinkCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4AB2B7AC6A200EAF29F /* BNCLinkCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3A62B7AC6A100EAF29F /* BNCLinkCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4AC2B7AC6A200EAF29F /* BNCLinkCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3A62B7AC6A100EAF29F /* BNCLinkCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4AD2B7AC6A200EAF29F /* BNCInitSessionResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3A72B7AC6A100EAF29F /* BNCInitSessionResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4AE2B7AC6A200EAF29F /* BNCInitSessionResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3A72B7AC6A100EAF29F /* BNCInitSessionResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4AF2B7AC6A200EAF29F /* BNCInitSessionResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3A72B7AC6A100EAF29F /* BNCInitSessionResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4B02B7AC6A200EAF29F /* BranchEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3A82B7AC6A100EAF29F /* BranchEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4B12B7AC6A200EAF29F /* BranchEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3A82B7AC6A100EAF29F /* BranchEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4B22B7AC6A200EAF29F /* BranchEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3A82B7AC6A100EAF29F /* BranchEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4B32B7AC6A200EAF29F /* BNCNetworkServiceProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3A92B7AC6A100EAF29F /* BNCNetworkServiceProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4B42B7AC6A200EAF29F /* BNCNetworkServiceProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3A92B7AC6A100EAF29F /* BNCNetworkServiceProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4B52B7AC6A200EAF29F /* BNCNetworkServiceProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3A92B7AC6A100EAF29F /* BNCNetworkServiceProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4B62B7AC6A200EAF29F /* BNCServerRequestQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3AA2B7AC6A100EAF29F /* BNCServerRequestQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4B72B7AC6A200EAF29F /* BNCServerRequestQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3AA2B7AC6A100EAF29F /* BNCServerRequestQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4B82B7AC6A200EAF29F /* BNCServerRequestQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3AA2B7AC6A100EAF29F /* BNCServerRequestQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4B92B7AC6A200EAF29F /* BranchPasteControl.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3AB2B7AC6A100EAF29F /* BranchPasteControl.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4BA2B7AC6A200EAF29F /* BranchPasteControl.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3AB2B7AC6A100EAF29F /* BranchPasteControl.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4BB2B7AC6A200EAF29F /* BranchPasteControl.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3AB2B7AC6A100EAF29F /* BranchPasteControl.h */; }; + 5FCDD4BC2B7AC6A200EAF29F /* BranchUniversalObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3AC2B7AC6A100EAF29F /* BranchUniversalObject.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4BD2B7AC6A200EAF29F /* BranchUniversalObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3AC2B7AC6A100EAF29F /* BranchUniversalObject.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4BE2B7AC6A200EAF29F /* BranchUniversalObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3AC2B7AC6A100EAF29F /* BranchUniversalObject.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4BF2B7AC6A200EAF29F /* BNCServerRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3AD2B7AC6A100EAF29F /* BNCServerRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4C02B7AC6A200EAF29F /* BNCServerRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3AD2B7AC6A100EAF29F /* BNCServerRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4C12B7AC6A200EAF29F /* BNCServerRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3AD2B7AC6A100EAF29F /* BNCServerRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4C22B7AC6A200EAF29F /* BranchDeepLinkingController.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3AE2B7AC6A100EAF29F /* BranchDeepLinkingController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4C32B7AC6A200EAF29F /* BranchDeepLinkingController.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3AE2B7AC6A100EAF29F /* BranchDeepLinkingController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4C42B7AC6A200EAF29F /* BranchDeepLinkingController.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3AE2B7AC6A100EAF29F /* BranchDeepLinkingController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4C52B7AC6A200EAF29F /* BranchPluginSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3AF2B7AC6A100EAF29F /* BranchPluginSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4C62B7AC6A200EAF29F /* BranchPluginSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3AF2B7AC6A100EAF29F /* BranchPluginSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4C72B7AC6A200EAF29F /* BranchPluginSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3AF2B7AC6A100EAF29F /* BranchPluginSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4C82B7AC6A200EAF29F /* BranchScene.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3B02B7AC6A100EAF29F /* BranchScene.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4C92B7AC6A200EAF29F /* BranchScene.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3B02B7AC6A100EAF29F /* BranchScene.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4CA2B7AC6A200EAF29F /* BranchScene.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3B02B7AC6A100EAF29F /* BranchScene.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4CB2B7AC6A200EAF29F /* BNCPreferenceHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3B12B7AC6A100EAF29F /* BNCPreferenceHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4CC2B7AC6A200EAF29F /* BNCPreferenceHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3B12B7AC6A100EAF29F /* BNCPreferenceHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4CD2B7AC6A200EAF29F /* BNCPreferenceHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3B12B7AC6A100EAF29F /* BNCPreferenceHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4CE2B7AC6A200EAF29F /* BNCServerInterface.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3B22B7AC6A100EAF29F /* BNCServerInterface.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4CF2B7AC6A200EAF29F /* BNCServerInterface.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3B22B7AC6A100EAF29F /* BNCServerInterface.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4D02B7AC6A200EAF29F /* BNCServerInterface.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3B22B7AC6A100EAF29F /* BNCServerInterface.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4D12B7AC6A200EAF29F /* BNCProductCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3B32B7AC6A100EAF29F /* BNCProductCategory.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4D22B7AC6A200EAF29F /* BNCProductCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3B32B7AC6A100EAF29F /* BNCProductCategory.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4D32B7AC6A200EAF29F /* BNCProductCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3B32B7AC6A100EAF29F /* BNCProductCategory.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD4D42B7AC6A200EAF29F /* BNCKeyChain.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3B52B7AC6A100EAF29F /* BNCKeyChain.h */; }; + 5FCDD4D52B7AC6A200EAF29F /* BNCKeyChain.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3B52B7AC6A100EAF29F /* BNCKeyChain.h */; }; + 5FCDD4D62B7AC6A200EAF29F /* BNCKeyChain.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3B52B7AC6A100EAF29F /* BNCKeyChain.h */; }; + 5FCDD4D72B7AC6A200EAF29F /* BNCAppleReceipt.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3B62B7AC6A100EAF29F /* BNCAppleReceipt.h */; }; + 5FCDD4D82B7AC6A200EAF29F /* BNCAppleReceipt.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3B62B7AC6A100EAF29F /* BNCAppleReceipt.h */; }; + 5FCDD4D92B7AC6A200EAF29F /* BNCAppleReceipt.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3B62B7AC6A100EAF29F /* BNCAppleReceipt.h */; }; + 5FCDD4DA2B7AC6A200EAF29F /* BNCPasteboard.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3B72B7AC6A100EAF29F /* BNCPasteboard.h */; }; + 5FCDD4DB2B7AC6A200EAF29F /* BNCPasteboard.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3B72B7AC6A100EAF29F /* BNCPasteboard.h */; }; + 5FCDD4DC2B7AC6A200EAF29F /* BNCPasteboard.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3B72B7AC6A100EAF29F /* BNCPasteboard.h */; }; + 5FCDD4DD2B7AC6A200EAF29F /* BranchContentPathProperties.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3B82B7AC6A100EAF29F /* BranchContentPathProperties.h */; }; + 5FCDD4DE2B7AC6A200EAF29F /* BranchContentPathProperties.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3B82B7AC6A100EAF29F /* BranchContentPathProperties.h */; }; + 5FCDD4DF2B7AC6A200EAF29F /* BranchContentPathProperties.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3B82B7AC6A100EAF29F /* BranchContentPathProperties.h */; }; + 5FCDD4E02B7AC6A200EAF29F /* BNCSKAdNetwork.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3B92B7AC6A100EAF29F /* BNCSKAdNetwork.h */; }; + 5FCDD4E12B7AC6A200EAF29F /* BNCSKAdNetwork.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3B92B7AC6A100EAF29F /* BNCSKAdNetwork.h */; }; + 5FCDD4E22B7AC6A200EAF29F /* BNCSKAdNetwork.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3B92B7AC6A100EAF29F /* BNCSKAdNetwork.h */; }; + 5FCDD4E32B7AC6A200EAF29F /* BNCJSONUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3BA2B7AC6A100EAF29F /* BNCJSONUtility.h */; }; + 5FCDD4E42B7AC6A200EAF29F /* BNCJSONUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3BA2B7AC6A100EAF29F /* BNCJSONUtility.h */; }; + 5FCDD4E52B7AC6A200EAF29F /* BNCJSONUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3BA2B7AC6A100EAF29F /* BNCJSONUtility.h */; }; + 5FCDD4E62B7AC6A200EAF29F /* UIViewController+Branch.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3BB2B7AC6A100EAF29F /* UIViewController+Branch.h */; }; + 5FCDD4E72B7AC6A200EAF29F /* UIViewController+Branch.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3BB2B7AC6A100EAF29F /* UIViewController+Branch.h */; }; + 5FCDD4E82B7AC6A200EAF29F /* UIViewController+Branch.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3BB2B7AC6A100EAF29F /* UIViewController+Branch.h */; }; + 5FCDD4E92B7AC6A200EAF29F /* BNCAppGroupsData.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3BC2B7AC6A100EAF29F /* BNCAppGroupsData.h */; }; + 5FCDD4EA2B7AC6A200EAF29F /* BNCAppGroupsData.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3BC2B7AC6A100EAF29F /* BNCAppGroupsData.h */; }; + 5FCDD4EB2B7AC6A200EAF29F /* BNCAppGroupsData.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3BC2B7AC6A100EAF29F /* BNCAppGroupsData.h */; }; + 5FCDD4EF2B7AC6A200EAF29F /* BNCServerAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3BE2B7AC6A100EAF29F /* BNCServerAPI.h */; }; + 5FCDD4F02B7AC6A200EAF29F /* BNCServerAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3BE2B7AC6A100EAF29F /* BNCServerAPI.h */; }; + 5FCDD4F12B7AC6A200EAF29F /* BNCServerAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3BE2B7AC6A100EAF29F /* BNCServerAPI.h */; }; + 5FCDD4F22B7AC6A200EAF29F /* BNCSpotlightService.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3BF2B7AC6A100EAF29F /* BNCSpotlightService.h */; }; + 5FCDD4F32B7AC6A200EAF29F /* BNCSpotlightService.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3BF2B7AC6A100EAF29F /* BNCSpotlightService.h */; }; + 5FCDD4F42B7AC6A200EAF29F /* BNCSpotlightService.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3BF2B7AC6A100EAF29F /* BNCSpotlightService.h */; }; + 5FCDD4F52B7AC6A200EAF29F /* BNCEventUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3C02B7AC6A100EAF29F /* BNCEventUtils.h */; }; + 5FCDD4F62B7AC6A200EAF29F /* BNCEventUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3C02B7AC6A100EAF29F /* BNCEventUtils.h */; }; + 5FCDD4F72B7AC6A200EAF29F /* BNCEventUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3C02B7AC6A100EAF29F /* BNCEventUtils.h */; }; + 5FCDD4F82B7AC6A200EAF29F /* BNCCallbackMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3C12B7AC6A100EAF29F /* BNCCallbackMap.h */; }; + 5FCDD4F92B7AC6A200EAF29F /* BNCCallbackMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3C12B7AC6A100EAF29F /* BNCCallbackMap.h */; }; + 5FCDD4FA2B7AC6A200EAF29F /* BNCCallbackMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3C12B7AC6A100EAF29F /* BNCCallbackMap.h */; }; + 5FCDD4FB2B7AC6A200EAF29F /* BranchShortUrlSyncRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3C22B7AC6A100EAF29F /* BranchShortUrlSyncRequest.h */; }; + 5FCDD4FC2B7AC6A200EAF29F /* BranchShortUrlSyncRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3C22B7AC6A100EAF29F /* BranchShortUrlSyncRequest.h */; }; + 5FCDD4FD2B7AC6A200EAF29F /* BranchShortUrlSyncRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3C22B7AC6A100EAF29F /* BranchShortUrlSyncRequest.h */; }; + 5FCDD4FE2B7AC6A200EAF29F /* BNCQRCodeCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3C32B7AC6A100EAF29F /* BNCQRCodeCache.h */; }; + 5FCDD4FF2B7AC6A200EAF29F /* BNCQRCodeCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3C32B7AC6A100EAF29F /* BNCQRCodeCache.h */; }; + 5FCDD5002B7AC6A200EAF29F /* BNCQRCodeCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3C32B7AC6A100EAF29F /* BNCQRCodeCache.h */; }; + 5FCDD5012B7AC6A200EAF29F /* BranchOpenRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3C42B7AC6A100EAF29F /* BranchOpenRequest.h */; }; + 5FCDD5022B7AC6A300EAF29F /* BranchOpenRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3C42B7AC6A100EAF29F /* BranchOpenRequest.h */; }; + 5FCDD5032B7AC6A300EAF29F /* BranchOpenRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3C42B7AC6A100EAF29F /* BranchOpenRequest.h */; }; + 5FCDD5042B7AC6A300EAF29F /* BranchShortUrlRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3C52B7AC6A100EAF29F /* BranchShortUrlRequest.h */; }; + 5FCDD5052B7AC6A300EAF29F /* BranchShortUrlRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3C52B7AC6A100EAF29F /* BranchShortUrlRequest.h */; }; + 5FCDD5062B7AC6A300EAF29F /* BranchShortUrlRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3C52B7AC6A100EAF29F /* BranchShortUrlRequest.h */; }; + 5FCDD5072B7AC6A300EAF29F /* BNCUrlQueryParameter.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3C62B7AC6A100EAF29F /* BNCUrlQueryParameter.h */; }; + 5FCDD5082B7AC6A300EAF29F /* BNCUrlQueryParameter.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3C62B7AC6A100EAF29F /* BNCUrlQueryParameter.h */; }; + 5FCDD5092B7AC6A300EAF29F /* BNCUrlQueryParameter.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3C62B7AC6A100EAF29F /* BNCUrlQueryParameter.h */; }; + 5FCDD50A2B7AC6A300EAF29F /* BNCApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3C72B7AC6A100EAF29F /* BNCApplication.h */; }; + 5FCDD50B2B7AC6A300EAF29F /* BNCApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3C72B7AC6A100EAF29F /* BNCApplication.h */; }; + 5FCDD50C2B7AC6A300EAF29F /* BNCApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3C72B7AC6A100EAF29F /* BNCApplication.h */; }; + 5FCDD50D2B7AC6A300EAF29F /* NSMutableDictionary+Branch.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3C82B7AC6A100EAF29F /* NSMutableDictionary+Branch.h */; }; + 5FCDD50E2B7AC6A300EAF29F /* NSMutableDictionary+Branch.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3C82B7AC6A100EAF29F /* NSMutableDictionary+Branch.h */; }; + 5FCDD50F2B7AC6A300EAF29F /* NSMutableDictionary+Branch.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3C82B7AC6A100EAF29F /* NSMutableDictionary+Branch.h */; }; + 5FCDD5102B7AC6A300EAF29F /* BNCDeviceSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3C92B7AC6A100EAF29F /* BNCDeviceSystem.h */; }; + 5FCDD5112B7AC6A300EAF29F /* BNCDeviceSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3C92B7AC6A100EAF29F /* BNCDeviceSystem.h */; }; + 5FCDD5122B7AC6A300EAF29F /* BNCDeviceSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3C92B7AC6A100EAF29F /* BNCDeviceSystem.h */; }; + 5FCDD5132B7AC6A300EAF29F /* BNCUserAgentCollector.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3CA2B7AC6A100EAF29F /* BNCUserAgentCollector.h */; }; + 5FCDD5142B7AC6A300EAF29F /* BNCUserAgentCollector.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3CA2B7AC6A100EAF29F /* BNCUserAgentCollector.h */; }; + 5FCDD5152B7AC6A300EAF29F /* BNCUserAgentCollector.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3CA2B7AC6A100EAF29F /* BNCUserAgentCollector.h */; }; + 5FCDD5162B7AC6A300EAF29F /* BNCEncodingUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3CB2B7AC6A100EAF29F /* BNCEncodingUtils.h */; }; + 5FCDD5172B7AC6A300EAF29F /* BNCEncodingUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3CB2B7AC6A100EAF29F /* BNCEncodingUtils.h */; }; + 5FCDD5182B7AC6A300EAF29F /* BNCEncodingUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3CB2B7AC6A100EAF29F /* BNCEncodingUtils.h */; }; + 5FCDD5192B7AC6A300EAF29F /* NSError+Branch.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3CC2B7AC6A100EAF29F /* NSError+Branch.h */; }; + 5FCDD51A2B7AC6A300EAF29F /* NSError+Branch.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3CC2B7AC6A100EAF29F /* NSError+Branch.h */; }; + 5FCDD51B2B7AC6A300EAF29F /* NSError+Branch.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3CC2B7AC6A100EAF29F /* NSError+Branch.h */; }; + 5FCDD51C2B7AC6A300EAF29F /* BNCURLFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3CD2B7AC6A100EAF29F /* BNCURLFilter.h */; }; + 5FCDD51D2B7AC6A300EAF29F /* BNCURLFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3CD2B7AC6A100EAF29F /* BNCURLFilter.h */; }; + 5FCDD51E2B7AC6A300EAF29F /* BNCURLFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3CD2B7AC6A100EAF29F /* BNCURLFilter.h */; }; + 5FCDD51F2B7AC6A300EAF29F /* BNCNetworkInterface.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3CE2B7AC6A100EAF29F /* BNCNetworkInterface.h */; }; + 5FCDD5202B7AC6A300EAF29F /* BNCNetworkInterface.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3CE2B7AC6A100EAF29F /* BNCNetworkInterface.h */; }; + 5FCDD5212B7AC6A300EAF29F /* BNCNetworkInterface.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3CE2B7AC6A100EAF29F /* BNCNetworkInterface.h */; }; + 5FCDD5252B7AC6A300EAF29F /* BNCSystemObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3D02B7AC6A100EAF29F /* BNCSystemObserver.h */; }; + 5FCDD5262B7AC6A300EAF29F /* BNCSystemObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3D02B7AC6A100EAF29F /* BNCSystemObserver.h */; }; + 5FCDD5272B7AC6A300EAF29F /* BNCSystemObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3D02B7AC6A100EAF29F /* BNCSystemObserver.h */; }; + 5FCDD5282B7AC6A300EAF29F /* NSString+Branch.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3D12B7AC6A100EAF29F /* NSString+Branch.h */; }; + 5FCDD5292B7AC6A300EAF29F /* NSString+Branch.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3D12B7AC6A100EAF29F /* NSString+Branch.h */; }; + 5FCDD52A2B7AC6A300EAF29F /* NSString+Branch.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3D12B7AC6A100EAF29F /* NSString+Branch.h */; }; + 5FCDD52B2B7AC6A300EAF29F /* BranchInstallRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3D22B7AC6A100EAF29F /* BranchInstallRequest.h */; }; + 5FCDD52C2B7AC6A300EAF29F /* BranchInstallRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3D22B7AC6A100EAF29F /* BranchInstallRequest.h */; }; + 5FCDD52D2B7AC6A300EAF29F /* BranchInstallRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3D22B7AC6A100EAF29F /* BranchInstallRequest.h */; }; + 5FCDD52E2B7AC6A300EAF29F /* Branch+Validator.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3D32B7AC6A100EAF29F /* Branch+Validator.h */; }; + 5FCDD52F2B7AC6A300EAF29F /* Branch+Validator.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3D32B7AC6A100EAF29F /* Branch+Validator.h */; }; + 5FCDD5302B7AC6A300EAF29F /* Branch+Validator.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3D32B7AC6A100EAF29F /* Branch+Validator.h */; }; + 5FCDD5312B7AC6A300EAF29F /* BNCDeepLinkViewControllerInstance.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3D42B7AC6A100EAF29F /* BNCDeepLinkViewControllerInstance.h */; }; + 5FCDD5322B7AC6A300EAF29F /* BNCDeepLinkViewControllerInstance.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3D42B7AC6A100EAF29F /* BNCDeepLinkViewControllerInstance.h */; }; + 5FCDD5332B7AC6A300EAF29F /* BNCDeepLinkViewControllerInstance.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3D42B7AC6A100EAF29F /* BNCDeepLinkViewControllerInstance.h */; }; + 5FCDD5342B7AC6A300EAF29F /* BNCContentDiscoveryManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3D52B7AC6A100EAF29F /* BNCContentDiscoveryManager.h */; }; + 5FCDD5352B7AC6A300EAF29F /* BNCContentDiscoveryManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3D52B7AC6A100EAF29F /* BNCContentDiscoveryManager.h */; }; + 5FCDD5362B7AC6A300EAF29F /* BNCContentDiscoveryManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3D52B7AC6A100EAF29F /* BNCContentDiscoveryManager.h */; }; + 5FCDD5372B7AC6A300EAF29F /* BNCDeviceInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3D62B7AC6A100EAF29F /* BNCDeviceInfo.h */; }; + 5FCDD5382B7AC6A300EAF29F /* BNCDeviceInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3D62B7AC6A100EAF29F /* BNCDeviceInfo.h */; }; + 5FCDD5392B7AC6A300EAF29F /* BNCDeviceInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3D62B7AC6A100EAF29F /* BNCDeviceInfo.h */; }; + 5FCDD53D2B7AC6A300EAF29F /* BranchContentDiscoverer.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3D82B7AC6A100EAF29F /* BranchContentDiscoverer.h */; }; + 5FCDD53E2B7AC6A300EAF29F /* BranchContentDiscoverer.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3D82B7AC6A100EAF29F /* BranchContentDiscoverer.h */; }; + 5FCDD53F2B7AC6A300EAF29F /* BranchContentDiscoverer.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3D82B7AC6A100EAF29F /* BranchContentDiscoverer.h */; }; + 5FCDD5402B7AC6A300EAF29F /* BranchSpotlightUrlRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3D92B7AC6A100EAF29F /* BranchSpotlightUrlRequest.h */; }; + 5FCDD5412B7AC6A300EAF29F /* BranchSpotlightUrlRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3D92B7AC6A100EAF29F /* BranchSpotlightUrlRequest.h */; }; + 5FCDD5422B7AC6A300EAF29F /* BranchSpotlightUrlRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3D92B7AC6A100EAF29F /* BranchSpotlightUrlRequest.h */; }; + 5FCDD5432B7AC6A300EAF29F /* BranchContentDiscoveryManifest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3DA2B7AC6A100EAF29F /* BranchContentDiscoveryManifest.h */; }; + 5FCDD5442B7AC6A300EAF29F /* BranchContentDiscoveryManifest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3DA2B7AC6A100EAF29F /* BranchContentDiscoveryManifest.h */; }; + 5FCDD5452B7AC6A300EAF29F /* BranchContentDiscoveryManifest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3DA2B7AC6A100EAF29F /* BranchContentDiscoveryManifest.h */; }; + 5FCDD5462B7AC6A300EAF29F /* BNCConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3DB2B7AC6A100EAF29F /* BNCConfig.h */; }; + 5FCDD5472B7AC6A300EAF29F /* BNCConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3DB2B7AC6A100EAF29F /* BNCConfig.h */; }; + 5FCDD5482B7AC6A300EAF29F /* BNCConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3DB2B7AC6A100EAF29F /* BNCConfig.h */; }; + 5FCDD5492B7AC6A300EAF29F /* BranchConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3DC2B7AC6A100EAF29F /* BranchConstants.h */; }; + 5FCDD54A2B7AC6A300EAF29F /* BranchConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3DC2B7AC6A100EAF29F /* BranchConstants.h */; }; + 5FCDD54B2B7AC6A300EAF29F /* BranchConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3DC2B7AC6A100EAF29F /* BranchConstants.h */; }; + 5FCDD54C2B7AC6A300EAF29F /* BNCPartnerParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3DD2B7AC6A100EAF29F /* BNCPartnerParameters.h */; }; + 5FCDD54D2B7AC6A300EAF29F /* BNCPartnerParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3DD2B7AC6A100EAF29F /* BNCPartnerParameters.h */; }; + 5FCDD54E2B7AC6A300EAF29F /* BNCPartnerParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3DD2B7AC6A100EAF29F /* BNCPartnerParameters.h */; }; + 5FCDD54F2B7AC6A300EAF29F /* BranchJsonConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3DE2B7AC6A100EAF29F /* BranchJsonConfig.h */; }; + 5FCDD5502B7AC6A300EAF29F /* BranchJsonConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3DE2B7AC6A100EAF29F /* BranchJsonConfig.h */; }; + 5FCDD5512B7AC6A300EAF29F /* BranchJsonConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3DE2B7AC6A100EAF29F /* BranchJsonConfig.h */; }; + 5FCDD5522B7AC6A300EAF29F /* BranchLATDRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3DF2B7AC6A100EAF29F /* BranchLATDRequest.h */; }; + 5FCDD5532B7AC6A300EAF29F /* BranchLATDRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3DF2B7AC6A100EAF29F /* BranchLATDRequest.h */; }; + 5FCDD5542B7AC6A300EAF29F /* BranchLATDRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3DF2B7AC6A100EAF29F /* BranchLATDRequest.h */; }; + 5FCDD5552B7AC6A300EAF29F /* BNCCrashlyticsWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3E02B7AC6A100EAF29F /* BNCCrashlyticsWrapper.h */; }; + 5FCDD5562B7AC6A300EAF29F /* BNCCrashlyticsWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3E02B7AC6A100EAF29F /* BNCCrashlyticsWrapper.h */; }; + 5FCDD5572B7AC6A300EAF29F /* BNCCrashlyticsWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3E02B7AC6A100EAF29F /* BNCCrashlyticsWrapper.h */; }; + 5FCDD5582B7AC6A300EAF29F /* BNCRequestFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3E12B7AC6A100EAF29F /* BNCRequestFactory.h */; }; + 5FCDD5592B7AC6A300EAF29F /* BNCRequestFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3E12B7AC6A100EAF29F /* BNCRequestFactory.h */; }; + 5FCDD55A2B7AC6A300EAF29F /* BNCRequestFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3E12B7AC6A100EAF29F /* BNCRequestFactory.h */; }; + 5FCDD55B2B7AC6A300EAF29F /* BNCReferringURLUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3E22B7AC6A100EAF29F /* BNCReferringURLUtility.h */; }; + 5FCDD55C2B7AC6A300EAF29F /* BNCReferringURLUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3E22B7AC6A100EAF29F /* BNCReferringURLUtility.h */; }; + 5FCDD55D2B7AC6A300EAF29F /* BNCReferringURLUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3E22B7AC6A100EAF29F /* BNCReferringURLUtility.h */; }; + 5FCDD55E2B7AC6A300EAF29F /* BNCNetworkService.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3E32B7AC6A100EAF29F /* BNCNetworkService.h */; }; + 5FCDD55F2B7AC6A300EAF29F /* BNCNetworkService.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3E32B7AC6A100EAF29F /* BNCNetworkService.h */; }; + 5FCDD5602B7AC6A300EAF29F /* BNCNetworkService.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3E32B7AC6A100EAF29F /* BNCNetworkService.h */; }; + 5FCDD5612B7AC6A300EAF29F /* BNCReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3E42B7AC6A100EAF29F /* BNCReachability.h */; }; + 5FCDD5622B7AC6A300EAF29F /* BNCReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3E42B7AC6A100EAF29F /* BNCReachability.h */; }; + 5FCDD5632B7AC6A300EAF29F /* BNCReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3E42B7AC6A100EAF29F /* BNCReachability.h */; }; + 5FCDD5642B7AC6A300EAF29F /* BranchDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3E52B7AC6A100EAF29F /* BranchDelegate.m */; }; + 5FCDD5652B7AC6A300EAF29F /* BranchDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3E52B7AC6A100EAF29F /* BranchDelegate.m */; }; + 5FCDD5662B7AC6A300EAF29F /* BranchDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3E52B7AC6A100EAF29F /* BranchDelegate.m */; }; + 5FCDD5672B7AC6A300EAF29F /* BNCLinkData.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3E62B7AC6A100EAF29F /* BNCLinkData.m */; }; + 5FCDD5682B7AC6A400EAF29F /* BNCLinkData.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3E62B7AC6A100EAF29F /* BNCLinkData.m */; }; + 5FCDD5692B7AC6A400EAF29F /* BNCLinkData.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3E62B7AC6A100EAF29F /* BNCLinkData.m */; }; + 5FCDD56A2B7AC6A400EAF29F /* Branch.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3E72B7AC6A100EAF29F /* Branch.m */; }; + 5FCDD56B2B7AC6A400EAF29F /* Branch.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3E72B7AC6A100EAF29F /* Branch.m */; }; + 5FCDD56C2B7AC6A400EAF29F /* Branch.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3E72B7AC6A100EAF29F /* Branch.m */; }; + 5FCDD56D2B7AC6A400EAF29F /* BNCJSONUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3E82B7AC6A100EAF29F /* BNCJSONUtility.m */; }; + 5FCDD56E2B7AC6A400EAF29F /* BNCJSONUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3E82B7AC6A100EAF29F /* BNCJSONUtility.m */; }; + 5FCDD56F2B7AC6A400EAF29F /* BNCJSONUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3E82B7AC6A100EAF29F /* BNCJSONUtility.m */; }; + 5FCDD5702B7AC6A400EAF29F /* BNCCurrency.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3E92B7AC6A100EAF29F /* BNCCurrency.m */; }; + 5FCDD5712B7AC6A400EAF29F /* BNCCurrency.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3E92B7AC6A100EAF29F /* BNCCurrency.m */; }; + 5FCDD5722B7AC6A400EAF29F /* BNCCurrency.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3E92B7AC6A100EAF29F /* BNCCurrency.m */; }; + 5FCDD5732B7AC6A400EAF29F /* BranchLastAttributedTouchData.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3EA2B7AC6A100EAF29F /* BranchLastAttributedTouchData.m */; }; + 5FCDD5742B7AC6A400EAF29F /* BranchLastAttributedTouchData.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3EA2B7AC6A100EAF29F /* BranchLastAttributedTouchData.m */; }; + 5FCDD5752B7AC6A400EAF29F /* BranchLastAttributedTouchData.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3EA2B7AC6A100EAF29F /* BranchLastAttributedTouchData.m */; }; + 5FCDD5762B7AC6A400EAF29F /* BNCSKAdNetwork.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3EB2B7AC6A100EAF29F /* BNCSKAdNetwork.m */; }; + 5FCDD5772B7AC6A400EAF29F /* BNCSKAdNetwork.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3EB2B7AC6A100EAF29F /* BNCSKAdNetwork.m */; }; + 5FCDD5782B7AC6A400EAF29F /* BNCSKAdNetwork.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3EB2B7AC6A100EAF29F /* BNCSKAdNetwork.m */; }; + 5FCDD5792B7AC6A400EAF29F /* BranchContentPathProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3EC2B7AC6A100EAF29F /* BranchContentPathProperties.m */; }; + 5FCDD57A2B7AC6A400EAF29F /* BranchContentPathProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3EC2B7AC6A100EAF29F /* BranchContentPathProperties.m */; }; + 5FCDD57B2B7AC6A400EAF29F /* BranchContentPathProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3EC2B7AC6A100EAF29F /* BranchContentPathProperties.m */; }; + 5FCDD57C2B7AC6A400EAF29F /* BNCPasteboard.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3ED2B7AC6A100EAF29F /* BNCPasteboard.m */; }; + 5FCDD57D2B7AC6A400EAF29F /* BNCPasteboard.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3ED2B7AC6A100EAF29F /* BNCPasteboard.m */; }; + 5FCDD57E2B7AC6A400EAF29F /* BNCPasteboard.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3ED2B7AC6A100EAF29F /* BNCPasteboard.m */; }; + 5FCDD57F2B7AC6A400EAF29F /* BNCAppleReceipt.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3EE2B7AC6A100EAF29F /* BNCAppleReceipt.m */; }; + 5FCDD5802B7AC6A400EAF29F /* BNCAppleReceipt.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3EE2B7AC6A100EAF29F /* BNCAppleReceipt.m */; }; + 5FCDD5812B7AC6A400EAF29F /* BNCAppleReceipt.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3EE2B7AC6A100EAF29F /* BNCAppleReceipt.m */; }; + 5FCDD5822B7AC6A400EAF29F /* BranchLinkProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3EF2B7AC6A100EAF29F /* BranchLinkProperties.m */; }; + 5FCDD5832B7AC6A400EAF29F /* BranchLinkProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3EF2B7AC6A100EAF29F /* BranchLinkProperties.m */; }; + 5FCDD5842B7AC6A400EAF29F /* BranchLinkProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3EF2B7AC6A100EAF29F /* BranchLinkProperties.m */; }; + 5FCDD5852B7AC6A400EAF29F /* BNCInitSessionResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3F02B7AC6A100EAF29F /* BNCInitSessionResponse.m */; }; + 5FCDD5862B7AC6A400EAF29F /* BNCInitSessionResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3F02B7AC6A100EAF29F /* BNCInitSessionResponse.m */; }; + 5FCDD5872B7AC6A400EAF29F /* BNCInitSessionResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3F02B7AC6A100EAF29F /* BNCInitSessionResponse.m */; }; + 5FCDD5882B7AC6A400EAF29F /* BNCLinkCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3F12B7AC6A100EAF29F /* BNCLinkCache.m */; }; + 5FCDD5892B7AC6A400EAF29F /* BNCLinkCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3F12B7AC6A100EAF29F /* BNCLinkCache.m */; }; + 5FCDD58A2B7AC6A400EAF29F /* BNCLinkCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3F12B7AC6A100EAF29F /* BNCLinkCache.m */; }; + 5FCDD58B2B7AC6A400EAF29F /* BNCSpotlightService.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3F22B7AC6A100EAF29F /* BNCSpotlightService.m */; }; + 5FCDD58C2B7AC6A400EAF29F /* BNCSpotlightService.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3F22B7AC6A100EAF29F /* BNCSpotlightService.m */; }; + 5FCDD58E2B7AC6A400EAF29F /* BNCServerAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3F32B7AC6A100EAF29F /* BNCServerAPI.m */; }; + 5FCDD58F2B7AC6A400EAF29F /* BNCServerAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3F32B7AC6A100EAF29F /* BNCServerAPI.m */; }; + 5FCDD5902B7AC6A400EAF29F /* BNCServerAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3F32B7AC6A100EAF29F /* BNCServerAPI.m */; }; + 5FCDD5912B7AC6A400EAF29F /* BranchShareLink.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3F42B7AC6A100EAF29F /* BranchShareLink.m */; }; + 5FCDD5922B7AC6A400EAF29F /* BranchShareLink.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3F42B7AC6A100EAF29F /* BranchShareLink.m */; }; + 5FCDD5942B7AC6A400EAF29F /* UIViewController+Branch.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3F52B7AC6A100EAF29F /* UIViewController+Branch.m */; }; + 5FCDD5952B7AC6A400EAF29F /* UIViewController+Branch.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3F52B7AC6A100EAF29F /* UIViewController+Branch.m */; }; + 5FCDD5962B7AC6A400EAF29F /* UIViewController+Branch.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3F52B7AC6A100EAF29F /* UIViewController+Branch.m */; }; + 5FCDD5972B7AC6A400EAF29F /* BNCAppGroupsData.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3F62B7AC6A100EAF29F /* BNCAppGroupsData.m */; }; + 5FCDD5982B7AC6A400EAF29F /* BNCAppGroupsData.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3F62B7AC6A100EAF29F /* BNCAppGroupsData.m */; }; + 5FCDD5992B7AC6A400EAF29F /* BNCAppGroupsData.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3F62B7AC6A100EAF29F /* BNCAppGroupsData.m */; }; + 5FCDD59A2B7AC6A400EAF29F /* BNCServerResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3F72B7AC6A100EAF29F /* BNCServerResponse.m */; }; + 5FCDD59B2B7AC6A400EAF29F /* BNCServerResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3F72B7AC6A100EAF29F /* BNCServerResponse.m */; }; + 5FCDD59C2B7AC6A400EAF29F /* BNCServerResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3F72B7AC6A100EAF29F /* BNCServerResponse.m */; }; + 5FCDD59D2B7AC6A400EAF29F /* BranchEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3F82B7AC6A100EAF29F /* BranchEvent.m */; }; + 5FCDD59E2B7AC6A400EAF29F /* BranchEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3F82B7AC6A100EAF29F /* BranchEvent.m */; }; + 5FCDD59F2B7AC6A400EAF29F /* BranchEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3F82B7AC6A100EAF29F /* BranchEvent.m */; }; + 5FCDD5A02B7AC6A400EAF29F /* BranchShortUrlRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3F92B7AC6A100EAF29F /* BranchShortUrlRequest.m */; }; + 5FCDD5A12B7AC6A400EAF29F /* BranchShortUrlRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3F92B7AC6A100EAF29F /* BranchShortUrlRequest.m */; }; + 5FCDD5A22B7AC6A400EAF29F /* BranchShortUrlRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3F92B7AC6A100EAF29F /* BranchShortUrlRequest.m */; }; + 5FCDD5A32B7AC6A400EAF29F /* BranchOpenRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3FA2B7AC6A100EAF29F /* BranchOpenRequest.m */; }; + 5FCDD5A42B7AC6A400EAF29F /* BranchOpenRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3FA2B7AC6A100EAF29F /* BranchOpenRequest.m */; }; + 5FCDD5A52B7AC6A400EAF29F /* BranchOpenRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3FA2B7AC6A100EAF29F /* BranchOpenRequest.m */; }; + 5FCDD5A62B7AC6A400EAF29F /* BNCQRCodeCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3FB2B7AC6A100EAF29F /* BNCQRCodeCache.m */; }; + 5FCDD5A72B7AC6A400EAF29F /* BNCQRCodeCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3FB2B7AC6A100EAF29F /* BNCQRCodeCache.m */; }; + 5FCDD5A82B7AC6A400EAF29F /* BNCQRCodeCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3FB2B7AC6A100EAF29F /* BNCQRCodeCache.m */; }; + 5FCDD5A92B7AC6A400EAF29F /* BranchShortUrlSyncRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3FC2B7AC6A100EAF29F /* BranchShortUrlSyncRequest.m */; }; + 5FCDD5AA2B7AC6A400EAF29F /* BranchShortUrlSyncRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3FC2B7AC6A100EAF29F /* BranchShortUrlSyncRequest.m */; }; + 5FCDD5AB2B7AC6A400EAF29F /* BranchShortUrlSyncRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3FC2B7AC6A100EAF29F /* BranchShortUrlSyncRequest.m */; }; + 5FCDD5AC2B7AC6A400EAF29F /* BNCCallbackMap.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3FD2B7AC6A100EAF29F /* BNCCallbackMap.m */; }; + 5FCDD5AD2B7AC6A400EAF29F /* BNCCallbackMap.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3FD2B7AC6A100EAF29F /* BNCCallbackMap.m */; }; + 5FCDD5AE2B7AC6A400EAF29F /* BNCCallbackMap.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3FD2B7AC6A100EAF29F /* BNCCallbackMap.m */; }; + 5FCDD5AF2B7AC6A400EAF29F /* BNCEventUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3FE2B7AC6A100EAF29F /* BNCEventUtils.m */; }; + 5FCDD5B02B7AC6A400EAF29F /* BNCEventUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3FE2B7AC6A100EAF29F /* BNCEventUtils.m */; }; + 5FCDD5B12B7AC6A400EAF29F /* BNCEventUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3FE2B7AC6A100EAF29F /* BNCEventUtils.m */; }; + 5FCDD5B22B7AC89100EAF29F /* BranchSDK.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FF2AFDF28E7C22100393216 /* BranchSDK.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD5B32B7AC89200EAF29F /* BranchSDK.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FF2AFDF28E7C22100393216 /* BranchSDK.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FCDD5B42B7AC89200EAF29F /* BranchSDK.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FF2AFDF28E7C22100393216 /* BranchSDK.h */; settings = {ATTRIBUTES = (Public, ); }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -526,137 +530,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 5F1B240729148CBD003BEEC7 /* BranchPasteControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchPasteControl.h; sourceTree = ""; }; - 5F1B240829148CBD003BEEC7 /* BranchPasteControl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchPasteControl.m; sourceTree = ""; }; 5F22101D2894A0DB00C5B190 /* BranchSDK.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = BranchSDK.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5F2210272894A33E00C5B190 /* BranchShortUrlSyncRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchShortUrlSyncRequest.h; sourceTree = ""; }; - 5F2210282894A33E00C5B190 /* BNCDeviceSystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCDeviceSystem.h; sourceTree = ""; }; - 5F2210292894A33E00C5B190 /* BNCURLFilter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCURLFilter.m; sourceTree = ""; }; - 5F22102A2894A33E00C5B190 /* NSString+Branch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+Branch.m"; sourceTree = ""; }; - 5F22102B2894A33E00C5B190 /* BNCReachability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCReachability.h; sourceTree = ""; }; - 5F22102C2894A33E00C5B190 /* BranchInstallRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchInstallRequest.m; sourceTree = ""; }; - 5F22102F2894A33E00C5B190 /* BNCDeviceInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCDeviceInfo.h; sourceTree = ""; }; - 5F2210312894A33E00C5B190 /* BranchJsonConfig.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchJsonConfig.m; sourceTree = ""; }; - 5F2210322894A33E00C5B190 /* BNCSKAdNetwork.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCSKAdNetwork.h; sourceTree = ""; }; - 5F2210332894A33E00C5B190 /* BranchShortUrlSyncRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchShortUrlSyncRequest.m; sourceTree = ""; }; - 5F2210342894A33E00C5B190 /* BranchOpenRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchOpenRequest.m; sourceTree = ""; }; - 5F2210352894A33E00C5B190 /* NSMutableDictionary+Branch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSMutableDictionary+Branch.m"; sourceTree = ""; }; - 5F2210362894A33E00C5B190 /* BranchConstants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchConstants.m; sourceTree = ""; }; - 5F2210372894A33E00C5B190 /* BNCDeepLinkViewControllerInstance.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCDeepLinkViewControllerInstance.m; sourceTree = ""; }; - 5F2210382894A33E00C5B190 /* BranchLATDRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchLATDRequest.h; sourceTree = ""; }; - 5F2210392894A33E00C5B190 /* BNCJSONUtility.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCJSONUtility.h; sourceTree = ""; }; - 5F22103A2894A33E00C5B190 /* BranchCSSearchableItemAttributeSet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchCSSearchableItemAttributeSet.m; sourceTree = ""; }; - 5F22103B2894A33E00C5B190 /* BNCAppleReceipt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCAppleReceipt.h; sourceTree = ""; }; - 5F22103C2894A33E00C5B190 /* BNCReachability.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCReachability.m; sourceTree = ""; }; - 5F22103D2894A33E00C5B190 /* BNCSystemObserver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCSystemObserver.h; sourceTree = ""; }; - 5F22103E2894A33E00C5B190 /* BNCSpotlightService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCSpotlightService.m; sourceTree = ""; }; - 5F22103F2894A33E00C5B190 /* BranchSpotlightUrlRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchSpotlightUrlRequest.m; sourceTree = ""; }; - 5F2210402894A33E00C5B190 /* BNCPreferenceHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCPreferenceHelper.h; sourceTree = ""; }; - 5F2210412894A33E00C5B190 /* UIViewController+Branch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIViewController+Branch.m"; sourceTree = ""; }; - 5F2210422894A33E00C5B190 /* BranchLATDRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchLATDRequest.m; sourceTree = ""; }; - 5F2210432894A33E00C5B190 /* BranchEvent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchEvent.m; sourceTree = ""; }; - 5F2210442894A33E00C5B190 /* BranchCSSearchableItemAttributeSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchCSSearchableItemAttributeSet.h; sourceTree = ""; }; - 5F2210462894A33E00C5B190 /* BNCDeviceSystem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCDeviceSystem.m; sourceTree = ""; }; - 5F2210482894A33E00C5B190 /* BNCServerResponse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCServerResponse.m; sourceTree = ""; }; - 5F2210492894A33E00C5B190 /* BranchInstallRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchInstallRequest.h; sourceTree = ""; }; - 5F22104C2894A33F00C5B190 /* BNCThreads.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCThreads.h; sourceTree = ""; }; - 5F22104D2894A33F00C5B190 /* BNCNetworkService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCNetworkService.h; sourceTree = ""; }; - 5F22104E2894A33F00C5B190 /* BNCLinkCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCLinkCache.m; sourceTree = ""; }; - 5F22104F2894A33F00C5B190 /* BranchLinkProperties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchLinkProperties.h; sourceTree = ""; }; - 5F2210512894A33F00C5B190 /* BranchOpenRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchOpenRequest.h; sourceTree = ""; }; - 5F2210532894A33F00C5B190 /* BNCLinkData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCLinkData.h; sourceTree = ""; }; - 5F2210542894A33F00C5B190 /* BranchPluginSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchPluginSupport.h; sourceTree = ""; }; - 5F2210552894A33F00C5B190 /* BNCLinkCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCLinkCache.h; sourceTree = ""; }; - 5F2210562894A33F00C5B190 /* BNCCallbackMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCCallbackMap.h; sourceTree = ""; }; - 5F2210572894A33F00C5B190 /* BranchScene.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchScene.m; sourceTree = ""; }; - 5F2210582894A33F00C5B190 /* NSString+Branch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+Branch.h"; sourceTree = ""; }; - 5F2210592894A33F00C5B190 /* BNCNetworkServiceProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCNetworkServiceProtocol.h; sourceTree = ""; }; - 5F22105A2894A33F00C5B190 /* BranchJsonConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchJsonConfig.h; sourceTree = ""; }; - 5F22105B2894A33F00C5B190 /* BNCConfig.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCConfig.m; sourceTree = ""; }; - 5F22105C2894A33F00C5B190 /* BranchUniversalObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchUniversalObject.h; sourceTree = ""; }; - 5F22105D2894A33F00C5B190 /* BranchDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchDelegate.m; sourceTree = ""; }; - 5F22105E2894A33F00C5B190 /* BNCApplication.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCApplication.h; sourceTree = ""; }; - 5F2210612894A33F00C5B190 /* BranchScene.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchScene.h; sourceTree = ""; }; - 5F2210622894A33F00C5B190 /* BNCServerRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCServerRequest.m; sourceTree = ""; }; - 5F2210632894A33F00C5B190 /* BNCFieldDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCFieldDefines.h; sourceTree = ""; }; - 5F2210642894A33F00C5B190 /* BNCAppleReceipt.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCAppleReceipt.m; sourceTree = ""; }; - 5F2210662894A33F00C5B190 /* BNCServerResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCServerResponse.h; sourceTree = ""; }; - 5F2210672894A33F00C5B190 /* BranchContentDiscoveryManifest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchContentDiscoveryManifest.h; sourceTree = ""; }; - 5F2210692894A33F00C5B190 /* BranchDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchDelegate.h; sourceTree = ""; }; - 5F22106C2894A33F00C5B190 /* BranchShortUrlRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchShortUrlRequest.h; sourceTree = ""; }; - 5F22106D2894A33F00C5B190 /* BNCServerInterface.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCServerInterface.m; sourceTree = ""; }; - 5F22106E2894A33F00C5B190 /* BNCCrashlyticsWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCCrashlyticsWrapper.h; sourceTree = ""; }; - 5F2210702894A33F00C5B190 /* BranchContentDiscoverer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchContentDiscoverer.h; sourceTree = ""; }; - 5F2210712894A33F00C5B190 /* BranchContentDiscoverer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchContentDiscoverer.m; sourceTree = ""; }; - 5F2210722894A33F00C5B190 /* BNCLog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCLog.m; sourceTree = ""; }; - 5F2210732894A33F00C5B190 /* BNCContentDiscoveryManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCContentDiscoveryManager.h; sourceTree = ""; }; - 5F2210742894A33F00C5B190 /* BNCInitSessionResponse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCInitSessionResponse.m; sourceTree = ""; }; - 5F2210762894A33F00C5B190 /* BranchConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchConstants.h; sourceTree = ""; }; - 5F2210772894A33F00C5B190 /* BranchPluginSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchPluginSupport.m; sourceTree = ""; }; - 5F2210782894A33F00C5B190 /* BNCInitSessionResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCInitSessionResponse.h; sourceTree = ""; }; - 5F2210792894A33F00C5B190 /* BranchShortUrlRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchShortUrlRequest.m; sourceTree = ""; }; - 5F22107B2894A33F00C5B190 /* UIViewController+Branch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIViewController+Branch.h"; sourceTree = ""; }; - 5F22107C2894A33F00C5B190 /* BNCDeepLinkViewControllerInstance.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCDeepLinkViewControllerInstance.h; sourceTree = ""; }; - 5F22107D2894A33F00C5B190 /* BranchEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchEvent.h; sourceTree = ""; }; - 5F22107E2894A33F00C5B190 /* Branch+Validator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Branch+Validator.h"; sourceTree = ""; }; - 5F22107F2894A33F00C5B190 /* BNCPartnerParameters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCPartnerParameters.h; sourceTree = ""; }; - 5F2210802894A33F00C5B190 /* BranchContentPathProperties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchContentPathProperties.h; sourceTree = ""; }; - 5F2210812894A33F00C5B190 /* BNCUserAgentCollector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCUserAgentCollector.h; sourceTree = ""; }; - 5F2210822894A33F00C5B190 /* BranchShareLink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchShareLink.h; sourceTree = ""; }; - 5F2210832894A33F00C5B190 /* BranchLastAttributedTouchData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchLastAttributedTouchData.m; sourceTree = ""; }; - 5F2210842894A33F00C5B190 /* BNCSKAdNetwork.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCSKAdNetwork.m; sourceTree = ""; }; - 5F2210862894A33F00C5B190 /* BNCSystemObserver.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCSystemObserver.m; sourceTree = ""; }; - 5F2210882894A33F00C5B190 /* BNCAppGroupsData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCAppGroupsData.h; sourceTree = ""; }; - 5F2210892894A33F00C5B190 /* BranchContentDiscoveryManifest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchContentDiscoveryManifest.m; sourceTree = ""; }; - 5F22108A2894A33F00C5B190 /* BranchQRCode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchQRCode.m; sourceTree = ""; }; - 5F22108B2894A33F00C5B190 /* BNCQRCodeCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCQRCodeCache.h; sourceTree = ""; }; - 5F22108C2894A33F00C5B190 /* BNCEncodingUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCEncodingUtils.m; sourceTree = ""; }; - 5F22108D2894A33F00C5B190 /* BranchLinkProperties.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchLinkProperties.m; sourceTree = ""; }; - 5F22108E2894A34000C5B190 /* BNCJSONUtility.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCJSONUtility.m; sourceTree = ""; }; - 5F22108F2894A34000C5B190 /* BNCServerInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCServerInterface.h; sourceTree = ""; }; - 5F2210902894A34000C5B190 /* BranchSpotlightUrlRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchSpotlightUrlRequest.h; sourceTree = ""; }; - 5F2210922894A34000C5B190 /* Branch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Branch.m; sourceTree = ""; }; - 5F2210932894A34000C5B190 /* BNCKeyChain.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCKeyChain.m; sourceTree = ""; }; - 5F2210942894A34000C5B190 /* BranchUniversalObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchUniversalObject.m; sourceTree = ""; }; - 5F2210952894A34000C5B190 /* BNCCallbacks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCCallbacks.h; sourceTree = ""; }; - 5F2210962894A34000C5B190 /* Branch+Validator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "Branch+Validator.m"; sourceTree = ""; }; - 5F2210972894A34000C5B190 /* BNCCallbackMap.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCCallbackMap.m; sourceTree = ""; }; - 5F2210982894A34000C5B190 /* BranchQRCode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchQRCode.h; sourceTree = ""; }; - 5F2210992894A34000C5B190 /* NSMutableDictionary+Branch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSMutableDictionary+Branch.h"; sourceTree = ""; }; - 5F22109A2894A34000C5B190 /* BNCCrashlyticsWrapper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCCrashlyticsWrapper.m; sourceTree = ""; }; - 5F22109B2894A34000C5B190 /* BNCApplication.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCApplication.m; sourceTree = ""; }; - 5F22109D2894A34000C5B190 /* BNCServerRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCServerRequest.h; sourceTree = ""; }; - 5F22109E2894A34000C5B190 /* BranchActivityItemProvider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchActivityItemProvider.m; sourceTree = ""; }; - 5F22109F2894A34000C5B190 /* BranchContentPathProperties.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchContentPathProperties.m; sourceTree = ""; }; - 5F2210A12894A34000C5B190 /* BNCPreferenceHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCPreferenceHelper.m; sourceTree = ""; }; - 5F2210A32894A34000C5B190 /* BNCAppGroupsData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCAppGroupsData.m; sourceTree = ""; }; - 5F2210A42894A34000C5B190 /* BNCLinkData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCLinkData.m; sourceTree = ""; }; - 5F2210A62894A34000C5B190 /* BNCPasteboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCPasteboard.h; sourceTree = ""; }; - 5F2210A72894A34000C5B190 /* BNCURLFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCURLFilter.h; sourceTree = ""; }; - 5F2210A82894A34000C5B190 /* BNCServerRequestQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCServerRequestQueue.h; sourceTree = ""; }; - 5F2210A92894A34000C5B190 /* BNCConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCConfig.h; sourceTree = ""; }; - 5F2210AA2894A34000C5B190 /* BNCNetworkInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCNetworkInterface.h; sourceTree = ""; }; - 5F2210AB2894A34000C5B190 /* BranchDeepLinkingController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchDeepLinkingController.h; sourceTree = ""; }; - 5F2210AD2894A34000C5B190 /* BNCThreads.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCThreads.m; sourceTree = ""; }; - 5F2210AE2894A34000C5B190 /* NSError+Branch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSError+Branch.m"; sourceTree = ""; }; - 5F2210AF2894A34000C5B190 /* BNCServerRequestQueue.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCServerRequestQueue.m; sourceTree = ""; }; - 5F2210B02894A34000C5B190 /* BranchLastAttributedTouchData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchLastAttributedTouchData.h; sourceTree = ""; }; - 5F2210B12894A34000C5B190 /* BNCLog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCLog.h; sourceTree = ""; }; - 5F2210B22894A34000C5B190 /* BNCEncodingUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCEncodingUtils.h; sourceTree = ""; }; - 5F2210B32894A34000C5B190 /* BNCNetworkService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCNetworkService.m; sourceTree = ""; }; - 5F2210B42894A34000C5B190 /* BNCPartnerParameters.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCPartnerParameters.m; sourceTree = ""; }; - 5F2210B52894A34000C5B190 /* BNCKeyChain.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCKeyChain.h; sourceTree = ""; }; - 5F2210B62894A34000C5B190 /* BNCContentDiscoveryManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCContentDiscoveryManager.m; sourceTree = ""; }; - 5F2210B72894A34000C5B190 /* BNCQRCodeCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCQRCodeCache.m; sourceTree = ""; }; - 5F2210B82894A34000C5B190 /* Branch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Branch.h; sourceTree = ""; }; - 5F2210BB2894A34000C5B190 /* BNCDeviceInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCDeviceInfo.m; sourceTree = ""; }; - 5F2210BC2894A34000C5B190 /* NSError+Branch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSError+Branch.h"; sourceTree = ""; }; - 5F2210BD2894A34000C5B190 /* BNCNetworkInterface.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCNetworkInterface.m; sourceTree = ""; }; - 5F2210BE2894A34000C5B190 /* BNCSpotlightService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCSpotlightService.h; sourceTree = ""; }; - 5F2210BF2894A34000C5B190 /* BranchActivityItemProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchActivityItemProvider.h; sourceTree = ""; }; - 5F2210C02894A34000C5B190 /* BNCPasteboard.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCPasteboard.m; sourceTree = ""; }; - 5F2210C32894A34000C5B190 /* BNCUserAgentCollector.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCUserAgentCollector.m; sourceTree = ""; }; - 5F2210C42894A34000C5B190 /* BranchShareLink.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchShareLink.m; sourceTree = ""; }; 5F22116F2894A9C000C5B190 /* TestHost.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TestHost.app; sourceTree = BUILT_PRODUCTS_DIR; }; 5F2211712894A9C000C5B190 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 5F2211732894A9C000C5B190 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; @@ -670,8 +544,8 @@ 5F22118E2894A9C100C5B190 /* TestHostUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TestHostUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 5F2211922894A9C100C5B190 /* TestHostUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestHostUITests.swift; sourceTree = ""; }; 5F2211942894A9C100C5B190 /* TestHostUITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestHostUITestsLaunchTests.swift; sourceTree = ""; }; - 5F5139942AC21F6E004A3BA4 /* BNCRequestFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCRequestFactory.h; sourceTree = ""; }; - 5F5139952AC21F6E004A3BA4 /* BNCRequestFactory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCRequestFactory.m; sourceTree = ""; }; + 5F5FDA152B7DE2FE00F14A43 /* BranchLogger.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchLogger.m; sourceTree = ""; }; + 5F5FDA192B7DE31E00F14A43 /* BranchLogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchLogger.h; sourceTree = ""; }; 5F6DD2492894AF5E00AE9FB0 /* TestHost-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "TestHost-Bridging-Header.h"; sourceTree = ""; }; 5F6DD24A2894AF5E00AE9FB0 /* NSURLSession+Branch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSURLSession+Branch.m"; sourceTree = ""; }; 5F6DD24B2894AF5E00AE9FB0 /* NSURLSession+Branch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSURLSession+Branch.h"; sourceTree = ""; }; @@ -681,21 +555,149 @@ 5F73EC0228EDEAC200608601 /* build_xcframework_noidfa.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = build_xcframework_noidfa.sh; sourceTree = ""; }; 5F79038C28B5765D003144CD /* BranchSDK.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = BranchSDK.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 5FC446642ACCB96000FF1C87 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = ""; }; + 5FCDD36C2B7AC6A100EAF29F /* NSError+Branch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSError+Branch.m"; sourceTree = ""; }; + 5FCDD36D2B7AC6A100EAF29F /* BNCUserAgentCollector.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCUserAgentCollector.m; sourceTree = ""; }; + 5FCDD36E2B7AC6A100EAF29F /* BNCEncodingUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCEncodingUtils.m; sourceTree = ""; }; + 5FCDD36F2B7AC6A100EAF29F /* BranchUniversalObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchUniversalObject.m; sourceTree = ""; }; + 5FCDD3702B7AC6A100EAF29F /* BranchPasteControl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchPasteControl.m; sourceTree = ""; }; + 5FCDD3712B7AC6A100EAF29F /* BNCApplication.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCApplication.m; sourceTree = ""; }; + 5FCDD3722B7AC6A100EAF29F /* BNCDeviceSystem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCDeviceSystem.m; sourceTree = ""; }; + 5FCDD3732B7AC6A100EAF29F /* NSMutableDictionary+Branch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSMutableDictionary+Branch.m"; sourceTree = ""; }; + 5FCDD3742B7AC6A100EAF29F /* BNCServerRequestQueue.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCServerRequestQueue.m; sourceTree = ""; }; + 5FCDD3752B7AC6A100EAF29F /* BNCUrlQueryParameter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCUrlQueryParameter.m; sourceTree = ""; }; + 5FCDD3762B7AC6A100EAF29F /* BNCDeepLinkViewControllerInstance.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCDeepLinkViewControllerInstance.m; sourceTree = ""; }; + 5FCDD3772B7AC6A100EAF29F /* BranchScene.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchScene.m; sourceTree = ""; }; + 5FCDD3782B7AC6A100EAF29F /* BNCContentDiscoveryManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCContentDiscoveryManager.m; sourceTree = ""; }; + 5FCDD3792B7AC6A100EAF29F /* Branch+Validator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "Branch+Validator.m"; sourceTree = ""; }; + 5FCDD37A2B7AC6A100EAF29F /* BranchInstallRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchInstallRequest.m; sourceTree = ""; }; + 5FCDD37B2B7AC6A100EAF29F /* BranchPluginSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchPluginSupport.m; sourceTree = ""; }; + 5FCDD37C2B7AC6A100EAF29F /* NSString+Branch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+Branch.m"; sourceTree = ""; }; + 5FCDD37D2B7AC6A100EAF29F /* BNCSystemObserver.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCSystemObserver.m; sourceTree = ""; }; + 5FCDD37F2B7AC6A100EAF29F /* BNCURLFilter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCURLFilter.m; sourceTree = ""; }; + 5FCDD3802B7AC6A100EAF29F /* BNCServerRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCServerRequest.m; sourceTree = ""; }; + 5FCDD3812B7AC6A100EAF29F /* BNCNetworkInterface.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCNetworkInterface.m; sourceTree = ""; }; + 5FCDD3822B7AC6A100EAF29F /* BNCPreferenceHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCPreferenceHelper.m; sourceTree = ""; }; + 5FCDD3832B7AC6A100EAF29F /* BNCConfig.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCConfig.m; sourceTree = ""; }; + 5FCDD3842B7AC6A100EAF29F /* BranchConstants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchConstants.m; sourceTree = ""; }; + 5FCDD3852B7AC6A100EAF29F /* BranchContentDiscoveryManifest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchContentDiscoveryManifest.m; sourceTree = ""; }; + 5FCDD3862B7AC6A100EAF29F /* BranchSpotlightUrlRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchSpotlightUrlRequest.m; sourceTree = ""; }; + 5FCDD3882B7AC6A100EAF29F /* BranchContentDiscoverer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchContentDiscoverer.m; sourceTree = ""; }; + 5FCDD3892B7AC6A100EAF29F /* BNCDeviceInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCDeviceInfo.m; sourceTree = ""; }; + 5FCDD38A2B7AC6A100EAF29F /* BNCNetworkService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCNetworkService.m; sourceTree = ""; }; + 5FCDD38B2B7AC6A100EAF29F /* BNCReachability.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCReachability.m; sourceTree = ""; }; + 5FCDD38C2B7AC6A100EAF29F /* BNCRequestFactory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCRequestFactory.m; sourceTree = ""; }; + 5FCDD38D2B7AC6A100EAF29F /* BNCReferringURLUtility.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCReferringURLUtility.m; sourceTree = ""; }; + 5FCDD38E2B7AC6A100EAF29F /* BNCProductCategory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCProductCategory.m; sourceTree = ""; }; + 5FCDD38F2B7AC6A100EAF29F /* BNCCrashlyticsWrapper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCCrashlyticsWrapper.m; sourceTree = ""; }; + 5FCDD3902B7AC6A100EAF29F /* BNCServerInterface.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCServerInterface.m; sourceTree = ""; }; + 5FCDD3912B7AC6A100EAF29F /* BranchJsonConfig.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchJsonConfig.m; sourceTree = ""; }; + 5FCDD3922B7AC6A100EAF29F /* BranchLATDRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchLATDRequest.m; sourceTree = ""; }; + 5FCDD3932B7AC6A100EAF29F /* BNCPartnerParameters.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCPartnerParameters.m; sourceTree = ""; }; + 5FCDD3942B7AC6A100EAF29F /* BranchCSSearchableItemAttributeSet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchCSSearchableItemAttributeSet.m; sourceTree = ""; }; + 5FCDD3952B7AC6A100EAF29F /* BranchActivityItemProvider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchActivityItemProvider.m; sourceTree = ""; }; + 5FCDD3962B7AC6A100EAF29F /* BranchQRCode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchQRCode.m; sourceTree = ""; }; + 5FCDD3972B7AC6A100EAF29F /* BNCKeyChain.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCKeyChain.m; sourceTree = ""; }; + 5FCDD3992B7AC6A100EAF29F /* BNCLinkData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCLinkData.h; sourceTree = ""; }; + 5FCDD39A2B7AC6A100EAF29F /* BranchDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchDelegate.h; sourceTree = ""; }; + 5FCDD39B2B7AC6A100EAF29F /* BranchQRCode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchQRCode.h; sourceTree = ""; }; + 5FCDD39C2B7AC6A100EAF29F /* BranchActivityItemProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchActivityItemProvider.h; sourceTree = ""; }; + 5FCDD39D2B7AC6A100EAF29F /* BranchCSSearchableItemAttributeSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchCSSearchableItemAttributeSet.h; sourceTree = ""; }; + 5FCDD39E2B7AC6A100EAF29F /* BranchLinkProperties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchLinkProperties.h; sourceTree = ""; }; + 5FCDD39F2B7AC6A100EAF29F /* BranchSDK.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchSDK.h; sourceTree = ""; }; + 5FCDD3A02B7AC6A100EAF29F /* BNCCurrency.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCCurrency.h; sourceTree = ""; }; + 5FCDD3A12B7AC6A100EAF29F /* BranchLastAttributedTouchData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchLastAttributedTouchData.h; sourceTree = ""; }; + 5FCDD3A22B7AC6A100EAF29F /* Branch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Branch.h; sourceTree = ""; }; + 5FCDD3A32B7AC6A100EAF29F /* BNCServerResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCServerResponse.h; sourceTree = ""; }; + 5FCDD3A42B7AC6A100EAF29F /* BNCCallbacks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCCallbacks.h; sourceTree = ""; }; + 5FCDD3A52B7AC6A100EAF29F /* BranchShareLink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchShareLink.h; sourceTree = ""; }; + 5FCDD3A62B7AC6A100EAF29F /* BNCLinkCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCLinkCache.h; sourceTree = ""; }; + 5FCDD3A72B7AC6A100EAF29F /* BNCInitSessionResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCInitSessionResponse.h; sourceTree = ""; }; + 5FCDD3A82B7AC6A100EAF29F /* BranchEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchEvent.h; sourceTree = ""; }; + 5FCDD3A92B7AC6A100EAF29F /* BNCNetworkServiceProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCNetworkServiceProtocol.h; sourceTree = ""; }; + 5FCDD3AA2B7AC6A100EAF29F /* BNCServerRequestQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCServerRequestQueue.h; sourceTree = ""; }; + 5FCDD3AB2B7AC6A100EAF29F /* BranchPasteControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchPasteControl.h; sourceTree = ""; }; + 5FCDD3AC2B7AC6A100EAF29F /* BranchUniversalObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchUniversalObject.h; sourceTree = ""; }; + 5FCDD3AD2B7AC6A100EAF29F /* BNCServerRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCServerRequest.h; sourceTree = ""; }; + 5FCDD3AE2B7AC6A100EAF29F /* BranchDeepLinkingController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchDeepLinkingController.h; sourceTree = ""; }; + 5FCDD3AF2B7AC6A100EAF29F /* BranchPluginSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchPluginSupport.h; sourceTree = ""; }; + 5FCDD3B02B7AC6A100EAF29F /* BranchScene.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchScene.h; sourceTree = ""; }; + 5FCDD3B12B7AC6A100EAF29F /* BNCPreferenceHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCPreferenceHelper.h; sourceTree = ""; }; + 5FCDD3B22B7AC6A100EAF29F /* BNCServerInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCServerInterface.h; sourceTree = ""; }; + 5FCDD3B32B7AC6A100EAF29F /* BNCProductCategory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCProductCategory.h; sourceTree = ""; }; + 5FCDD3B52B7AC6A100EAF29F /* BNCKeyChain.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCKeyChain.h; sourceTree = ""; }; + 5FCDD3B62B7AC6A100EAF29F /* BNCAppleReceipt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCAppleReceipt.h; sourceTree = ""; }; + 5FCDD3B72B7AC6A100EAF29F /* BNCPasteboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCPasteboard.h; sourceTree = ""; }; + 5FCDD3B82B7AC6A100EAF29F /* BranchContentPathProperties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchContentPathProperties.h; sourceTree = ""; }; + 5FCDD3B92B7AC6A100EAF29F /* BNCSKAdNetwork.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCSKAdNetwork.h; sourceTree = ""; }; + 5FCDD3BA2B7AC6A100EAF29F /* BNCJSONUtility.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCJSONUtility.h; sourceTree = ""; }; + 5FCDD3BB2B7AC6A100EAF29F /* UIViewController+Branch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIViewController+Branch.h"; sourceTree = ""; }; + 5FCDD3BC2B7AC6A100EAF29F /* BNCAppGroupsData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCAppGroupsData.h; sourceTree = ""; }; + 5FCDD3BE2B7AC6A100EAF29F /* BNCServerAPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCServerAPI.h; sourceTree = ""; }; + 5FCDD3BF2B7AC6A100EAF29F /* BNCSpotlightService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCSpotlightService.h; sourceTree = ""; }; + 5FCDD3C02B7AC6A100EAF29F /* BNCEventUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCEventUtils.h; sourceTree = ""; }; + 5FCDD3C12B7AC6A100EAF29F /* BNCCallbackMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCCallbackMap.h; sourceTree = ""; }; + 5FCDD3C22B7AC6A100EAF29F /* BranchShortUrlSyncRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchShortUrlSyncRequest.h; sourceTree = ""; }; + 5FCDD3C32B7AC6A100EAF29F /* BNCQRCodeCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCQRCodeCache.h; sourceTree = ""; }; + 5FCDD3C42B7AC6A100EAF29F /* BranchOpenRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchOpenRequest.h; sourceTree = ""; }; + 5FCDD3C52B7AC6A100EAF29F /* BranchShortUrlRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchShortUrlRequest.h; sourceTree = ""; }; + 5FCDD3C62B7AC6A100EAF29F /* BNCUrlQueryParameter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCUrlQueryParameter.h; sourceTree = ""; }; + 5FCDD3C72B7AC6A100EAF29F /* BNCApplication.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCApplication.h; sourceTree = ""; }; + 5FCDD3C82B7AC6A100EAF29F /* NSMutableDictionary+Branch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSMutableDictionary+Branch.h"; sourceTree = ""; }; + 5FCDD3C92B7AC6A100EAF29F /* BNCDeviceSystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCDeviceSystem.h; sourceTree = ""; }; + 5FCDD3CA2B7AC6A100EAF29F /* BNCUserAgentCollector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCUserAgentCollector.h; sourceTree = ""; }; + 5FCDD3CB2B7AC6A100EAF29F /* BNCEncodingUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCEncodingUtils.h; sourceTree = ""; }; + 5FCDD3CC2B7AC6A100EAF29F /* NSError+Branch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSError+Branch.h"; sourceTree = ""; }; + 5FCDD3CD2B7AC6A100EAF29F /* BNCURLFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCURLFilter.h; sourceTree = ""; }; + 5FCDD3CE2B7AC6A100EAF29F /* BNCNetworkInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCNetworkInterface.h; sourceTree = ""; }; + 5FCDD3D02B7AC6A100EAF29F /* BNCSystemObserver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCSystemObserver.h; sourceTree = ""; }; + 5FCDD3D12B7AC6A100EAF29F /* NSString+Branch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+Branch.h"; sourceTree = ""; }; + 5FCDD3D22B7AC6A100EAF29F /* BranchInstallRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchInstallRequest.h; sourceTree = ""; }; + 5FCDD3D32B7AC6A100EAF29F /* Branch+Validator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Branch+Validator.h"; sourceTree = ""; }; + 5FCDD3D42B7AC6A100EAF29F /* BNCDeepLinkViewControllerInstance.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCDeepLinkViewControllerInstance.h; sourceTree = ""; }; + 5FCDD3D52B7AC6A100EAF29F /* BNCContentDiscoveryManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCContentDiscoveryManager.h; sourceTree = ""; }; + 5FCDD3D62B7AC6A100EAF29F /* BNCDeviceInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCDeviceInfo.h; sourceTree = ""; }; + 5FCDD3D82B7AC6A100EAF29F /* BranchContentDiscoverer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchContentDiscoverer.h; sourceTree = ""; }; + 5FCDD3D92B7AC6A100EAF29F /* BranchSpotlightUrlRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchSpotlightUrlRequest.h; sourceTree = ""; }; + 5FCDD3DA2B7AC6A100EAF29F /* BranchContentDiscoveryManifest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchContentDiscoveryManifest.h; sourceTree = ""; }; + 5FCDD3DB2B7AC6A100EAF29F /* BNCConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCConfig.h; sourceTree = ""; }; + 5FCDD3DC2B7AC6A100EAF29F /* BranchConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchConstants.h; sourceTree = ""; }; + 5FCDD3DD2B7AC6A100EAF29F /* BNCPartnerParameters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCPartnerParameters.h; sourceTree = ""; }; + 5FCDD3DE2B7AC6A100EAF29F /* BranchJsonConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchJsonConfig.h; sourceTree = ""; }; + 5FCDD3DF2B7AC6A100EAF29F /* BranchLATDRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchLATDRequest.h; sourceTree = ""; }; + 5FCDD3E02B7AC6A100EAF29F /* BNCCrashlyticsWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCCrashlyticsWrapper.h; sourceTree = ""; }; + 5FCDD3E12B7AC6A100EAF29F /* BNCRequestFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCRequestFactory.h; sourceTree = ""; }; + 5FCDD3E22B7AC6A100EAF29F /* BNCReferringURLUtility.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCReferringURLUtility.h; sourceTree = ""; }; + 5FCDD3E32B7AC6A100EAF29F /* BNCNetworkService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCNetworkService.h; sourceTree = ""; }; + 5FCDD3E42B7AC6A100EAF29F /* BNCReachability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCReachability.h; sourceTree = ""; }; + 5FCDD3E52B7AC6A100EAF29F /* BranchDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchDelegate.m; sourceTree = ""; }; + 5FCDD3E62B7AC6A100EAF29F /* BNCLinkData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCLinkData.m; sourceTree = ""; }; + 5FCDD3E72B7AC6A100EAF29F /* Branch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Branch.m; sourceTree = ""; }; + 5FCDD3E82B7AC6A100EAF29F /* BNCJSONUtility.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCJSONUtility.m; sourceTree = ""; }; + 5FCDD3E92B7AC6A100EAF29F /* BNCCurrency.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCCurrency.m; sourceTree = ""; }; + 5FCDD3EA2B7AC6A100EAF29F /* BranchLastAttributedTouchData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchLastAttributedTouchData.m; sourceTree = ""; }; + 5FCDD3EB2B7AC6A100EAF29F /* BNCSKAdNetwork.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCSKAdNetwork.m; sourceTree = ""; }; + 5FCDD3EC2B7AC6A100EAF29F /* BranchContentPathProperties.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchContentPathProperties.m; sourceTree = ""; }; + 5FCDD3ED2B7AC6A100EAF29F /* BNCPasteboard.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCPasteboard.m; sourceTree = ""; }; + 5FCDD3EE2B7AC6A100EAF29F /* BNCAppleReceipt.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCAppleReceipt.m; sourceTree = ""; }; + 5FCDD3EF2B7AC6A100EAF29F /* BranchLinkProperties.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchLinkProperties.m; sourceTree = ""; }; + 5FCDD3F02B7AC6A100EAF29F /* BNCInitSessionResponse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCInitSessionResponse.m; sourceTree = ""; }; + 5FCDD3F12B7AC6A100EAF29F /* BNCLinkCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCLinkCache.m; sourceTree = ""; }; + 5FCDD3F22B7AC6A100EAF29F /* BNCSpotlightService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCSpotlightService.m; sourceTree = ""; }; + 5FCDD3F32B7AC6A100EAF29F /* BNCServerAPI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCServerAPI.m; sourceTree = ""; }; + 5FCDD3F42B7AC6A100EAF29F /* BranchShareLink.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchShareLink.m; sourceTree = ""; }; + 5FCDD3F52B7AC6A100EAF29F /* UIViewController+Branch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIViewController+Branch.m"; sourceTree = ""; }; + 5FCDD3F62B7AC6A100EAF29F /* BNCAppGroupsData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCAppGroupsData.m; sourceTree = ""; }; + 5FCDD3F72B7AC6A100EAF29F /* BNCServerResponse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCServerResponse.m; sourceTree = ""; }; + 5FCDD3F82B7AC6A100EAF29F /* BranchEvent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchEvent.m; sourceTree = ""; }; + 5FCDD3F92B7AC6A100EAF29F /* BranchShortUrlRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchShortUrlRequest.m; sourceTree = ""; }; + 5FCDD3FA2B7AC6A100EAF29F /* BranchOpenRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchOpenRequest.m; sourceTree = ""; }; + 5FCDD3FB2B7AC6A100EAF29F /* BNCQRCodeCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCQRCodeCache.m; sourceTree = ""; }; + 5FCDD3FC2B7AC6A100EAF29F /* BranchShortUrlSyncRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchShortUrlSyncRequest.m; sourceTree = ""; }; + 5FCDD3FD2B7AC6A100EAF29F /* BNCCallbackMap.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCCallbackMap.m; sourceTree = ""; }; + 5FCDD3FE2B7AC6A100EAF29F /* BNCEventUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCEventUtils.m; sourceTree = ""; }; 5FF2AFDC28E7BF8A00393216 /* build_xcframework.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = build_xcframework.sh; sourceTree = ""; }; 5FF2AFDE28E7C22100393216 /* module.modulemap */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.module-map"; path = module.modulemap; sourceTree = ""; }; 5FF2AFDF28E7C22100393216 /* BranchSDK.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BranchSDK.h; sourceTree = ""; }; - C1B63C7929D2380000D1136D /* BNCUrlQueryParameter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BNCUrlQueryParameter.m; sourceTree = ""; }; - C1B63C7A29D2380000D1136D /* BNCReferringURLUtility.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BNCReferringURLUtility.m; sourceTree = ""; }; - C1B63C7B29D2380000D1136D /* BNCUrlQueryParameter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BNCUrlQueryParameter.h; sourceTree = ""; }; - C1B63C7C29D2380000D1136D /* BNCReferringURLUtility.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BNCReferringURLUtility.h; sourceTree = ""; }; - C1CDEF2D2A95717E0098524F /* BNCCurrency.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCCurrency.m; sourceTree = ""; }; - C1CDEF2E2A95717E0098524F /* BNCCurrency.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCCurrency.h; sourceTree = ""; }; - C1CDEF312A95718C0098524F /* BNCProductCategory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCProductCategory.m; sourceTree = ""; }; - C1CDEF322A95718C0098524F /* BNCProductCategory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCProductCategory.h; sourceTree = ""; }; - E761E91F29E61DA000E55C98 /* BNCEventUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCEventUtils.m; sourceTree = ""; }; - E761E92029E61DA000E55C98 /* BNCEventUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCEventUtils.h; sourceTree = ""; }; - E7653F042A9E737700C7C040 /* BNCServerAPI.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BNCServerAPI.m; sourceTree = ""; }; - E7653F082A9E73AA00C7C040 /* BNCServerAPI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BNCServerAPI.h; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -749,7 +751,7 @@ 5F2210132894A0DB00C5B190 = { isa = PBXGroup; children = ( - 5F22101F2894A0DB00C5B190 /* BranchSDK */, + 5FCDD36B2B7AC6A100EAF29F /* BranchSDK */, 5F2211702894A9C000C5B190 /* TestHost */, 5F2211872894A9C100C5B190 /* TestHostTests */, 5F2211912894A9C100C5B190 /* TestHostUITests */, @@ -772,157 +774,6 @@ name = Products; sourceTree = ""; }; - 5F22101F2894A0DB00C5B190 /* BranchSDK */ = { - isa = PBXGroup; - children = ( - 5F2210882894A33F00C5B190 /* BNCAppGroupsData.h */, - 5F2210A32894A34000C5B190 /* BNCAppGroupsData.m */, - 5F22103B2894A33E00C5B190 /* BNCAppleReceipt.h */, - 5F2210642894A33F00C5B190 /* BNCAppleReceipt.m */, - 5F22105E2894A33F00C5B190 /* BNCApplication.h */, - 5F22109B2894A34000C5B190 /* BNCApplication.m */, - 5F2210562894A33F00C5B190 /* BNCCallbackMap.h */, - 5F2210972894A34000C5B190 /* BNCCallbackMap.m */, - 5F2210952894A34000C5B190 /* BNCCallbacks.h */, - 5F2210A92894A34000C5B190 /* BNCConfig.h */, - 5F22105B2894A33F00C5B190 /* BNCConfig.m */, - 5F2210732894A33F00C5B190 /* BNCContentDiscoveryManager.h */, - 5F2210B62894A34000C5B190 /* BNCContentDiscoveryManager.m */, - 5F22106E2894A33F00C5B190 /* BNCCrashlyticsWrapper.h */, - 5F22109A2894A34000C5B190 /* BNCCrashlyticsWrapper.m */, - C1CDEF2E2A95717E0098524F /* BNCCurrency.h */, - C1CDEF2D2A95717E0098524F /* BNCCurrency.m */, - 5F22107C2894A33F00C5B190 /* BNCDeepLinkViewControllerInstance.h */, - 5F2210372894A33E00C5B190 /* BNCDeepLinkViewControllerInstance.m */, - 5F22102F2894A33E00C5B190 /* BNCDeviceInfo.h */, - 5F2210BB2894A34000C5B190 /* BNCDeviceInfo.m */, - 5F2210282894A33E00C5B190 /* BNCDeviceSystem.h */, - 5F2210462894A33E00C5B190 /* BNCDeviceSystem.m */, - 5F2210B22894A34000C5B190 /* BNCEncodingUtils.h */, - 5F22108C2894A33F00C5B190 /* BNCEncodingUtils.m */, - E761E92029E61DA000E55C98 /* BNCEventUtils.h */, - E761E91F29E61DA000E55C98 /* BNCEventUtils.m */, - 5F2210632894A33F00C5B190 /* BNCFieldDefines.h */, - 5F2210782894A33F00C5B190 /* BNCInitSessionResponse.h */, - 5F2210742894A33F00C5B190 /* BNCInitSessionResponse.m */, - 5F2210392894A33E00C5B190 /* BNCJSONUtility.h */, - 5F22108E2894A34000C5B190 /* BNCJSONUtility.m */, - 5F2210B52894A34000C5B190 /* BNCKeyChain.h */, - 5F2210932894A34000C5B190 /* BNCKeyChain.m */, - 5F2210552894A33F00C5B190 /* BNCLinkCache.h */, - 5F22104E2894A33F00C5B190 /* BNCLinkCache.m */, - 5F2210532894A33F00C5B190 /* BNCLinkData.h */, - 5F2210A42894A34000C5B190 /* BNCLinkData.m */, - 5F2210B12894A34000C5B190 /* BNCLog.h */, - 5F2210722894A33F00C5B190 /* BNCLog.m */, - 5F2210AA2894A34000C5B190 /* BNCNetworkInterface.h */, - 5F2210BD2894A34000C5B190 /* BNCNetworkInterface.m */, - 5F22104D2894A33F00C5B190 /* BNCNetworkService.h */, - 5F2210B32894A34000C5B190 /* BNCNetworkService.m */, - 5F2210592894A33F00C5B190 /* BNCNetworkServiceProtocol.h */, - 5F22107F2894A33F00C5B190 /* BNCPartnerParameters.h */, - 5F2210B42894A34000C5B190 /* BNCPartnerParameters.m */, - 5F2210A62894A34000C5B190 /* BNCPasteboard.h */, - 5F2210C02894A34000C5B190 /* BNCPasteboard.m */, - 5F2210402894A33E00C5B190 /* BNCPreferenceHelper.h */, - 5F2210A12894A34000C5B190 /* BNCPreferenceHelper.m */, - C1CDEF322A95718C0098524F /* BNCProductCategory.h */, - C1CDEF312A95718C0098524F /* BNCProductCategory.m */, - 5F22108B2894A33F00C5B190 /* BNCQRCodeCache.h */, - 5F2210B72894A34000C5B190 /* BNCQRCodeCache.m */, - 5F22102B2894A33E00C5B190 /* BNCReachability.h */, - 5F22103C2894A33E00C5B190 /* BNCReachability.m */, - C1B63C7C29D2380000D1136D /* BNCReferringURLUtility.h */, - C1B63C7A29D2380000D1136D /* BNCReferringURLUtility.m */, - 5F5139942AC21F6E004A3BA4 /* BNCRequestFactory.h */, - 5F5139952AC21F6E004A3BA4 /* BNCRequestFactory.m */, - E7653F082A9E73AA00C7C040 /* BNCServerAPI.h */, - E7653F042A9E737700C7C040 /* BNCServerAPI.m */, - 5F22108F2894A34000C5B190 /* BNCServerInterface.h */, - 5F22106D2894A33F00C5B190 /* BNCServerInterface.m */, - 5F22109D2894A34000C5B190 /* BNCServerRequest.h */, - 5F2210622894A33F00C5B190 /* BNCServerRequest.m */, - 5F2210A82894A34000C5B190 /* BNCServerRequestQueue.h */, - 5F2210AF2894A34000C5B190 /* BNCServerRequestQueue.m */, - 5F2210662894A33F00C5B190 /* BNCServerResponse.h */, - 5F2210482894A33E00C5B190 /* BNCServerResponse.m */, - 5F2210322894A33E00C5B190 /* BNCSKAdNetwork.h */, - 5F2210842894A33F00C5B190 /* BNCSKAdNetwork.m */, - 5F2210BE2894A34000C5B190 /* BNCSpotlightService.h */, - 5F22103E2894A33E00C5B190 /* BNCSpotlightService.m */, - 5F22103D2894A33E00C5B190 /* BNCSystemObserver.h */, - 5F2210862894A33F00C5B190 /* BNCSystemObserver.m */, - 5F22104C2894A33F00C5B190 /* BNCThreads.h */, - 5F2210AD2894A34000C5B190 /* BNCThreads.m */, - 5F2210A72894A34000C5B190 /* BNCURLFilter.h */, - 5F2210292894A33E00C5B190 /* BNCURLFilter.m */, - C1B63C7B29D2380000D1136D /* BNCUrlQueryParameter.h */, - C1B63C7929D2380000D1136D /* BNCUrlQueryParameter.m */, - 5F2210812894A33F00C5B190 /* BNCUserAgentCollector.h */, - 5F2210C32894A34000C5B190 /* BNCUserAgentCollector.m */, - 5F2210B82894A34000C5B190 /* Branch.h */, - 5F2210922894A34000C5B190 /* Branch.m */, - 5F22107E2894A33F00C5B190 /* Branch+Validator.h */, - 5F2210962894A34000C5B190 /* Branch+Validator.m */, - 5F2210BF2894A34000C5B190 /* BranchActivityItemProvider.h */, - 5F22109E2894A34000C5B190 /* BranchActivityItemProvider.m */, - 5F2210762894A33F00C5B190 /* BranchConstants.h */, - 5F2210362894A33E00C5B190 /* BranchConstants.m */, - 5F2210702894A33F00C5B190 /* BranchContentDiscoverer.h */, - 5F2210712894A33F00C5B190 /* BranchContentDiscoverer.m */, - 5F2210672894A33F00C5B190 /* BranchContentDiscoveryManifest.h */, - 5F2210892894A33F00C5B190 /* BranchContentDiscoveryManifest.m */, - 5F2210802894A33F00C5B190 /* BranchContentPathProperties.h */, - 5F22109F2894A34000C5B190 /* BranchContentPathProperties.m */, - 5F2210442894A33E00C5B190 /* BranchCSSearchableItemAttributeSet.h */, - 5F22103A2894A33E00C5B190 /* BranchCSSearchableItemAttributeSet.m */, - 5F2210AB2894A34000C5B190 /* BranchDeepLinkingController.h */, - 5F2210692894A33F00C5B190 /* BranchDelegate.h */, - 5F22105D2894A33F00C5B190 /* BranchDelegate.m */, - 5F22107D2894A33F00C5B190 /* BranchEvent.h */, - 5F2210432894A33E00C5B190 /* BranchEvent.m */, - 5F2210492894A33E00C5B190 /* BranchInstallRequest.h */, - 5F22102C2894A33E00C5B190 /* BranchInstallRequest.m */, - 5F22105A2894A33F00C5B190 /* BranchJsonConfig.h */, - 5F2210312894A33E00C5B190 /* BranchJsonConfig.m */, - 5F2210B02894A34000C5B190 /* BranchLastAttributedTouchData.h */, - 5F2210832894A33F00C5B190 /* BranchLastAttributedTouchData.m */, - 5F2210382894A33E00C5B190 /* BranchLATDRequest.h */, - 5F2210422894A33E00C5B190 /* BranchLATDRequest.m */, - 5F22104F2894A33F00C5B190 /* BranchLinkProperties.h */, - 5F22108D2894A33F00C5B190 /* BranchLinkProperties.m */, - 5F2210512894A33F00C5B190 /* BranchOpenRequest.h */, - 5F2210342894A33E00C5B190 /* BranchOpenRequest.m */, - 5F1B240729148CBD003BEEC7 /* BranchPasteControl.h */, - 5F1B240829148CBD003BEEC7 /* BranchPasteControl.m */, - 5F2210542894A33F00C5B190 /* BranchPluginSupport.h */, - 5F2210772894A33F00C5B190 /* BranchPluginSupport.m */, - 5F2210982894A34000C5B190 /* BranchQRCode.h */, - 5F22108A2894A33F00C5B190 /* BranchQRCode.m */, - 5F2210612894A33F00C5B190 /* BranchScene.h */, - 5F2210572894A33F00C5B190 /* BranchScene.m */, - 5F2210822894A33F00C5B190 /* BranchShareLink.h */, - 5F2210C42894A34000C5B190 /* BranchShareLink.m */, - 5F22106C2894A33F00C5B190 /* BranchShortUrlRequest.h */, - 5F2210792894A33F00C5B190 /* BranchShortUrlRequest.m */, - 5F2210272894A33E00C5B190 /* BranchShortUrlSyncRequest.h */, - 5F2210332894A33E00C5B190 /* BranchShortUrlSyncRequest.m */, - 5F2210902894A34000C5B190 /* BranchSpotlightUrlRequest.h */, - 5F22103F2894A33E00C5B190 /* BranchSpotlightUrlRequest.m */, - 5F22105C2894A33F00C5B190 /* BranchUniversalObject.h */, - 5F2210942894A34000C5B190 /* BranchUniversalObject.m */, - 5F2210BC2894A34000C5B190 /* NSError+Branch.h */, - 5F2210AE2894A34000C5B190 /* NSError+Branch.m */, - 5F2210992894A34000C5B190 /* NSMutableDictionary+Branch.h */, - 5F2210352894A33E00C5B190 /* NSMutableDictionary+Branch.m */, - 5F2210582894A33F00C5B190 /* NSString+Branch.h */, - 5F22102A2894A33E00C5B190 /* NSString+Branch.m */, - 5F22107B2894A33F00C5B190 /* UIViewController+Branch.h */, - 5F2210412894A33E00C5B190 /* UIViewController+Branch.m */, - ); - path = BranchSDK; - sourceTree = ""; - }; 5F2211702894A9C000C5B190 /* TestHost */ = { isa = PBXGroup; children = ( @@ -957,6 +808,172 @@ path = TestHostUITests; sourceTree = ""; }; + 5FCDD36B2B7AC6A100EAF29F /* BranchSDK */ = { + isa = PBXGroup; + children = ( + 5FCDD3F62B7AC6A100EAF29F /* BNCAppGroupsData.m */, + 5FCDD3EE2B7AC6A100EAF29F /* BNCAppleReceipt.m */, + 5FCDD3712B7AC6A100EAF29F /* BNCApplication.m */, + 5FCDD3FD2B7AC6A100EAF29F /* BNCCallbackMap.m */, + 5FCDD3832B7AC6A100EAF29F /* BNCConfig.m */, + 5FCDD3782B7AC6A100EAF29F /* BNCContentDiscoveryManager.m */, + 5FCDD38F2B7AC6A100EAF29F /* BNCCrashlyticsWrapper.m */, + 5FCDD3E92B7AC6A100EAF29F /* BNCCurrency.m */, + 5FCDD3762B7AC6A100EAF29F /* BNCDeepLinkViewControllerInstance.m */, + 5FCDD3892B7AC6A100EAF29F /* BNCDeviceInfo.m */, + 5FCDD3722B7AC6A100EAF29F /* BNCDeviceSystem.m */, + 5FCDD36E2B7AC6A100EAF29F /* BNCEncodingUtils.m */, + 5FCDD3FE2B7AC6A100EAF29F /* BNCEventUtils.m */, + 5FCDD3F02B7AC6A100EAF29F /* BNCInitSessionResponse.m */, + 5FCDD3E82B7AC6A100EAF29F /* BNCJSONUtility.m */, + 5FCDD3972B7AC6A100EAF29F /* BNCKeyChain.m */, + 5FCDD3F12B7AC6A100EAF29F /* BNCLinkCache.m */, + 5FCDD3E62B7AC6A100EAF29F /* BNCLinkData.m */, + 5FCDD3812B7AC6A100EAF29F /* BNCNetworkInterface.m */, + 5FCDD38A2B7AC6A100EAF29F /* BNCNetworkService.m */, + 5FCDD3932B7AC6A100EAF29F /* BNCPartnerParameters.m */, + 5FCDD3ED2B7AC6A100EAF29F /* BNCPasteboard.m */, + 5FCDD3822B7AC6A100EAF29F /* BNCPreferenceHelper.m */, + 5FCDD38E2B7AC6A100EAF29F /* BNCProductCategory.m */, + 5FCDD3FB2B7AC6A100EAF29F /* BNCQRCodeCache.m */, + 5FCDD38B2B7AC6A100EAF29F /* BNCReachability.m */, + 5FCDD38D2B7AC6A100EAF29F /* BNCReferringURLUtility.m */, + 5FCDD38C2B7AC6A100EAF29F /* BNCRequestFactory.m */, + 5FCDD3F32B7AC6A100EAF29F /* BNCServerAPI.m */, + 5FCDD3902B7AC6A100EAF29F /* BNCServerInterface.m */, + 5FCDD3802B7AC6A100EAF29F /* BNCServerRequest.m */, + 5FCDD3742B7AC6A100EAF29F /* BNCServerRequestQueue.m */, + 5FCDD3F72B7AC6A100EAF29F /* BNCServerResponse.m */, + 5FCDD3EB2B7AC6A100EAF29F /* BNCSKAdNetwork.m */, + 5FCDD3F22B7AC6A100EAF29F /* BNCSpotlightService.m */, + 5FCDD37D2B7AC6A100EAF29F /* BNCSystemObserver.m */, + 5FCDD37F2B7AC6A100EAF29F /* BNCURLFilter.m */, + 5FCDD3752B7AC6A100EAF29F /* BNCUrlQueryParameter.m */, + 5FCDD36D2B7AC6A100EAF29F /* BNCUserAgentCollector.m */, + 5FCDD3E72B7AC6A100EAF29F /* Branch.m */, + 5FCDD3792B7AC6A100EAF29F /* Branch+Validator.m */, + 5FCDD3952B7AC6A100EAF29F /* BranchActivityItemProvider.m */, + 5FCDD3842B7AC6A100EAF29F /* BranchConstants.m */, + 5FCDD3882B7AC6A100EAF29F /* BranchContentDiscoverer.m */, + 5FCDD3852B7AC6A100EAF29F /* BranchContentDiscoveryManifest.m */, + 5FCDD3EC2B7AC6A100EAF29F /* BranchContentPathProperties.m */, + 5FCDD3942B7AC6A100EAF29F /* BranchCSSearchableItemAttributeSet.m */, + 5FCDD3E52B7AC6A100EAF29F /* BranchDelegate.m */, + 5FCDD3F82B7AC6A100EAF29F /* BranchEvent.m */, + 5FCDD37A2B7AC6A100EAF29F /* BranchInstallRequest.m */, + 5FCDD3912B7AC6A100EAF29F /* BranchJsonConfig.m */, + 5FCDD3EA2B7AC6A100EAF29F /* BranchLastAttributedTouchData.m */, + 5FCDD3922B7AC6A100EAF29F /* BranchLATDRequest.m */, + 5FCDD3EF2B7AC6A100EAF29F /* BranchLinkProperties.m */, + 5F5FDA152B7DE2FE00F14A43 /* BranchLogger.m */, + 5FCDD3FA2B7AC6A100EAF29F /* BranchOpenRequest.m */, + 5FCDD3702B7AC6A100EAF29F /* BranchPasteControl.m */, + 5FCDD37B2B7AC6A100EAF29F /* BranchPluginSupport.m */, + 5FCDD3962B7AC6A100EAF29F /* BranchQRCode.m */, + 5FCDD3772B7AC6A100EAF29F /* BranchScene.m */, + 5FCDD3F42B7AC6A100EAF29F /* BranchShareLink.m */, + 5FCDD3F92B7AC6A100EAF29F /* BranchShortUrlRequest.m */, + 5FCDD3FC2B7AC6A100EAF29F /* BranchShortUrlSyncRequest.m */, + 5FCDD3862B7AC6A100EAF29F /* BranchSpotlightUrlRequest.m */, + 5FCDD36F2B7AC6A100EAF29F /* BranchUniversalObject.m */, + 5FCDD36C2B7AC6A100EAF29F /* NSError+Branch.m */, + 5FCDD3732B7AC6A100EAF29F /* NSMutableDictionary+Branch.m */, + 5FCDD37C2B7AC6A100EAF29F /* NSString+Branch.m */, + 5FCDD3F52B7AC6A100EAF29F /* UIViewController+Branch.m */, + 5FCDD3B42B7AC6A100EAF29F /* Private */, + 5FCDD3982B7AC6A100EAF29F /* Public */, + ); + name = BranchSDK; + path = Sources/BranchSDK; + sourceTree = ""; + }; + 5FCDD3982B7AC6A100EAF29F /* Public */ = { + isa = PBXGroup; + children = ( + 5FCDD3A42B7AC6A100EAF29F /* BNCCallbacks.h */, + 5FCDD3A02B7AC6A100EAF29F /* BNCCurrency.h */, + 5FCDD3A72B7AC6A100EAF29F /* BNCInitSessionResponse.h */, + 5FCDD3A62B7AC6A100EAF29F /* BNCLinkCache.h */, + 5FCDD3992B7AC6A100EAF29F /* BNCLinkData.h */, + 5FCDD3A92B7AC6A100EAF29F /* BNCNetworkServiceProtocol.h */, + 5FCDD3B12B7AC6A100EAF29F /* BNCPreferenceHelper.h */, + 5FCDD3B32B7AC6A100EAF29F /* BNCProductCategory.h */, + 5FCDD3B22B7AC6A100EAF29F /* BNCServerInterface.h */, + 5FCDD3AD2B7AC6A100EAF29F /* BNCServerRequest.h */, + 5FCDD3AA2B7AC6A100EAF29F /* BNCServerRequestQueue.h */, + 5FCDD3A32B7AC6A100EAF29F /* BNCServerResponse.h */, + 5FCDD3A22B7AC6A100EAF29F /* Branch.h */, + 5FCDD39C2B7AC6A100EAF29F /* BranchActivityItemProvider.h */, + 5FCDD39D2B7AC6A100EAF29F /* BranchCSSearchableItemAttributeSet.h */, + 5FCDD3AE2B7AC6A100EAF29F /* BranchDeepLinkingController.h */, + 5FCDD39A2B7AC6A100EAF29F /* BranchDelegate.h */, + 5FCDD3A82B7AC6A100EAF29F /* BranchEvent.h */, + 5FCDD3A12B7AC6A100EAF29F /* BranchLastAttributedTouchData.h */, + 5FCDD39E2B7AC6A100EAF29F /* BranchLinkProperties.h */, + 5F5FDA192B7DE31E00F14A43 /* BranchLogger.h */, + 5FCDD3AB2B7AC6A100EAF29F /* BranchPasteControl.h */, + 5FCDD3AF2B7AC6A100EAF29F /* BranchPluginSupport.h */, + 5FCDD39B2B7AC6A100EAF29F /* BranchQRCode.h */, + 5FCDD3B02B7AC6A100EAF29F /* BranchScene.h */, + 5FCDD39F2B7AC6A100EAF29F /* BranchSDK.h */, + 5FCDD3A52B7AC6A100EAF29F /* BranchShareLink.h */, + 5FCDD3AC2B7AC6A100EAF29F /* BranchUniversalObject.h */, + ); + path = Public; + sourceTree = ""; + }; + 5FCDD3B42B7AC6A100EAF29F /* Private */ = { + isa = PBXGroup; + children = ( + 5FCDD3BC2B7AC6A100EAF29F /* BNCAppGroupsData.h */, + 5FCDD3B62B7AC6A100EAF29F /* BNCAppleReceipt.h */, + 5FCDD3C72B7AC6A100EAF29F /* BNCApplication.h */, + 5FCDD3C12B7AC6A100EAF29F /* BNCCallbackMap.h */, + 5FCDD3DB2B7AC6A100EAF29F /* BNCConfig.h */, + 5FCDD3D52B7AC6A100EAF29F /* BNCContentDiscoveryManager.h */, + 5FCDD3E02B7AC6A100EAF29F /* BNCCrashlyticsWrapper.h */, + 5FCDD3D42B7AC6A100EAF29F /* BNCDeepLinkViewControllerInstance.h */, + 5FCDD3D62B7AC6A100EAF29F /* BNCDeviceInfo.h */, + 5FCDD3C92B7AC6A100EAF29F /* BNCDeviceSystem.h */, + 5FCDD3CB2B7AC6A100EAF29F /* BNCEncodingUtils.h */, + 5FCDD3C02B7AC6A100EAF29F /* BNCEventUtils.h */, + 5FCDD3BA2B7AC6A100EAF29F /* BNCJSONUtility.h */, + 5FCDD3B52B7AC6A100EAF29F /* BNCKeyChain.h */, + 5FCDD3CE2B7AC6A100EAF29F /* BNCNetworkInterface.h */, + 5FCDD3E32B7AC6A100EAF29F /* BNCNetworkService.h */, + 5FCDD3DD2B7AC6A100EAF29F /* BNCPartnerParameters.h */, + 5FCDD3B72B7AC6A100EAF29F /* BNCPasteboard.h */, + 5FCDD3C32B7AC6A100EAF29F /* BNCQRCodeCache.h */, + 5FCDD3E42B7AC6A100EAF29F /* BNCReachability.h */, + 5FCDD3E22B7AC6A100EAF29F /* BNCReferringURLUtility.h */, + 5FCDD3E12B7AC6A100EAF29F /* BNCRequestFactory.h */, + 5FCDD3BE2B7AC6A100EAF29F /* BNCServerAPI.h */, + 5FCDD3B92B7AC6A100EAF29F /* BNCSKAdNetwork.h */, + 5FCDD3BF2B7AC6A100EAF29F /* BNCSpotlightService.h */, + 5FCDD3D02B7AC6A100EAF29F /* BNCSystemObserver.h */, + 5FCDD3CD2B7AC6A100EAF29F /* BNCURLFilter.h */, + 5FCDD3C62B7AC6A100EAF29F /* BNCUrlQueryParameter.h */, + 5FCDD3CA2B7AC6A100EAF29F /* BNCUserAgentCollector.h */, + 5FCDD3D32B7AC6A100EAF29F /* Branch+Validator.h */, + 5FCDD3DC2B7AC6A100EAF29F /* BranchConstants.h */, + 5FCDD3D82B7AC6A100EAF29F /* BranchContentDiscoverer.h */, + 5FCDD3DA2B7AC6A100EAF29F /* BranchContentDiscoveryManifest.h */, + 5FCDD3B82B7AC6A100EAF29F /* BranchContentPathProperties.h */, + 5FCDD3D22B7AC6A100EAF29F /* BranchInstallRequest.h */, + 5FCDD3DE2B7AC6A100EAF29F /* BranchJsonConfig.h */, + 5FCDD3DF2B7AC6A100EAF29F /* BranchLATDRequest.h */, + 5FCDD3C42B7AC6A100EAF29F /* BranchOpenRequest.h */, + 5FCDD3C52B7AC6A100EAF29F /* BranchShortUrlRequest.h */, + 5FCDD3C22B7AC6A100EAF29F /* BranchShortUrlSyncRequest.h */, + 5FCDD3D92B7AC6A100EAF29F /* BranchSpotlightUrlRequest.h */, + 5FCDD3CC2B7AC6A100EAF29F /* NSError+Branch.h */, + 5FCDD3C82B7AC6A100EAF29F /* NSMutableDictionary+Branch.h */, + 5FCDD3D12B7AC6A100EAF29F /* NSString+Branch.h */, + 5FCDD3BB2B7AC6A100EAF29F /* UIViewController+Branch.h */, + ); + path = Private; + sourceTree = ""; + }; 5FF2AFDB28E7BF5500393216 /* Scripts */ = { isa = PBXGroup; children = ( @@ -985,81 +1002,79 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 5F2211332894A34000C5B190 /* BNCCallbacks.h in Headers */, - 5F2210F72894A34000C5B190 /* BNCNetworkServiceProtocol.h in Headers */, - 5F2211162894A34000C5B190 /* BNCInitSessionResponse.h in Headers */, - 5F2210F32894A34000C5B190 /* BNCLinkCache.h in Headers */, - 5F2210F12894A34000C5B190 /* BNCLinkData.h in Headers */, - 5F1B240929148CBD003BEEC7 /* BranchPasteControl.h in Headers */, - 5F2210DE2894A34000C5B190 /* BNCPreferenceHelper.h in Headers */, - E7653F092A9E73AA00C7C040 /* BNCServerAPI.h in Headers */, - 5F22112D2894A34000C5B190 /* BNCServerInterface.h in Headers */, - 5F22113B2894A34000C5B190 /* BNCServerRequest.h in Headers */, - 5F2211462894A34000C5B190 /* BNCServerRequestQueue.h in Headers */, - 5F2211042894A34000C5B190 /* BNCServerResponse.h in Headers */, - 5F2211562894A34000C5B190 /* Branch.h in Headers */, - 5F22115D2894A34000C5B190 /* BranchActivityItemProvider.h in Headers */, - 5F2210E22894A34000C5B190 /* BranchCSSearchableItemAttributeSet.h in Headers */, - 5F2211492894A34000C5B190 /* BranchDeepLinkingController.h in Headers */, - 5F2211072894A34000C5B190 /* BranchDelegate.h in Headers */, - 5F22111B2894A34000C5B190 /* BranchEvent.h in Headers */, - 5F22114E2894A34000C5B190 /* BranchLastAttributedTouchData.h in Headers */, - 5F2210ED2894A34000C5B190 /* BranchLinkProperties.h in Headers */, - 5F2210FF2894A34000C5B190 /* BranchScene.h in Headers */, - 5F2211202894A34000C5B190 /* BranchShareLink.h in Headers */, - 5F2211262894A34000C5B190 /* BNCAppGroupsData.h in Headers */, - 5F2210FA2894A34000C5B190 /* BranchUniversalObject.h in Headers */, - 5F2211362894A34000C5B190 /* BranchQRCode.h in Headers */, - 5F22112E2894A34000C5B190 /* BranchSpotlightUrlRequest.h in Headers */, - C1CDEF302A95717E0098524F /* BNCCurrency.h in Headers */, - C1CDEF342A95718C0098524F /* BNCProductCategory.h in Headers */, - C1B63C7F29D2380000D1136D /* BNCUrlQueryParameter.h in Headers */, - C1B63C8029D2380000D1136D /* BNCReferringURLUtility.h in Headers */, - 5F2211192894A34000C5B190 /* UIViewController+Branch.h in Headers */, - 5F2210F62894A34000C5B190 /* NSString+Branch.h in Headers */, - 5F2211372894A34000C5B190 /* NSMutableDictionary+Branch.h in Headers */, - 5F2210C52894A34000C5B190 /* BranchShortUrlSyncRequest.h in Headers */, - 5F22111D2894A34000C5B190 /* BNCPartnerParameters.h in Headers */, - 5F2211452894A34000C5B190 /* BNCURLFilter.h in Headers */, - 5F2211142894A34000C5B190 /* BranchConstants.h in Headers */, - 5F22110E2894A34000C5B190 /* BranchContentDiscoverer.h in Headers */, - 5F2211052894A34000C5B190 /* BranchContentDiscoveryManifest.h in Headers */, - 5F2211482894A34000C5B190 /* BNCNetworkInterface.h in Headers */, - 5F2210D02894A34000C5B190 /* BNCSKAdNetwork.h in Headers */, - 5F22110C2894A34000C5B190 /* BNCCrashlyticsWrapper.h in Headers */, - 5F22110A2894A34000C5B190 /* BranchShortUrlRequest.h in Headers */, - 5F22111C2894A34000C5B190 /* Branch+Validator.h in Headers */, - 5F2211442894A34000C5B190 /* BNCPasteboard.h in Headers */, - 5F2210DB2894A34000C5B190 /* BNCSystemObserver.h in Headers */, - 5F2211472894A34000C5B190 /* BNCConfig.h in Headers */, - 5F2210FC2894A34000C5B190 /* BNCApplication.h in Headers */, - 5F2210C62894A34000C5B190 /* BNCDeviceSystem.h in Headers */, - 5F2211532894A34000C5B190 /* BNCKeyChain.h in Headers */, - 5F2210D62894A34000C5B190 /* BranchLATDRequest.h in Headers */, - 5F2210E72894A34000C5B190 /* BranchInstallRequest.h in Headers */, - 5F22115C2894A34000C5B190 /* BNCSpotlightService.h in Headers */, - 5F2210CD2894A34000C5B190 /* BNCDeviceInfo.h in Headers */, - 5F2211112894A34000C5B190 /* BNCContentDiscoveryManager.h in Headers */, - 5F2211012894A34000C5B190 /* BNCFieldDefines.h in Headers */, - 5F2210F42894A34000C5B190 /* BNCCallbackMap.h in Headers */, - 5F5139962AC21F6E004A3BA4 /* BNCRequestFactory.h in Headers */, - 5F2210C92894A34000C5B190 /* BNCReachability.h in Headers */, - 5F22111E2894A34000C5B190 /* BranchContentPathProperties.h in Headers */, - 5F22115A2894A34000C5B190 /* NSError+Branch.h in Headers */, - 5F2210EF2894A34000C5B190 /* BranchOpenRequest.h in Headers */, - 5F2210F22894A34000C5B190 /* BranchPluginSupport.h in Headers */, - 5F2210F82894A34000C5B190 /* BranchJsonConfig.h in Headers */, - 5FF2AFE028E7C22400393216 /* BranchSDK.h in Headers */, - 5F2210EB2894A34000C5B190 /* BNCNetworkService.h in Headers */, - 5F22111F2894A34000C5B190 /* BNCUserAgentCollector.h in Headers */, - 5F2210EA2894A34000C5B190 /* BNCThreads.h in Headers */, - 5F2211502894A34000C5B190 /* BNCEncodingUtils.h in Headers */, - 5F2211292894A34000C5B190 /* BNCQRCodeCache.h in Headers */, - E761E92429E61DA000E55C98 /* BNCEventUtils.h in Headers */, - 5F22111A2894A34000C5B190 /* BNCDeepLinkViewControllerInstance.h in Headers */, - 5F2210D92894A34000C5B190 /* BNCAppleReceipt.h in Headers */, - 5F22114F2894A34000C5B190 /* BNCLog.h in Headers */, - 5F2210D72894A34000C5B190 /* BNCJSONUtility.h in Headers */, + 5FCDD52E2B7AC6A300EAF29F /* Branch+Validator.h in Headers */, + 5FCDD4A42B7AC6A200EAF29F /* BNCCallbacks.h in Headers */, + 5FCDD4922B7AC6A100EAF29F /* BranchLinkProperties.h in Headers */, + 5FCDD4C82B7AC6A200EAF29F /* BranchScene.h in Headers */, + 5FCDD4A72B7AC6A200EAF29F /* BranchShareLink.h in Headers */, + 5FCDD4B62B7AC6A200EAF29F /* BNCServerRequestQueue.h in Headers */, + 5FCDD4982B7AC6A100EAF29F /* BNCCurrency.h in Headers */, + 5FCDD4C52B7AC6A200EAF29F /* BranchPluginSupport.h in Headers */, + 5FCDD4BC2B7AC6A200EAF29F /* BranchUniversalObject.h in Headers */, + 5FCDD4D12B7AC6A200EAF29F /* BNCProductCategory.h in Headers */, + 5FCDD5B22B7AC89100EAF29F /* BranchSDK.h in Headers */, + 5FCDD4892B7AC6A100EAF29F /* BranchQRCode.h in Headers */, + 5FCDD49B2B7AC6A100EAF29F /* BranchLastAttributedTouchData.h in Headers */, + 5FCDD4BF2B7AC6A200EAF29F /* BNCServerRequest.h in Headers */, + 5FCDD48F2B7AC6A100EAF29F /* BranchCSSearchableItemAttributeSet.h in Headers */, + 5FCDD4AD2B7AC6A200EAF29F /* BNCInitSessionResponse.h in Headers */, + 5FCDD4CE2B7AC6A200EAF29F /* BNCServerInterface.h in Headers */, + 5FCDD4862B7AC6A100EAF29F /* BranchDelegate.h in Headers */, + 5FCDD4CB2B7AC6A200EAF29F /* BNCPreferenceHelper.h in Headers */, + 5FCDD4AA2B7AC6A200EAF29F /* BNCLinkCache.h in Headers */, + 5FCDD48C2B7AC6A100EAF29F /* BranchActivityItemProvider.h in Headers */, + 5FCDD4832B7AC6A100EAF29F /* BNCLinkData.h in Headers */, + 5FCDD4B02B7AC6A200EAF29F /* BranchEvent.h in Headers */, + 5FCDD4B32B7AC6A200EAF29F /* BNCNetworkServiceProtocol.h in Headers */, + 5FCDD4A12B7AC6A200EAF29F /* BNCServerResponse.h in Headers */, + 5FCDD4C22B7AC6A200EAF29F /* BranchDeepLinkingController.h in Headers */, + 5FCDD4B92B7AC6A200EAF29F /* BranchPasteControl.h in Headers */, + 5FCDD5072B7AC6A300EAF29F /* BNCUrlQueryParameter.h in Headers */, + 5FCDD5462B7AC6A300EAF29F /* BNCConfig.h in Headers */, + 5FCDD4E62B7AC6A200EAF29F /* UIViewController+Branch.h in Headers */, + 5F5FDA1A2B7DE31E00F14A43 /* BranchLogger.h in Headers */, + 5FCDD5492B7AC6A300EAF29F /* BranchConstants.h in Headers */, + 5FCDD5402B7AC6A300EAF29F /* BranchSpotlightUrlRequest.h in Headers */, + 5FCDD5552B7AC6A300EAF29F /* BNCCrashlyticsWrapper.h in Headers */, + 5FCDD52B2B7AC6A300EAF29F /* BranchInstallRequest.h in Headers */, + 5FCDD5042B7AC6A300EAF29F /* BranchShortUrlRequest.h in Headers */, + 5FCDD50A2B7AC6A300EAF29F /* BNCApplication.h in Headers */, + 5FCDD4E32B7AC6A200EAF29F /* BNCJSONUtility.h in Headers */, + 5FCDD5582B7AC6A300EAF29F /* BNCRequestFactory.h in Headers */, + 5FCDD4FE2B7AC6A200EAF29F /* BNCQRCodeCache.h in Headers */, + 5FCDD5162B7AC6A300EAF29F /* BNCEncodingUtils.h in Headers */, + 5FCDD4F82B7AC6A200EAF29F /* BNCCallbackMap.h in Headers */, + 5FCDD5252B7AC6A300EAF29F /* BNCSystemObserver.h in Headers */, + 5FCDD55E2B7AC6A300EAF29F /* BNCNetworkService.h in Headers */, + 5FCDD54C2B7AC6A300EAF29F /* BNCPartnerParameters.h in Headers */, + 5FCDD5132B7AC6A300EAF29F /* BNCUserAgentCollector.h in Headers */, + 5FCDD51C2B7AC6A300EAF29F /* BNCURLFilter.h in Headers */, + 5FCDD4F22B7AC6A200EAF29F /* BNCSpotlightService.h in Headers */, + 5FCDD4DA2B7AC6A200EAF29F /* BNCPasteboard.h in Headers */, + 5FCDD4D42B7AC6A200EAF29F /* BNCKeyChain.h in Headers */, + 5FCDD4DD2B7AC6A200EAF29F /* BranchContentPathProperties.h in Headers */, + 5FCDD5342B7AC6A300EAF29F /* BNCContentDiscoveryManager.h in Headers */, + 5FCDD5282B7AC6A300EAF29F /* NSString+Branch.h in Headers */, + 5FCDD4FB2B7AC6A200EAF29F /* BranchShortUrlSyncRequest.h in Headers */, + 5FCDD55B2B7AC6A300EAF29F /* BNCReferringURLUtility.h in Headers */, + 5FCDD5372B7AC6A300EAF29F /* BNCDeviceInfo.h in Headers */, + 5FCDD53D2B7AC6A300EAF29F /* BranchContentDiscoverer.h in Headers */, + 5FCDD5432B7AC6A300EAF29F /* BranchContentDiscoveryManifest.h in Headers */, + 5FCDD5312B7AC6A300EAF29F /* BNCDeepLinkViewControllerInstance.h in Headers */, + 5FCDD4EF2B7AC6A200EAF29F /* BNCServerAPI.h in Headers */, + 5FCDD5522B7AC6A300EAF29F /* BranchLATDRequest.h in Headers */, + 5FCDD4E92B7AC6A200EAF29F /* BNCAppGroupsData.h in Headers */, + 5FCDD5192B7AC6A300EAF29F /* NSError+Branch.h in Headers */, + 5FCDD5012B7AC6A200EAF29F /* BranchOpenRequest.h in Headers */, + 5FCDD4F52B7AC6A200EAF29F /* BNCEventUtils.h in Headers */, + 5FCDD5612B7AC6A300EAF29F /* BNCReachability.h in Headers */, + 5FCDD50D2B7AC6A300EAF29F /* NSMutableDictionary+Branch.h in Headers */, + 5FCDD4D72B7AC6A200EAF29F /* BNCAppleReceipt.h in Headers */, + 5FCDD54F2B7AC6A300EAF29F /* BranchJsonConfig.h in Headers */, + 5FCDD4E02B7AC6A200EAF29F /* BNCSKAdNetwork.h in Headers */, + 5FCDD5102B7AC6A300EAF29F /* BNCDeviceSystem.h in Headers */, + 5FCDD51F2B7AC6A300EAF29F /* BNCNetworkInterface.h in Headers */, + 5FA71BA82B7AE6B2008009CA /* Branch.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1067,81 +1082,79 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 5FF9DE9728EE797300D62DE1 /* BNCAppGroupsData.h in Headers */, - 5FF9DE9928EE797300D62DE1 /* BNCAppleReceipt.h in Headers */, - 5FF9DE9B28EE797300D62DE1 /* BNCApplication.h in Headers */, - 5FF9DE9C28EE797300D62DE1 /* BNCCallbackMap.h in Headers */, - 5F1B240A29148CBD003BEEC7 /* BranchPasteControl.h in Headers */, - 5FF9DE9D28EE797300D62DE1 /* BNCCallbacks.h in Headers */, - 5FF9DE9F28EE797300D62DE1 /* BNCConfig.h in Headers */, - E7653F0A2A9E73AA00C7C040 /* BNCServerAPI.h in Headers */, - 5FF9DEA028EE797300D62DE1 /* BNCContentDiscoveryManager.h in Headers */, - 5FF9DEA128EE797300D62DE1 /* BNCCrashlyticsWrapper.h in Headers */, - 5FF9DEA228EE797300D62DE1 /* BNCDeepLinkViewControllerInstance.h in Headers */, - 5FF9DEA328EE797300D62DE1 /* BNCDeviceInfo.h in Headers */, - 5FF9DEA428EE797300D62DE1 /* BNCDeviceSystem.h in Headers */, - 5FF9DEA528EE797300D62DE1 /* BNCEncodingUtils.h in Headers */, - 5FF9DEA728EE797300D62DE1 /* BNCFieldDefines.h in Headers */, - 5FF9DEA828EE797300D62DE1 /* BNCInitSessionResponse.h in Headers */, - 5FF9DEA928EE797300D62DE1 /* BNCJSONUtility.h in Headers */, - 5FF9DEAA28EE797300D62DE1 /* BNCKeyChain.h in Headers */, - 5FF9DEAB28EE797300D62DE1 /* BNCLinkCache.h in Headers */, - 5FF9DEAC28EE797300D62DE1 /* BNCLinkData.h in Headers */, - 5FF9DEAE28EE797300D62DE1 /* BNCLog.h in Headers */, - 5FF9DEAF28EE797300D62DE1 /* BNCNetworkInterface.h in Headers */, - 5FF9DEB028EE797300D62DE1 /* BNCNetworkService.h in Headers */, - C1B63C8129D34EEF00D1136D /* BNCReferringURLUtility.h in Headers */, - C1B63C8229D34EEF00D1136D /* BNCUrlQueryParameter.h in Headers */, - 5FF9DEB128EE797300D62DE1 /* BNCNetworkServiceProtocol.h in Headers */, - 5FF9DEB228EE797300D62DE1 /* BNCPartnerParameters.h in Headers */, - 5FF9DEB328EE797300D62DE1 /* BNCPasteboard.h in Headers */, - 5FF9DEB428EE797300D62DE1 /* BNCPreferenceHelper.h in Headers */, - 5FF9DEB528EE797300D62DE1 /* BNCQRCodeCache.h in Headers */, - 5FF9DEB628EE797300D62DE1 /* BNCReachability.h in Headers */, - 5FF9DEB728EE797300D62DE1 /* BNCServerInterface.h in Headers */, - C1BE79822A9E708900E15EDF /* BNCProductCategory.h in Headers */, - 5FF9DEB828EE797300D62DE1 /* BNCServerRequest.h in Headers */, - 5FF9DEB928EE797300D62DE1 /* BNCServerRequestQueue.h in Headers */, - 5FF9DEBA28EE797300D62DE1 /* BNCServerResponse.h in Headers */, - 5FF9DEBB28EE797300D62DE1 /* BNCSKAdNetwork.h in Headers */, - 5FF9DEBC28EE797300D62DE1 /* BNCSpotlightService.h in Headers */, - 5FF9DEBD28EE797300D62DE1 /* BNCSystemObserver.h in Headers */, - 5FF9DEBF28EE797300D62DE1 /* BNCThreads.h in Headers */, - 5FF9DEC128EE797300D62DE1 /* BNCURLFilter.h in Headers */, - 5FF9DEC228EE797400D62DE1 /* BNCUserAgentCollector.h in Headers */, - 5FF9DEC328EE797400D62DE1 /* Branch.h in Headers */, - 5FF9DEC428EE797400D62DE1 /* Branch+Validator.h in Headers */, - 5FF9DEC528EE797400D62DE1 /* BranchActivityItemProvider.h in Headers */, - 5FF9DEC728EE797400D62DE1 /* BranchConstants.h in Headers */, - 5FF9DEC828EE797400D62DE1 /* BranchContentDiscoverer.h in Headers */, - 5FF9DEC928EE797400D62DE1 /* BranchContentDiscoveryManifest.h in Headers */, - C1BE797E2A9E704600E15EDF /* BNCCurrency.h in Headers */, - 5FF9DECA28EE797400D62DE1 /* BranchContentPathProperties.h in Headers */, - 5FF9DECD28EE797400D62DE1 /* BranchCSSearchableItemAttributeSet.h in Headers */, - 5FF9DECE28EE797400D62DE1 /* BranchDeepLinkingController.h in Headers */, - 5FF9DECF28EE797400D62DE1 /* BranchDelegate.h in Headers */, - 5FF9DED028EE797400D62DE1 /* BranchEvent.h in Headers */, - 5FF9DED128EE797400D62DE1 /* BranchInstallRequest.h in Headers */, - 5FF9DED228EE797400D62DE1 /* BranchJsonConfig.h in Headers */, - 5FF9DED328EE797400D62DE1 /* BranchLastAttributedTouchData.h in Headers */, - 5F5139972AC21F6E004A3BA4 /* BNCRequestFactory.h in Headers */, - 5FF9DED428EE797400D62DE1 /* BranchLATDRequest.h in Headers */, - 5FF9DED528EE797400D62DE1 /* BranchLinkProperties.h in Headers */, - 5FF9DED728EE797400D62DE1 /* BranchOpenRequest.h in Headers */, - 5FF9DED828EE797400D62DE1 /* BranchPluginSupport.h in Headers */, - 5FF9DED928EE797400D62DE1 /* BranchQRCode.h in Headers */, - 5FF9DEDB28EE797400D62DE1 /* BranchScene.h in Headers */, - 5FF9DEE728EE7A7F00D62DE1 /* BranchSDK.h in Headers */, - 5FF9DEDD28EE797400D62DE1 /* BranchShareLink.h in Headers */, - 5FF9DEDE28EE797400D62DE1 /* BranchShortUrlRequest.h in Headers */, - 5FF9DEDF28EE797400D62DE1 /* BranchShortUrlSyncRequest.h in Headers */, - 5FF9DEE028EE797400D62DE1 /* BranchSpotlightUrlRequest.h in Headers */, - 5FF9DEE128EE797400D62DE1 /* BranchUniversalObject.h in Headers */, - E761E92529E61DA000E55C98 /* BNCEventUtils.h in Headers */, - 5FF9DEE328EE797400D62DE1 /* NSError+Branch.h in Headers */, - 5FF9DEE428EE797400D62DE1 /* NSMutableDictionary+Branch.h in Headers */, - 5FF9DEE528EE797400D62DE1 /* NSString+Branch.h in Headers */, - 5FF9DEE628EE797400D62DE1 /* UIViewController+Branch.h in Headers */, + 5FCDD52F2B7AC6A300EAF29F /* Branch+Validator.h in Headers */, + 5FCDD4A52B7AC6A200EAF29F /* BNCCallbacks.h in Headers */, + 5FCDD4932B7AC6A100EAF29F /* BranchLinkProperties.h in Headers */, + 5FCDD4C92B7AC6A200EAF29F /* BranchScene.h in Headers */, + 5FCDD4A82B7AC6A200EAF29F /* BranchShareLink.h in Headers */, + 5FCDD4B72B7AC6A200EAF29F /* BNCServerRequestQueue.h in Headers */, + 5FCDD4992B7AC6A100EAF29F /* BNCCurrency.h in Headers */, + 5FCDD4C62B7AC6A200EAF29F /* BranchPluginSupport.h in Headers */, + 5FCDD4BD2B7AC6A200EAF29F /* BranchUniversalObject.h in Headers */, + 5FCDD4D22B7AC6A200EAF29F /* BNCProductCategory.h in Headers */, + 5FCDD5B32B7AC89200EAF29F /* BranchSDK.h in Headers */, + 5FCDD48A2B7AC6A100EAF29F /* BranchQRCode.h in Headers */, + 5FCDD49C2B7AC6A200EAF29F /* BranchLastAttributedTouchData.h in Headers */, + 5FCDD4C02B7AC6A200EAF29F /* BNCServerRequest.h in Headers */, + 5FCDD4902B7AC6A100EAF29F /* BranchCSSearchableItemAttributeSet.h in Headers */, + 5FCDD4AE2B7AC6A200EAF29F /* BNCInitSessionResponse.h in Headers */, + 5FCDD4CF2B7AC6A200EAF29F /* BNCServerInterface.h in Headers */, + 5FCDD4872B7AC6A100EAF29F /* BranchDelegate.h in Headers */, + 5FCDD4CC2B7AC6A200EAF29F /* BNCPreferenceHelper.h in Headers */, + 5FCDD4AB2B7AC6A200EAF29F /* BNCLinkCache.h in Headers */, + 5FCDD48D2B7AC6A100EAF29F /* BranchActivityItemProvider.h in Headers */, + 5FCDD4842B7AC6A100EAF29F /* BNCLinkData.h in Headers */, + 5FCDD4B12B7AC6A200EAF29F /* BranchEvent.h in Headers */, + 5FCDD4B42B7AC6A200EAF29F /* BNCNetworkServiceProtocol.h in Headers */, + 5FCDD4A22B7AC6A200EAF29F /* BNCServerResponse.h in Headers */, + 5FCDD4C32B7AC6A200EAF29F /* BranchDeepLinkingController.h in Headers */, + 5FCDD4BA2B7AC6A200EAF29F /* BranchPasteControl.h in Headers */, + 5FCDD49F2B7AC6A200EAF29F /* Branch.h in Headers */, + 5FCDD5082B7AC6A300EAF29F /* BNCUrlQueryParameter.h in Headers */, + 5FCDD5472B7AC6A300EAF29F /* BNCConfig.h in Headers */, + 5F5FDA1B2B7DE31E00F14A43 /* BranchLogger.h in Headers */, + 5FCDD4E72B7AC6A200EAF29F /* UIViewController+Branch.h in Headers */, + 5FCDD54A2B7AC6A300EAF29F /* BranchConstants.h in Headers */, + 5FCDD5412B7AC6A300EAF29F /* BranchSpotlightUrlRequest.h in Headers */, + 5FCDD5562B7AC6A300EAF29F /* BNCCrashlyticsWrapper.h in Headers */, + 5FCDD52C2B7AC6A300EAF29F /* BranchInstallRequest.h in Headers */, + 5FCDD5052B7AC6A300EAF29F /* BranchShortUrlRequest.h in Headers */, + 5FCDD50B2B7AC6A300EAF29F /* BNCApplication.h in Headers */, + 5FCDD4E42B7AC6A200EAF29F /* BNCJSONUtility.h in Headers */, + 5FCDD5592B7AC6A300EAF29F /* BNCRequestFactory.h in Headers */, + 5FCDD4FF2B7AC6A200EAF29F /* BNCQRCodeCache.h in Headers */, + 5FCDD5172B7AC6A300EAF29F /* BNCEncodingUtils.h in Headers */, + 5FCDD4F92B7AC6A200EAF29F /* BNCCallbackMap.h in Headers */, + 5FCDD5262B7AC6A300EAF29F /* BNCSystemObserver.h in Headers */, + 5FCDD55F2B7AC6A300EAF29F /* BNCNetworkService.h in Headers */, + 5FCDD54D2B7AC6A300EAF29F /* BNCPartnerParameters.h in Headers */, + 5FCDD5142B7AC6A300EAF29F /* BNCUserAgentCollector.h in Headers */, + 5FCDD51D2B7AC6A300EAF29F /* BNCURLFilter.h in Headers */, + 5FCDD4F32B7AC6A200EAF29F /* BNCSpotlightService.h in Headers */, + 5FCDD4DB2B7AC6A200EAF29F /* BNCPasteboard.h in Headers */, + 5FCDD4D52B7AC6A200EAF29F /* BNCKeyChain.h in Headers */, + 5FCDD4DE2B7AC6A200EAF29F /* BranchContentPathProperties.h in Headers */, + 5FCDD5352B7AC6A300EAF29F /* BNCContentDiscoveryManager.h in Headers */, + 5FCDD5292B7AC6A300EAF29F /* NSString+Branch.h in Headers */, + 5FCDD4FC2B7AC6A200EAF29F /* BranchShortUrlSyncRequest.h in Headers */, + 5FCDD55C2B7AC6A300EAF29F /* BNCReferringURLUtility.h in Headers */, + 5FCDD5382B7AC6A300EAF29F /* BNCDeviceInfo.h in Headers */, + 5FCDD53E2B7AC6A300EAF29F /* BranchContentDiscoverer.h in Headers */, + 5FCDD5442B7AC6A300EAF29F /* BranchContentDiscoveryManifest.h in Headers */, + 5FCDD5322B7AC6A300EAF29F /* BNCDeepLinkViewControllerInstance.h in Headers */, + 5FCDD4F02B7AC6A200EAF29F /* BNCServerAPI.h in Headers */, + 5FCDD5532B7AC6A300EAF29F /* BranchLATDRequest.h in Headers */, + 5FCDD4EA2B7AC6A200EAF29F /* BNCAppGroupsData.h in Headers */, + 5FCDD51A2B7AC6A300EAF29F /* NSError+Branch.h in Headers */, + 5FCDD5022B7AC6A300EAF29F /* BranchOpenRequest.h in Headers */, + 5FCDD4F62B7AC6A200EAF29F /* BNCEventUtils.h in Headers */, + 5FCDD5622B7AC6A300EAF29F /* BNCReachability.h in Headers */, + 5FCDD50E2B7AC6A300EAF29F /* NSMutableDictionary+Branch.h in Headers */, + 5FCDD4D82B7AC6A200EAF29F /* BNCAppleReceipt.h in Headers */, + 5FCDD5502B7AC6A300EAF29F /* BranchJsonConfig.h in Headers */, + 5FCDD4E12B7AC6A200EAF29F /* BNCSKAdNetwork.h in Headers */, + 5FCDD5112B7AC6A300EAF29F /* BNCDeviceSystem.h in Headers */, + 5FCDD5202B7AC6A300EAF29F /* BNCNetworkInterface.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1149,71 +1162,79 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 5F7903DF28B59148003144CD /* BranchUniversalObject.h in Headers */, - 5F7903D628B59148003144CD /* BranchPluginSupport.h in Headers */, - 5F7903D728B59148003144CD /* BranchQRCode.h in Headers */, - 5F7903D928B59148003144CD /* BranchScene.h in Headers */, - 5F7903D328B59148003144CD /* BranchLinkProperties.h in Headers */, - 5F7903D128B59148003144CD /* BranchLastAttributedTouchData.h in Headers */, - 5F7903CE28B59147003144CD /* BranchEvent.h in Headers */, - 5F7903CC28B59147003144CD /* BranchDeepLinkingController.h in Headers */, - 5F7903CD28B59147003144CD /* BranchDelegate.h in Headers */, - C1BE797F2A9E704700E15EDF /* BNCCurrency.h in Headers */, - 5F7903C128B59147003144CD /* Branch.h in Headers */, - 5F7903B828B59147003144CD /* BNCServerResponse.h in Headers */, - 5F7903B728B59147003144CD /* BNCServerRequestQueue.h in Headers */, - 5F7903B628B59147003144CD /* BNCServerRequest.h in Headers */, - 5F7903B528B59147003144CD /* BNCServerInterface.h in Headers */, - 5F7903B228B59146003144CD /* BNCPreferenceHelper.h in Headers */, - E7653F0B2A9E73AA00C7C040 /* BNCServerAPI.h in Headers */, - 5F7903AA28B59146003144CD /* BNCLinkData.h in Headers */, - 5F7903A928B59146003144CD /* BNCLinkCache.h in Headers */, - 5F7903A628B59146003144CD /* BNCInitSessionResponse.h in Headers */, - 5F7903AF28B59146003144CD /* BNCNetworkServiceProtocol.h in Headers */, - 5F79039B28B59146003144CD /* BNCCallbacks.h in Headers */, - 5F79039428B59145003144CD /* BNCAppGroupsData.h in Headers */, - C1B63C8529D34FE400D1136D /* BNCReferringURLUtility.h in Headers */, - C1B63C8629D34FE400D1136D /* BNCUrlQueryParameter.h in Headers */, - 5F79039628B59145003144CD /* BNCAppleReceipt.h in Headers */, - 5F79039828B59146003144CD /* BNCApplication.h in Headers */, - 5F79039A28B59146003144CD /* BNCCallbackMap.h in Headers */, - 5F79039D28B59146003144CD /* BNCConfig.h in Headers */, - 5F79039F28B59146003144CD /* BNCCrashlyticsWrapper.h in Headers */, - 5F7903A028B59146003144CD /* BNCDeepLinkViewControllerInstance.h in Headers */, - 5F7903A128B59146003144CD /* BNCDeviceInfo.h in Headers */, - 5F7903A228B59146003144CD /* BNCDeviceSystem.h in Headers */, - 5FF2AFE128E7C22400393216 /* BranchSDK.h in Headers */, - 5F7903A328B59146003144CD /* BNCEncodingUtils.h in Headers */, - 5F7903A528B59146003144CD /* BNCFieldDefines.h in Headers */, - 5F7903A728B59146003144CD /* BNCJSONUtility.h in Headers */, - 5F7903A828B59146003144CD /* BNCKeyChain.h in Headers */, - 5F7903AC28B59146003144CD /* BNCLog.h in Headers */, - 5F7903AD28B59146003144CD /* BNCNetworkInterface.h in Headers */, - 5F7903AE28B59146003144CD /* BNCNetworkService.h in Headers */, - 5F7903B028B59146003144CD /* BNCPartnerParameters.h in Headers */, - 5F7903B128B59146003144CD /* BNCPasteboard.h in Headers */, - 5F7903B328B59146003144CD /* BNCQRCodeCache.h in Headers */, - 5F7903B428B59147003144CD /* BNCReachability.h in Headers */, - 5F5139982AC21F6E004A3BA4 /* BNCRequestFactory.h in Headers */, - 5F7903B928B59147003144CD /* BNCSKAdNetwork.h in Headers */, - 5F7903BB28B59147003144CD /* BNCSystemObserver.h in Headers */, - 5F7903BD28B59147003144CD /* BNCThreads.h in Headers */, - 5F7903BF28B59147003144CD /* BNCURLFilter.h in Headers */, - C1BE79832A9E708900E15EDF /* BNCProductCategory.h in Headers */, - 5F7903C228B59147003144CD /* Branch+Validator.h in Headers */, - 5F7903C528B59147003144CD /* BranchConstants.h in Headers */, - 5F7903CF28B59147003144CD /* BranchInstallRequest.h in Headers */, - 5F7903D028B59147003144CD /* BranchJsonConfig.h in Headers */, - 5F7903D228B59148003144CD /* BranchLATDRequest.h in Headers */, - 5F7903D528B59148003144CD /* BranchOpenRequest.h in Headers */, - 5F7903DC28B59148003144CD /* BranchShortUrlRequest.h in Headers */, - 5F7903DD28B59148003144CD /* BranchShortUrlSyncRequest.h in Headers */, - 5F7903DE28B59148003144CD /* BranchSpotlightUrlRequest.h in Headers */, - E761E92629E61DA000E55C98 /* BNCEventUtils.h in Headers */, - 5F7903E128B59148003144CD /* NSError+Branch.h in Headers */, - 5F7903E228B59148003144CD /* NSMutableDictionary+Branch.h in Headers */, - 5F7903E328B59148003144CD /* NSString+Branch.h in Headers */, - 5F7903E428B59148003144CD /* UIViewController+Branch.h in Headers */, + 5FCDD5302B7AC6A300EAF29F /* Branch+Validator.h in Headers */, + 5FCDD4A62B7AC6A200EAF29F /* BNCCallbacks.h in Headers */, + 5FCDD4942B7AC6A100EAF29F /* BranchLinkProperties.h in Headers */, + 5FCDD4CA2B7AC6A200EAF29F /* BranchScene.h in Headers */, + 5FCDD4A92B7AC6A200EAF29F /* BranchShareLink.h in Headers */, + 5FCDD4B82B7AC6A200EAF29F /* BNCServerRequestQueue.h in Headers */, + 5FCDD49A2B7AC6A100EAF29F /* BNCCurrency.h in Headers */, + 5FCDD4C72B7AC6A200EAF29F /* BranchPluginSupport.h in Headers */, + 5FCDD4BE2B7AC6A200EAF29F /* BranchUniversalObject.h in Headers */, + 5FCDD4D32B7AC6A200EAF29F /* BNCProductCategory.h in Headers */, + 5FCDD48B2B7AC6A100EAF29F /* BranchQRCode.h in Headers */, + 5FCDD49D2B7AC6A200EAF29F /* BranchLastAttributedTouchData.h in Headers */, + 5FCDD4C12B7AC6A200EAF29F /* BNCServerRequest.h in Headers */, + 5FCDD4912B7AC6A100EAF29F /* BranchCSSearchableItemAttributeSet.h in Headers */, + 5FCDD4AF2B7AC6A200EAF29F /* BNCInitSessionResponse.h in Headers */, + 5FCDD4D02B7AC6A200EAF29F /* BNCServerInterface.h in Headers */, + 5FCDD4882B7AC6A100EAF29F /* BranchDelegate.h in Headers */, + 5FCDD4CD2B7AC6A200EAF29F /* BNCPreferenceHelper.h in Headers */, + 5FCDD4AC2B7AC6A200EAF29F /* BNCLinkCache.h in Headers */, + 5FCDD48E2B7AC6A100EAF29F /* BranchActivityItemProvider.h in Headers */, + 5FCDD4852B7AC6A100EAF29F /* BNCLinkData.h in Headers */, + 5FCDD4B22B7AC6A200EAF29F /* BranchEvent.h in Headers */, + 5FCDD4B52B7AC6A200EAF29F /* BNCNetworkServiceProtocol.h in Headers */, + 5FCDD4A32B7AC6A200EAF29F /* BNCServerResponse.h in Headers */, + 5FCDD4C42B7AC6A200EAF29F /* BranchDeepLinkingController.h in Headers */, + 5FCDD4A02B7AC6A200EAF29F /* Branch.h in Headers */, + 5FCDD5092B7AC6A300EAF29F /* BNCUrlQueryParameter.h in Headers */, + 5FCDD5482B7AC6A300EAF29F /* BNCConfig.h in Headers */, + 5FCDD4E82B7AC6A200EAF29F /* UIViewController+Branch.h in Headers */, + 5FCDD54B2B7AC6A300EAF29F /* BranchConstants.h in Headers */, + 5F5FDA1C2B7DE31E00F14A43 /* BranchLogger.h in Headers */, + 5FCDD5422B7AC6A300EAF29F /* BranchSpotlightUrlRequest.h in Headers */, + 5FCDD5B42B7AC89200EAF29F /* BranchSDK.h in Headers */, + 5FCDD5572B7AC6A300EAF29F /* BNCCrashlyticsWrapper.h in Headers */, + 5FCDD52D2B7AC6A300EAF29F /* BranchInstallRequest.h in Headers */, + 5FCDD5062B7AC6A300EAF29F /* BranchShortUrlRequest.h in Headers */, + 5FCDD50C2B7AC6A300EAF29F /* BNCApplication.h in Headers */, + 5FCDD4E52B7AC6A200EAF29F /* BNCJSONUtility.h in Headers */, + 5FCDD55A2B7AC6A300EAF29F /* BNCRequestFactory.h in Headers */, + 5FCDD5002B7AC6A200EAF29F /* BNCQRCodeCache.h in Headers */, + 5FCDD5182B7AC6A300EAF29F /* BNCEncodingUtils.h in Headers */, + 5FCDD4FA2B7AC6A200EAF29F /* BNCCallbackMap.h in Headers */, + 5FCDD5272B7AC6A300EAF29F /* BNCSystemObserver.h in Headers */, + 5FCDD5602B7AC6A300EAF29F /* BNCNetworkService.h in Headers */, + 5FCDD54E2B7AC6A300EAF29F /* BNCPartnerParameters.h in Headers */, + 5FCDD5152B7AC6A300EAF29F /* BNCUserAgentCollector.h in Headers */, + 5FCDD51E2B7AC6A300EAF29F /* BNCURLFilter.h in Headers */, + 5FCDD4F42B7AC6A200EAF29F /* BNCSpotlightService.h in Headers */, + 5FCDD4DC2B7AC6A200EAF29F /* BNCPasteboard.h in Headers */, + 5FCDD4D62B7AC6A200EAF29F /* BNCKeyChain.h in Headers */, + 5FCDD4DF2B7AC6A200EAF29F /* BranchContentPathProperties.h in Headers */, + 5FCDD5362B7AC6A300EAF29F /* BNCContentDiscoveryManager.h in Headers */, + 5FCDD52A2B7AC6A300EAF29F /* NSString+Branch.h in Headers */, + 5FCDD4FD2B7AC6A200EAF29F /* BranchShortUrlSyncRequest.h in Headers */, + 5FCDD55D2B7AC6A300EAF29F /* BNCReferringURLUtility.h in Headers */, + 5FCDD5392B7AC6A300EAF29F /* BNCDeviceInfo.h in Headers */, + 5FCDD53F2B7AC6A300EAF29F /* BranchContentDiscoverer.h in Headers */, + 5FCDD5452B7AC6A300EAF29F /* BranchContentDiscoveryManifest.h in Headers */, + 5FCDD5332B7AC6A300EAF29F /* BNCDeepLinkViewControllerInstance.h in Headers */, + 5FCDD4F12B7AC6A200EAF29F /* BNCServerAPI.h in Headers */, + 5FCDD5542B7AC6A300EAF29F /* BranchLATDRequest.h in Headers */, + 5FCDD4EB2B7AC6A200EAF29F /* BNCAppGroupsData.h in Headers */, + 5FCDD51B2B7AC6A300EAF29F /* NSError+Branch.h in Headers */, + 5FCDD5032B7AC6A300EAF29F /* BranchOpenRequest.h in Headers */, + 5FCDD4F72B7AC6A200EAF29F /* BNCEventUtils.h in Headers */, + 5FCDD4BB2B7AC6A200EAF29F /* BranchPasteControl.h in Headers */, + 5FCDD5632B7AC6A300EAF29F /* BNCReachability.h in Headers */, + 5FCDD50F2B7AC6A300EAF29F /* NSMutableDictionary+Branch.h in Headers */, + 5FCDD4D92B7AC6A200EAF29F /* BNCAppleReceipt.h in Headers */, + 5FCDD5512B7AC6A300EAF29F /* BranchJsonConfig.h in Headers */, + 5FCDD4E22B7AC6A200EAF29F /* BNCSKAdNetwork.h in Headers */, + 5FCDD5122B7AC6A300EAF29F /* BNCDeviceSystem.h in Headers */, + 5FCDD5212B7AC6A300EAF29F /* BNCNetworkInterface.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1532,76 +1553,75 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - E761E92129E61DA000E55C98 /* BNCEventUtils.m in Sources */, - C1B63C7D29D2380000D1136D /* BNCUrlQueryParameter.m in Sources */, - C1B63C7E29D2380000D1136D /* BNCReferringURLUtility.m in Sources */, - 5F2211512894A34000C5B190 /* BNCNetworkService.m in Sources */, - 5F22115B2894A34000C5B190 /* BNCNetworkInterface.m in Sources */, - 5F2211592894A34000C5B190 /* BNCDeviceInfo.m in Sources */, - 5F2210D32894A34000C5B190 /* NSMutableDictionary+Branch.m in Sources */, - 5F2211102894A34000C5B190 /* BNCLog.m in Sources */, - 5F22110F2894A34000C5B190 /* BranchContentDiscoverer.m in Sources */, - 5F2211542894A34000C5B190 /* BNCContentDiscoveryManager.m in Sources */, - 5F2211422894A34000C5B190 /* BNCLinkData.m in Sources */, - 5F2210C72894A34000C5B190 /* BNCURLFilter.m in Sources */, - 5F22113F2894A34000C5B190 /* BNCPreferenceHelper.m in Sources */, - 5F2210DC2894A34000C5B190 /* BNCSpotlightService.m in Sources */, - 5F2210CF2894A34000C5B190 /* BranchJsonConfig.m in Sources */, - 5F2210F52894A34000C5B190 /* BranchScene.m in Sources */, - 5F5139992AC21F6E004A3BA4 /* BNCRequestFactory.m in Sources */, - 5F22112A2894A34000C5B190 /* BNCEncodingUtils.m in Sources */, - 5F22112C2894A34000C5B190 /* BNCJSONUtility.m in Sources */, - 5F2210D52894A34000C5B190 /* BNCDeepLinkViewControllerInstance.m in Sources */, - 5F2210FB2894A34000C5B190 /* BranchDelegate.m in Sources */, - 5F2211212894A34000C5B190 /* BranchLastAttributedTouchData.m in Sources */, - 5F2210DD2894A34000C5B190 /* BranchSpotlightUrlRequest.m in Sources */, - C1CDEF2F2A95717E0098524F /* BNCCurrency.m in Sources */, - 5F2210F92894A34000C5B190 /* BNCConfig.m in Sources */, - 5F1B240B29148CBD003BEEC7 /* BranchPasteControl.m in Sources */, - 5F2211382894A34000C5B190 /* BNCCrashlyticsWrapper.m in Sources */, - 5F22110B2894A34000C5B190 /* BNCServerInterface.m in Sources */, - 5F2210E62894A34000C5B190 /* BNCServerResponse.m in Sources */, - 5F22114C2894A34000C5B190 /* NSError+Branch.m in Sources */, - 5F2210DA2894A34000C5B190 /* BNCReachability.m in Sources */, - 5F2211622894A34100C5B190 /* BranchShareLink.m in Sources */, - 5F2210E02894A34000C5B190 /* BranchLATDRequest.m in Sources */, - 5F2210EC2894A34000C5B190 /* BNCLinkCache.m in Sources */, - 5F2210CA2894A34000C5B190 /* BranchInstallRequest.m in Sources */, - 5F2211302894A34000C5B190 /* Branch.m in Sources */, - 5F22114D2894A34000C5B190 /* BNCServerRequestQueue.m in Sources */, - 5F2211002894A34000C5B190 /* BNCServerRequest.m in Sources */, - 5F2211122894A34000C5B190 /* BNCInitSessionResponse.m in Sources */, - 5F2211022894A34000C5B190 /* BNCAppleReceipt.m in Sources */, - 5F2211222894A34000C5B190 /* BNCSKAdNetwork.m in Sources */, - 5F2211552894A34000C5B190 /* BNCQRCodeCache.m in Sources */, - 5F2211242894A34000C5B190 /* BNCSystemObserver.m in Sources */, - 5F22115E2894A34000C5B190 /* BNCPasteboard.m in Sources */, - 5F2211282894A34000C5B190 /* BranchQRCode.m in Sources */, - 5F2210E42894A34000C5B190 /* BNCDeviceSystem.m in Sources */, - 5F2211392894A34000C5B190 /* BNCApplication.m in Sources */, - 5F22113D2894A34000C5B190 /* BranchContentPathProperties.m in Sources */, - 5F2211172894A34000C5B190 /* BranchShortUrlRequest.m in Sources */, - 5F2211522894A34000C5B190 /* BNCPartnerParameters.m in Sources */, - 5F2211312894A34000C5B190 /* BNCKeyChain.m in Sources */, - C1CDEF332A95718C0098524F /* BNCProductCategory.m in Sources */, - 5F2211152894A34000C5B190 /* BranchPluginSupport.m in Sources */, - 5F2211272894A34000C5B190 /* BranchContentDiscoveryManifest.m in Sources */, - 5F2211352894A34000C5B190 /* BNCCallbackMap.m in Sources */, - 5F2210C82894A34000C5B190 /* NSString+Branch.m in Sources */, - 5F2210DF2894A34000C5B190 /* UIViewController+Branch.m in Sources */, - E7653F052A9E737700C7C040 /* BNCServerAPI.m in Sources */, - 5F2211322894A34000C5B190 /* BranchUniversalObject.m in Sources */, - 5F2210D12894A34000C5B190 /* BranchShortUrlSyncRequest.m in Sources */, - 5F2211412894A34000C5B190 /* BNCAppGroupsData.m in Sources */, - 5F2210D82894A34000C5B190 /* BranchCSSearchableItemAttributeSet.m in Sources */, - 5F2210E12894A34000C5B190 /* BranchEvent.m in Sources */, - 5F22114B2894A34000C5B190 /* BNCThreads.m in Sources */, - 5F2211342894A34000C5B190 /* Branch+Validator.m in Sources */, - 5F22112B2894A34000C5B190 /* BranchLinkProperties.m in Sources */, - 5F2210D42894A34000C5B190 /* BranchConstants.m in Sources */, - 5F2211612894A34000C5B190 /* BNCUserAgentCollector.m in Sources */, - 5F22113C2894A34000C5B190 /* BranchActivityItemProvider.m in Sources */, - 5F2210D22894A34000C5B190 /* BranchOpenRequest.m in Sources */, + 5FCDD5AC2B7AC6A400EAF29F /* BNCCallbackMap.m in Sources */, + 5FCDD40E2B7AC6A100EAF29F /* BNCApplication.m in Sources */, + 5FCDD5642B7AC6A300EAF29F /* BranchDelegate.m in Sources */, + 5F5FDA162B7DE2FE00F14A43 /* BranchLogger.m in Sources */, + 5FCDD58B2B7AC6A400EAF29F /* BNCSpotlightService.m in Sources */, + 5FCDD4142B7AC6A100EAF29F /* NSMutableDictionary+Branch.m in Sources */, + 5FCDD4082B7AC6A100EAF29F /* BranchUniversalObject.m in Sources */, + 5FCDD4802B7AC6A100EAF29F /* BNCKeyChain.m in Sources */, + 5FCDD46E2B7AC6A100EAF29F /* BranchJsonConfig.m in Sources */, + 5FCDD4742B7AC6A100EAF29F /* BNCPartnerParameters.m in Sources */, + 5FCDD4712B7AC6A100EAF29F /* BranchLATDRequest.m in Sources */, + 5FCDD57C2B7AC6A400EAF29F /* BNCPasteboard.m in Sources */, + 5FCDD47A2B7AC6A100EAF29F /* BranchActivityItemProvider.m in Sources */, + 5FCDD4772B7AC6A100EAF29F /* BranchCSSearchableItemAttributeSet.m in Sources */, + 5FCDD45F2B7AC6A100EAF29F /* BNCRequestFactory.m in Sources */, + 5FCDD41D2B7AC6A100EAF29F /* BNCDeepLinkViewControllerInstance.m in Sources */, + 5FCDD5882B7AC6A400EAF29F /* BNCLinkCache.m in Sources */, + 5FCDD56D2B7AC6A400EAF29F /* BNCJSONUtility.m in Sources */, + 5FCDD4652B7AC6A100EAF29F /* BNCProductCategory.m in Sources */, + 5FCDD56A2B7AC6A400EAF29F /* Branch.m in Sources */, + 5FCDD4292B7AC6A100EAF29F /* BranchInstallRequest.m in Sources */, + 5FCDD4262B7AC6A100EAF29F /* Branch+Validator.m in Sources */, + 5FCDD4022B7AC6A100EAF29F /* BNCUserAgentCollector.m in Sources */, + 5FCDD5762B7AC6A400EAF29F /* BNCSKAdNetwork.m in Sources */, + 5FCDD4442B7AC6A100EAF29F /* BNCConfig.m in Sources */, + 5FCDD4532B7AC6A100EAF29F /* BranchContentDiscoverer.m in Sources */, + 5FCDD4112B7AC6A100EAF29F /* BNCDeviceSystem.m in Sources */, + 5FCDD3FF2B7AC6A100EAF29F /* NSError+Branch.m in Sources */, + 5FCDD5972B7AC6A400EAF29F /* BNCAppGroupsData.m in Sources */, + 5FCDD40B2B7AC6A100EAF29F /* BranchPasteControl.m in Sources */, + 5FCDD5AF2B7AC6A400EAF29F /* BNCEventUtils.m in Sources */, + 5FCDD44D2B7AC6A100EAF29F /* BranchSpotlightUrlRequest.m in Sources */, + 5FCDD47D2B7AC6A100EAF29F /* BranchQRCode.m in Sources */, + 5FCDD4322B7AC6A100EAF29F /* BNCSystemObserver.m in Sources */, + 5FCDD42C2B7AC6A100EAF29F /* BranchPluginSupport.m in Sources */, + 5FCDD5A62B7AC6A400EAF29F /* BNCQRCodeCache.m in Sources */, + 5FCDD45C2B7AC6A100EAF29F /* BNCReachability.m in Sources */, + 5FCDD42F2B7AC6A100EAF29F /* NSString+Branch.m in Sources */, + 5FCDD5A02B7AC6A400EAF29F /* BranchShortUrlRequest.m in Sources */, + 5FCDD46B2B7AC6A100EAF29F /* BNCServerInterface.m in Sources */, + 5FCDD4202B7AC6A100EAF29F /* BranchScene.m in Sources */, + 5FCDD4052B7AC6A100EAF29F /* BNCEncodingUtils.m in Sources */, + 5FCDD4562B7AC6A100EAF29F /* BNCDeviceInfo.m in Sources */, + 5FCDD41A2B7AC6A100EAF29F /* BNCUrlQueryParameter.m in Sources */, + 5FCDD58E2B7AC6A400EAF29F /* BNCServerAPI.m in Sources */, + 5FCDD4472B7AC6A100EAF29F /* BranchConstants.m in Sources */, + 5FCDD5702B7AC6A400EAF29F /* BNCCurrency.m in Sources */, + 5FCDD5A92B7AC6A400EAF29F /* BranchShortUrlSyncRequest.m in Sources */, + 5FCDD4232B7AC6A100EAF29F /* BNCContentDiscoveryManager.m in Sources */, + 5FCDD4382B7AC6A100EAF29F /* BNCURLFilter.m in Sources */, + 5FCDD5732B7AC6A400EAF29F /* BranchLastAttributedTouchData.m in Sources */, + 5FCDD43E2B7AC6A100EAF29F /* BNCNetworkInterface.m in Sources */, + 5FCDD4592B7AC6A100EAF29F /* BNCNetworkService.m in Sources */, + 5FCDD5942B7AC6A400EAF29F /* UIViewController+Branch.m in Sources */, + 5FCDD4172B7AC6A100EAF29F /* BNCServerRequestQueue.m in Sources */, + 5FCDD5A32B7AC6A400EAF29F /* BranchOpenRequest.m in Sources */, + 5FCDD5672B7AC6A300EAF29F /* BNCLinkData.m in Sources */, + 5FCDD44A2B7AC6A100EAF29F /* BranchContentDiscoveryManifest.m in Sources */, + 5FCDD4682B7AC6A100EAF29F /* BNCCrashlyticsWrapper.m in Sources */, + 5FCDD5912B7AC6A400EAF29F /* BranchShareLink.m in Sources */, + 5FCDD43B2B7AC6A100EAF29F /* BNCServerRequest.m in Sources */, + 5FCDD5822B7AC6A400EAF29F /* BranchLinkProperties.m in Sources */, + 5FCDD59D2B7AC6A400EAF29F /* BranchEvent.m in Sources */, + 5FCDD57F2B7AC6A400EAF29F /* BNCAppleReceipt.m in Sources */, + 5FCDD4622B7AC6A100EAF29F /* BNCReferringURLUtility.m in Sources */, + 5FCDD59A2B7AC6A400EAF29F /* BNCServerResponse.m in Sources */, + 5FCDD5852B7AC6A400EAF29F /* BNCInitSessionResponse.m in Sources */, + 5FCDD4412B7AC6A100EAF29F /* BNCPreferenceHelper.m in Sources */, + 5FCDD5792B7AC6A400EAF29F /* BranchContentPathProperties.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1637,76 +1657,75 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - E761E92229E61DA000E55C98 /* BNCEventUtils.m in Sources */, - C1B63C8329D34EF700D1136D /* BNCReferringURLUtility.m in Sources */, - C1B63C8429D34EF700D1136D /* BNCUrlQueryParameter.m in Sources */, - 5FF9DDFB28EE78A700D62DE1 /* BNCAppGroupsData.m in Sources */, - 5FF9DDFF28EE78A700D62DE1 /* BNCAppleReceipt.m in Sources */, - 5FF9DE0328EE78A700D62DE1 /* BNCApplication.m in Sources */, - 5FF9DE0528EE78A700D62DE1 /* BNCCallbackMap.m in Sources */, - 5FF9DE0A28EE78A700D62DE1 /* BNCConfig.m in Sources */, - 5FF9DE0C28EE78A700D62DE1 /* BNCContentDiscoveryManager.m in Sources */, - 5FF9DE0E28EE78A700D62DE1 /* BNCCrashlyticsWrapper.m in Sources */, - 5FF9DE1028EE78A700D62DE1 /* BNCDeepLinkViewControllerInstance.m in Sources */, - 5FF9DE1228EE78A700D62DE1 /* BNCDeviceInfo.m in Sources */, - 5FF9DE1428EE78A700D62DE1 /* BNCDeviceSystem.m in Sources */, - 5FF9DE1628EE78A700D62DE1 /* BNCEncodingUtils.m in Sources */, - 5FF9DE1B28EE78A700D62DE1 /* BNCInitSessionResponse.m in Sources */, - 5FF9DE1D28EE78A700D62DE1 /* BNCJSONUtility.m in Sources */, - 5F51399A2AC21F6E004A3BA4 /* BNCRequestFactory.m in Sources */, - 5FF9DE1F28EE78A700D62DE1 /* BNCKeyChain.m in Sources */, - 5FF9DE2128EE78A700D62DE1 /* BNCLinkCache.m in Sources */, - 5FF9DE2328EE78A700D62DE1 /* BNCLinkData.m in Sources */, - 5F1B240C29148CBD003BEEC7 /* BranchPasteControl.m in Sources */, - C1BE79802A9E707200E15EDF /* BNCCurrency.m in Sources */, - 5FF9DE2728EE78A800D62DE1 /* BNCLog.m in Sources */, - 5FF9DE2928EE78A800D62DE1 /* BNCNetworkInterface.m in Sources */, - 5FF9DE2B28EE78A800D62DE1 /* BNCNetworkService.m in Sources */, - 5FF9DE2E28EE78A800D62DE1 /* BNCPartnerParameters.m in Sources */, - 5FF9DE3028EE78A800D62DE1 /* BNCPasteboard.m in Sources */, - 5FF9DE3228EE78A800D62DE1 /* BNCPreferenceHelper.m in Sources */, - 5FF9DE3428EE78A800D62DE1 /* BNCQRCodeCache.m in Sources */, - 5FF9DE3628EE78A800D62DE1 /* BNCReachability.m in Sources */, - 5FF9DE3828EE78A800D62DE1 /* BNCServerInterface.m in Sources */, - 5FF9DE3A28EE78A800D62DE1 /* BNCServerRequest.m in Sources */, - 5FF9DE3C28EE78A800D62DE1 /* BNCServerRequestQueue.m in Sources */, - 5FF9DE3E28EE78A800D62DE1 /* BNCServerResponse.m in Sources */, - 5FF9DE4028EE78A800D62DE1 /* BNCSKAdNetwork.m in Sources */, - 5FF9DE4228EE78A800D62DE1 /* BNCSpotlightService.m in Sources */, - 5FF9DE4428EE78A800D62DE1 /* BNCSystemObserver.m in Sources */, - 5FF9DE4828EE78A800D62DE1 /* BNCThreads.m in Sources */, - 5FF9DE4C28EE78A800D62DE1 /* BNCURLFilter.m in Sources */, - 5FF9DE4E28EE78A800D62DE1 /* BNCUserAgentCollector.m in Sources */, - 5FF9DE5028EE78A800D62DE1 /* Branch.m in Sources */, - 5FF9DE5228EE78A800D62DE1 /* Branch+Validator.m in Sources */, - 5FF9DE5428EE78A800D62DE1 /* BranchActivityItemProvider.m in Sources */, - 5FF9DE5828EE78A800D62DE1 /* BranchConstants.m in Sources */, - 5FF9DE5A28EE78A800D62DE1 /* BranchContentDiscoverer.m in Sources */, - 5FF9DE5C28EE78A800D62DE1 /* BranchContentDiscoveryManifest.m in Sources */, - 5FF9DE5E28EE78A800D62DE1 /* BranchContentPathProperties.m in Sources */, - C1BE79842A9E708F00E15EDF /* BNCProductCategory.m in Sources */, - 5FF9DE6428EE78A800D62DE1 /* BranchCSSearchableItemAttributeSet.m in Sources */, - 5FF9DE6728EE78A800D62DE1 /* BranchDelegate.m in Sources */, - 5FF9DE6928EE78A800D62DE1 /* BranchEvent.m in Sources */, - 5FF9DE6B28EE78A800D62DE1 /* BranchInstallRequest.m in Sources */, - 5FF9DE6D28EE78A800D62DE1 /* BranchJsonConfig.m in Sources */, - 5FF9DE6F28EE78A800D62DE1 /* BranchLastAttributedTouchData.m in Sources */, - E7653F062A9E737700C7C040 /* BNCServerAPI.m in Sources */, - 5FF9DE7128EE78A800D62DE1 /* BranchLATDRequest.m in Sources */, - 5FF9DE7328EE78A800D62DE1 /* BranchLinkProperties.m in Sources */, - 5FF9DE7728EE78A800D62DE1 /* BranchOpenRequest.m in Sources */, - 5FF9DE7928EE78A800D62DE1 /* BranchPluginSupport.m in Sources */, - 5FF9DE7B28EE78A800D62DE1 /* BranchQRCode.m in Sources */, - 5FF9DE7F28EE78A800D62DE1 /* BranchScene.m in Sources */, - 5FF9DE8328EE78A800D62DE1 /* BranchShareLink.m in Sources */, - 5FF9DE8528EE78A800D62DE1 /* BranchShortUrlRequest.m in Sources */, - 5FF9DE8728EE78A800D62DE1 /* BranchShortUrlSyncRequest.m in Sources */, - 5FF9DE9628EE790300D62DE1 /* BranchSpotlightUrlRequest.m in Sources */, - 5FF9DE8B28EE78A800D62DE1 /* BranchUniversalObject.m in Sources */, - 5FF9DE8F28EE78A800D62DE1 /* NSError+Branch.m in Sources */, - 5FF9DE9128EE78A800D62DE1 /* NSMutableDictionary+Branch.m in Sources */, - 5FF9DE9328EE78A800D62DE1 /* NSString+Branch.m in Sources */, - 5FF9DE9528EE78A800D62DE1 /* UIViewController+Branch.m in Sources */, + 5FCDD5AD2B7AC6A400EAF29F /* BNCCallbackMap.m in Sources */, + 5FCDD40F2B7AC6A100EAF29F /* BNCApplication.m in Sources */, + 5FCDD5652B7AC6A300EAF29F /* BranchDelegate.m in Sources */, + 5F5FDA172B7DE2FE00F14A43 /* BranchLogger.m in Sources */, + 5FCDD58C2B7AC6A400EAF29F /* BNCSpotlightService.m in Sources */, + 5FCDD4152B7AC6A100EAF29F /* NSMutableDictionary+Branch.m in Sources */, + 5FCDD4092B7AC6A100EAF29F /* BranchUniversalObject.m in Sources */, + 5FCDD4812B7AC6A100EAF29F /* BNCKeyChain.m in Sources */, + 5FCDD46F2B7AC6A100EAF29F /* BranchJsonConfig.m in Sources */, + 5FCDD4752B7AC6A100EAF29F /* BNCPartnerParameters.m in Sources */, + 5FCDD4722B7AC6A100EAF29F /* BranchLATDRequest.m in Sources */, + 5FCDD57D2B7AC6A400EAF29F /* BNCPasteboard.m in Sources */, + 5FCDD47B2B7AC6A100EAF29F /* BranchActivityItemProvider.m in Sources */, + 5FCDD4782B7AC6A100EAF29F /* BranchCSSearchableItemAttributeSet.m in Sources */, + 5FCDD4602B7AC6A100EAF29F /* BNCRequestFactory.m in Sources */, + 5FCDD41E2B7AC6A100EAF29F /* BNCDeepLinkViewControllerInstance.m in Sources */, + 5FCDD5892B7AC6A400EAF29F /* BNCLinkCache.m in Sources */, + 5FCDD56E2B7AC6A400EAF29F /* BNCJSONUtility.m in Sources */, + 5FCDD4662B7AC6A100EAF29F /* BNCProductCategory.m in Sources */, + 5FCDD56B2B7AC6A400EAF29F /* Branch.m in Sources */, + 5FCDD42A2B7AC6A100EAF29F /* BranchInstallRequest.m in Sources */, + 5FCDD4272B7AC6A100EAF29F /* Branch+Validator.m in Sources */, + 5FCDD4032B7AC6A100EAF29F /* BNCUserAgentCollector.m in Sources */, + 5FCDD5772B7AC6A400EAF29F /* BNCSKAdNetwork.m in Sources */, + 5FCDD4452B7AC6A100EAF29F /* BNCConfig.m in Sources */, + 5FCDD4542B7AC6A100EAF29F /* BranchContentDiscoverer.m in Sources */, + 5FCDD4122B7AC6A100EAF29F /* BNCDeviceSystem.m in Sources */, + 5FCDD4002B7AC6A100EAF29F /* NSError+Branch.m in Sources */, + 5FCDD5982B7AC6A400EAF29F /* BNCAppGroupsData.m in Sources */, + 5FCDD40C2B7AC6A100EAF29F /* BranchPasteControl.m in Sources */, + 5FCDD5B02B7AC6A400EAF29F /* BNCEventUtils.m in Sources */, + 5FCDD44E2B7AC6A100EAF29F /* BranchSpotlightUrlRequest.m in Sources */, + 5FCDD47E2B7AC6A100EAF29F /* BranchQRCode.m in Sources */, + 5FCDD4332B7AC6A100EAF29F /* BNCSystemObserver.m in Sources */, + 5FCDD42D2B7AC6A100EAF29F /* BranchPluginSupport.m in Sources */, + 5FCDD5A72B7AC6A400EAF29F /* BNCQRCodeCache.m in Sources */, + 5FCDD45D2B7AC6A100EAF29F /* BNCReachability.m in Sources */, + 5FCDD4302B7AC6A100EAF29F /* NSString+Branch.m in Sources */, + 5FCDD5A12B7AC6A400EAF29F /* BranchShortUrlRequest.m in Sources */, + 5FCDD46C2B7AC6A100EAF29F /* BNCServerInterface.m in Sources */, + 5FCDD4212B7AC6A100EAF29F /* BranchScene.m in Sources */, + 5FCDD4062B7AC6A100EAF29F /* BNCEncodingUtils.m in Sources */, + 5FCDD4572B7AC6A100EAF29F /* BNCDeviceInfo.m in Sources */, + 5FCDD41B2B7AC6A100EAF29F /* BNCUrlQueryParameter.m in Sources */, + 5FCDD58F2B7AC6A400EAF29F /* BNCServerAPI.m in Sources */, + 5FCDD4482B7AC6A100EAF29F /* BranchConstants.m in Sources */, + 5FCDD5712B7AC6A400EAF29F /* BNCCurrency.m in Sources */, + 5FCDD5AA2B7AC6A400EAF29F /* BranchShortUrlSyncRequest.m in Sources */, + 5FCDD4242B7AC6A100EAF29F /* BNCContentDiscoveryManager.m in Sources */, + 5FCDD4392B7AC6A100EAF29F /* BNCURLFilter.m in Sources */, + 5FCDD5742B7AC6A400EAF29F /* BranchLastAttributedTouchData.m in Sources */, + 5FCDD43F2B7AC6A100EAF29F /* BNCNetworkInterface.m in Sources */, + 5FCDD45A2B7AC6A100EAF29F /* BNCNetworkService.m in Sources */, + 5FCDD5952B7AC6A400EAF29F /* UIViewController+Branch.m in Sources */, + 5FCDD4182B7AC6A100EAF29F /* BNCServerRequestQueue.m in Sources */, + 5FCDD5A42B7AC6A400EAF29F /* BranchOpenRequest.m in Sources */, + 5FCDD5682B7AC6A400EAF29F /* BNCLinkData.m in Sources */, + 5FCDD44B2B7AC6A100EAF29F /* BranchContentDiscoveryManifest.m in Sources */, + 5FCDD4692B7AC6A100EAF29F /* BNCCrashlyticsWrapper.m in Sources */, + 5FCDD5922B7AC6A400EAF29F /* BranchShareLink.m in Sources */, + 5FCDD43C2B7AC6A100EAF29F /* BNCServerRequest.m in Sources */, + 5FCDD5832B7AC6A400EAF29F /* BranchLinkProperties.m in Sources */, + 5FCDD59E2B7AC6A400EAF29F /* BranchEvent.m in Sources */, + 5FCDD5802B7AC6A400EAF29F /* BNCAppleReceipt.m in Sources */, + 5FCDD4632B7AC6A100EAF29F /* BNCReferringURLUtility.m in Sources */, + 5FCDD59B2B7AC6A400EAF29F /* BNCServerResponse.m in Sources */, + 5FCDD5862B7AC6A400EAF29F /* BNCInitSessionResponse.m in Sources */, + 5FCDD4422B7AC6A100EAF29F /* BNCPreferenceHelper.m in Sources */, + 5FCDD57A2B7AC6A400EAF29F /* BranchContentPathProperties.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1714,66 +1733,68 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - C1B63C8729D34FEA00D1136D /* BNCReferringURLUtility.m in Sources */, - C1B63C8829D34FEB00D1136D /* BNCUrlQueryParameter.m in Sources */, - 5F7903F028B5C93E003144CD /* BNCDeepLinkViewControllerInstance.m in Sources */, - 5F7903F128B5C93E003144CD /* BNCDeviceInfo.m in Sources */, - 5F7903F228B5C93E003144CD /* BNCDeviceSystem.m in Sources */, - 5F7903F328B5C93E003144CD /* BNCEncodingUtils.m in Sources */, - 5F7903F528B5C93E003144CD /* BNCInitSessionResponse.m in Sources */, - 5F7903F628B5C93E003144CD /* BNCJSONUtility.m in Sources */, - 5F7903F728B5C93E003144CD /* BNCKeyChain.m in Sources */, - 5F7903F828B5C93E003144CD /* BNCLinkCache.m in Sources */, - 5F7903F928B5C93E003144CD /* BNCLinkData.m in Sources */, - E761E92329E61DA000E55C98 /* BNCEventUtils.m in Sources */, - 5F7903FB28B5C93E003144CD /* BNCLog.m in Sources */, - 5F7903FC28B5C93E003144CD /* BNCNetworkInterface.m in Sources */, - 5F7903FD28B5C93E003144CD /* BNCNetworkService.m in Sources */, - 5F7903FE28B5C93E003144CD /* BNCPartnerParameters.m in Sources */, - 5F7903FF28B5C93E003144CD /* BNCPasteboard.m in Sources */, - 5F79040028B5C93E003144CD /* BNCPreferenceHelper.m in Sources */, - 5F79040128B5C93E003144CD /* BNCQRCodeCache.m in Sources */, - 5F79040228B5C93E003144CD /* BNCReachability.m in Sources */, - C1BE79812A9E707300E15EDF /* BNCCurrency.m in Sources */, - 5F79040328B5C93E003144CD /* BNCServerInterface.m in Sources */, - 5F79040428B5C93E003144CD /* BNCServerRequest.m in Sources */, - 5F79040528B5C93E003144CD /* BNCServerRequestQueue.m in Sources */, - 5F79040628B5C93E003144CD /* BNCServerResponse.m in Sources */, - 5F79040728B5C93E003144CD /* BNCSKAdNetwork.m in Sources */, - 5F79040928B5C93E003144CD /* BNCSystemObserver.m in Sources */, - C1BE79852A9E709000E15EDF /* BNCProductCategory.m in Sources */, - 5F79040B28B5C93E003144CD /* BNCThreads.m in Sources */, - 5F79040D28B5C93E003144CD /* BNCURLFilter.m in Sources */, - 5F79040F28B5C93E003144CD /* Branch.m in Sources */, - 5F79041028B5C93E003144CD /* Branch+Validator.m in Sources */, - 5F79041328B5C93E003144CD /* BranchConstants.m in Sources */, - 5F51399B2AC21F6E004A3BA4 /* BNCRequestFactory.m in Sources */, - 5F79041A28B5C93E003144CD /* BranchDelegate.m in Sources */, - 5F79041B28B5C93E003144CD /* BranchEvent.m in Sources */, - 5F79041C28B5C93E003144CD /* BranchInstallRequest.m in Sources */, - 5F79041D28B5C93E003144CD /* BranchJsonConfig.m in Sources */, - 5F79041E28B5C93E003144CD /* BranchLastAttributedTouchData.m in Sources */, - 5F79041F28B5C93E003144CD /* BranchLATDRequest.m in Sources */, - 5F79042028B5C93E003144CD /* BranchLinkProperties.m in Sources */, - 5F79042228B5C93F003144CD /* BranchOpenRequest.m in Sources */, - 5F79042328B5C93F003144CD /* BranchPluginSupport.m in Sources */, - 5F79042428B5C93F003144CD /* BranchQRCode.m in Sources */, - 5F79042628B5C93F003144CD /* BranchScene.m in Sources */, - 5F79042928B5C93F003144CD /* BranchShortUrlRequest.m in Sources */, - 5F79042A28B5C93F003144CD /* BranchShortUrlSyncRequest.m in Sources */, - 5F79042B28B5C93F003144CD /* BranchSpotlightUrlRequest.m in Sources */, - 5F79042C28B5C93F003144CD /* BranchUniversalObject.m in Sources */, - E7653F072A9E737700C7C040 /* BNCServerAPI.m in Sources */, - 5F79042E28B5C93F003144CD /* NSError+Branch.m in Sources */, - 5F79042F28B5C93F003144CD /* NSMutableDictionary+Branch.m in Sources */, - 5F79043028B5C93F003144CD /* NSString+Branch.m in Sources */, - 5F79043128B5C93F003144CD /* UIViewController+Branch.m in Sources */, - 5F7903E528B5A166003144CD /* BNCAppGroupsData.m in Sources */, - 5F7903E728B5A166003144CD /* BNCAppleReceipt.m in Sources */, - 5F7903E928B5A166003144CD /* BNCApplication.m in Sources */, - 5F7903EB28B5A166003144CD /* BNCCallbackMap.m in Sources */, - 5F7903ED28B5A166003144CD /* BNCConfig.m in Sources */, - 5F7903EF28B5A166003144CD /* BNCCrashlyticsWrapper.m in Sources */, + 5FCDD5AE2B7AC6A400EAF29F /* BNCCallbackMap.m in Sources */, + 5FCDD4102B7AC6A100EAF29F /* BNCApplication.m in Sources */, + 5FCDD5662B7AC6A300EAF29F /* BranchDelegate.m in Sources */, + 5FCDD4162B7AC6A100EAF29F /* NSMutableDictionary+Branch.m in Sources */, + 5FCDD40A2B7AC6A100EAF29F /* BranchUniversalObject.m in Sources */, + 5FCDD4822B7AC6A100EAF29F /* BNCKeyChain.m in Sources */, + 5FCDD4702B7AC6A100EAF29F /* BranchJsonConfig.m in Sources */, + 5FCDD4762B7AC6A100EAF29F /* BNCPartnerParameters.m in Sources */, + 5FCDD4732B7AC6A100EAF29F /* BranchLATDRequest.m in Sources */, + 5FCDD57E2B7AC6A400EAF29F /* BNCPasteboard.m in Sources */, + 5F5FDA182B7DE2FE00F14A43 /* BranchLogger.m in Sources */, + 5FCDD4612B7AC6A100EAF29F /* BNCRequestFactory.m in Sources */, + 5FCDD41F2B7AC6A100EAF29F /* BNCDeepLinkViewControllerInstance.m in Sources */, + 5FCDD58A2B7AC6A400EAF29F /* BNCLinkCache.m in Sources */, + 5FCDD56F2B7AC6A400EAF29F /* BNCJSONUtility.m in Sources */, + 5FCDD4672B7AC6A100EAF29F /* BNCProductCategory.m in Sources */, + 5FCDD56C2B7AC6A400EAF29F /* Branch.m in Sources */, + 5FCDD42B2B7AC6A100EAF29F /* BranchInstallRequest.m in Sources */, + 5FCDD4282B7AC6A100EAF29F /* Branch+Validator.m in Sources */, + 5FCDD5782B7AC6A400EAF29F /* BNCSKAdNetwork.m in Sources */, + 5FCDD4462B7AC6A100EAF29F /* BNCConfig.m in Sources */, + 5FCDD4552B7AC6A100EAF29F /* BranchContentDiscoverer.m in Sources */, + 5FCDD4132B7AC6A100EAF29F /* BNCDeviceSystem.m in Sources */, + 5FCDD4012B7AC6A100EAF29F /* NSError+Branch.m in Sources */, + 5FCDD5992B7AC6A400EAF29F /* BNCAppGroupsData.m in Sources */, + 5FCDD5B12B7AC6A400EAF29F /* BNCEventUtils.m in Sources */, + 5FCDD44F2B7AC6A100EAF29F /* BranchSpotlightUrlRequest.m in Sources */, + 5FCDD47F2B7AC6A100EAF29F /* BranchQRCode.m in Sources */, + 5FCDD4342B7AC6A100EAF29F /* BNCSystemObserver.m in Sources */, + 5FCDD42E2B7AC6A100EAF29F /* BranchPluginSupport.m in Sources */, + 5FCDD5A82B7AC6A400EAF29F /* BNCQRCodeCache.m in Sources */, + 5FCDD45E2B7AC6A100EAF29F /* BNCReachability.m in Sources */, + 5FCDD4312B7AC6A100EAF29F /* NSString+Branch.m in Sources */, + 5FCDD5A22B7AC6A400EAF29F /* BranchShortUrlRequest.m in Sources */, + 5FCDD46D2B7AC6A100EAF29F /* BNCServerInterface.m in Sources */, + 5FCDD4222B7AC6A100EAF29F /* BranchScene.m in Sources */, + 5FCDD4072B7AC6A100EAF29F /* BNCEncodingUtils.m in Sources */, + 5FCDD4582B7AC6A100EAF29F /* BNCDeviceInfo.m in Sources */, + 5FCDD41C2B7AC6A100EAF29F /* BNCUrlQueryParameter.m in Sources */, + 5FCDD5902B7AC6A400EAF29F /* BNCServerAPI.m in Sources */, + 5FCDD4492B7AC6A100EAF29F /* BranchConstants.m in Sources */, + 5FCDD5722B7AC6A400EAF29F /* BNCCurrency.m in Sources */, + 5FCDD5AB2B7AC6A400EAF29F /* BranchShortUrlSyncRequest.m in Sources */, + 5FCDD43A2B7AC6A100EAF29F /* BNCURLFilter.m in Sources */, + 5FCDD5752B7AC6A400EAF29F /* BranchLastAttributedTouchData.m in Sources */, + 5FCDD4402B7AC6A100EAF29F /* BNCNetworkInterface.m in Sources */, + 5FCDD45B2B7AC6A100EAF29F /* BNCNetworkService.m in Sources */, + 5FCDD5962B7AC6A400EAF29F /* UIViewController+Branch.m in Sources */, + 5FCDD4192B7AC6A100EAF29F /* BNCServerRequestQueue.m in Sources */, + 5FCDD5A52B7AC6A400EAF29F /* BranchOpenRequest.m in Sources */, + 5FCDD5692B7AC6A400EAF29F /* BNCLinkData.m in Sources */, + 5FCDD44C2B7AC6A100EAF29F /* BranchContentDiscoveryManifest.m in Sources */, + 5FCDD46A2B7AC6A100EAF29F /* BNCCrashlyticsWrapper.m in Sources */, + 5FCDD43D2B7AC6A100EAF29F /* BNCServerRequest.m in Sources */, + 5FCDD5842B7AC6A400EAF29F /* BranchLinkProperties.m in Sources */, + 5FCDD59F2B7AC6A400EAF29F /* BranchEvent.m in Sources */, + 5FCDD5812B7AC6A400EAF29F /* BNCAppleReceipt.m in Sources */, + 5FCDD4642B7AC6A100EAF29F /* BNCReferringURLUtility.m in Sources */, + 5FCDD59C2B7AC6A400EAF29F /* BNCServerResponse.m in Sources */, + 5FCDD5872B7AC6A400EAF29F /* BNCInitSessionResponse.m in Sources */, + 5FCDD4432B7AC6A100EAF29F /* BNCPreferenceHelper.m in Sources */, + 5FCDD57B2B7AC6A400EAF29F /* BranchContentPathProperties.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1953,7 +1974,11 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MARKETING_VERSION = 3.0.0; + MARKETING_VERSION = 3.4.3; + OTHER_LDFLAGS = ( + "-weak_framework", + LinkPresentation, + ); PRODUCT_BUNDLE_IDENTIFIER = io.branch.BranchSDK; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -1984,7 +2009,11 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MARKETING_VERSION = 3.0.0; + MARKETING_VERSION = 3.4.3; + OTHER_LDFLAGS = ( + "-weak_framework", + LinkPresentation, + ); PRODUCT_BUNDLE_IDENTIFIER = io.branch.BranchSDK; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -2186,7 +2215,11 @@ "@loader_path/Frameworks", ); MACH_O_TYPE = staticlib; - MARKETING_VERSION = 3.0.0; + MARKETING_VERSION = 3.4.3; + OTHER_LDFLAGS = ( + "-weak_framework", + LinkPresentation, + ); PRODUCT_BUNDLE_IDENTIFIER = io.branch.BranchSDK; PRODUCT_MODULE_NAME = BranchSDK; PRODUCT_NAME = BranchSDK; @@ -2221,7 +2254,11 @@ "@loader_path/Frameworks", ); MACH_O_TYPE = staticlib; - MARKETING_VERSION = 3.0.0; + MARKETING_VERSION = 3.4.3; + OTHER_LDFLAGS = ( + "-weak_framework", + LinkPresentation, + ); PRODUCT_BUNDLE_IDENTIFIER = io.branch.BranchSDK; PRODUCT_MODULE_NAME = BranchSDK; PRODUCT_NAME = BranchSDK; @@ -2254,7 +2291,11 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MARKETING_VERSION = 3.0.0; + MARKETING_VERSION = 3.4.3; + OTHER_LDFLAGS = ( + "-weak_framework", + LinkPresentation, + ); PRODUCT_BUNDLE_IDENTIFIER = io.branch.BranchSDK; PRODUCT_NAME = BranchSDK; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -2285,7 +2326,11 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MARKETING_VERSION = 3.0.0; + MARKETING_VERSION = 3.4.3; + OTHER_LDFLAGS = ( + "-weak_framework", + LinkPresentation, + ); PRODUCT_BUNDLE_IDENTIFIER = io.branch.BranchSDK; PRODUCT_NAME = BranchSDK; PROVISIONING_PROFILE_SPECIFIER = ""; diff --git a/BranchSDK/BNCFieldDefines.h b/BranchSDK/BNCFieldDefines.h deleted file mode 100644 index 50f7eea85..000000000 --- a/BranchSDK/BNCFieldDefines.h +++ /dev/null @@ -1,186 +0,0 @@ -// -// BNCFieldDefines.h -// Branch-TestBed -// -// Created by edward on 8/17/17. -// Copyright © 2017 Branch Metrics. All rights reserved. -// - -#if defined(addString) // -------------------------------------------------------------------------- - - // Already defined so undefine them: - - #undef addString - #undef addDate - #undef addDouble - #undef addBoolean - #undef addDecimal - #undef addNumber - #undef addInteger - #undef addStringifiedDictionary - #undef addStringArray - #undef addDictionary - #undef BNCFieldDefinesObjectFromDictionary - #undef BNCFieldDefinesDictionaryFromSelf - -#elif defined(BNCFieldDefinesObjectFromDictionary) // ---------------------------------------------- - - #define addString(field, name) { \ - NSString *string = dictionary[@#name]; \ - if ([string isKindOfClass:[NSString class]]) { \ - object.field = string; \ - } \ - } - - #define addDate(field, name) { \ - NSNumber *number = dictionary[@#name]; \ - if ([number isKindOfClass:[NSNumber class]] || \ - [number isKindOfClass:[NSString class]]) { \ - NSTimeInterval t = [number doubleValue]; \ - if (t) object.field = [NSDate dateWithTimeIntervalSince1970:t/1000.0]; \ - } \ - } - - #define addDouble(field, name) { \ - NSNumber *number = dictionary[@#name]; \ - if ([number isKindOfClass:[NSNumber class]] || \ - [number isKindOfClass:[NSString class]]) { \ - object.field = [number doubleValue]; \ - } \ - } - - #define addBoolean(field, name) { \ - NSNumber *number = dictionary[@#name]; \ - if ([number isKindOfClass:[NSNumber class]] || \ - [number isKindOfClass:[NSString class]]) { \ - object.field = [number boolValue]; \ - } \ - } - - #define addDecimal(field, name) { \ - NSString *string = dictionary[@#name]; \ - if ([string isKindOfClass:[NSNumber class]]) \ - string = [string description]; \ - if ([string isKindOfClass:[NSString class]]) { \ - object.field = [NSDecimalNumber decimalNumberWithString:string]; \ - } \ - } - - #define addNumber(field, name) { \ - NSNumber *number = dictionary[@#name]; \ - if ([number isKindOfClass:[NSString class]]) \ - number = [number doubleValue]; \ - if ([number isKindOfClass:[NSNumber class]]) { \ - object.field = number; \ - } \ - } - - #define addInteger(field, name) { \ - NSNumber *number = dictionary[@#name]; \ - if ([number isKindOfClass:[NSNumber class]] || \ - [number isKindOfClass:[NSString class]]) { \ - object.field = [number integerValue]; \ - } \ - } - - #define addStringifiedDictionary(field, name) { \ - NSString *string = dictionary[@#name]; \ - if ([string isKindOfClass:[NSString class]]) { \ - NSDictionary *d = [BNCEncodingUtils decodeJsonStringToDictionary:string]; \ - object.field = [NSMutableDictionary dictionaryWithDictionary:d]; \ - } \ - } - - #define addStringArray(field, name) { \ - NSArray *a = dictionary[@#name]; \ - if ([a isKindOfClass:[NSArray class]]) { \ - NSMutableArray *newArray = [NSMutableArray array]; \ - for (NSString *s in a) { \ - if ([s isKindOfClass:[NSString class]]) { \ - [newArray addObject:s]; \ - } \ - } \ - object.field = newArray; \ - } else if ([a isKindOfClass:[NSString class]]) { \ - object.field = [NSMutableArray arrayWithObject:a]; \ - } else { \ - object.field = (id) [NSMutableArray new]; \ - } \ - } - - #define addDictionary(field, name) { \ - NSDictionary *d = dictionary[@#name]; \ - if ([d isKindOfClass:[NSDictionary class]]) { \ - object.field = [NSMutableDictionary dictionaryWithDictionary:d]; \ - } \ - } - -#elif defined(BNCFieldDefinesDictionaryFromSelf) // ---------------------------------------------- - - #define addString(field, name) { \ - if (self.field.length) { \ - dictionary[@#name] = self.field; \ - } \ - } - - #define addDate(field, name) { \ - if (self.field) { \ - NSTimeInterval t = self.field.timeIntervalSince1970; \ - dictionary[@#name] = [NSNumber numberWithLongLong:(long long)(t*1000.0)]; \ - } \ - } - - #define addDouble(field, name) { \ - if (self.field != 0.0) { \ - dictionary[@#name] = [NSNumber numberWithDouble:self.field]; \ - } \ - } - - #define addBoolean(field, name) { \ - if (self.field) { \ - dictionary[@#name] = (__bridge NSNumber*) kCFBooleanTrue; \ - } \ - } - - #define addDecimal(field, name) { \ - if (self.field) { \ - dictionary[@#name] = self.field; \ - } \ - } - - #define addNumber(field, name) { \ - if (self.field != nil) { \ - dictionary[@#name] = self.field; \ - } \ - } - - #define addInteger(field, name) { \ - if (self.field != 0) { \ - dictionary[@#name] = [NSNumber numberWithInteger:self.field]; \ - } \ - } - - #define addStringifiedDictionary(field, name) { \ - if (self.field.count) { \ - NSString *string = [BNCEncodingUtils encodeDictionaryToJsonString:self.field]; \ - dictionary[@#name] = string; \ - } \ - } - - #define addStringArray(field, name) { \ - if (self.field.count) { \ - dictionary[@#name] = self.field; \ - } \ - } - - #define addDictionary(field, name) { \ - if (self.field.count) { \ - dictionary[@#name] = self.field; \ - } \ - } - -#else - -//#error "Define either 'BNCFieldDefinesDictionaryFromObject' or 'BNCFieldDefinesObjectFromDictionary'. - -#endif diff --git a/BranchSDK/BNCLog.h b/BranchSDK/BNCLog.h deleted file mode 100644 index 4b20b5150..000000000 --- a/BranchSDK/BNCLog.h +++ /dev/null @@ -1,88 +0,0 @@ -/** - @file BNCLog.h - @package Branch-SDK - @brief Simple logging functions. - - @author Edward Smith - @date October 2016 - @copyright Copyright © 2016 Branch. All rights reserved. -*/ - -///@functiongroup Branch Logging Functions -#import - -#pragma mark Log Message Severity - -/// Log message severity -typedef NS_ENUM(NSInteger, BNCLogLevel) { - BNCLogLevelAll = 0, - BNCLogLevelDebugSDK = BNCLogLevelAll, - BNCLogLevelBreakPoint, - BNCLogLevelDebug, - BNCLogLevelWarning, - BNCLogLevelError, - BNCLogLevelAssert, - BNCLogLevelLog, - BNCLogLevelNone, - BNCLogLevelMax -}; - -/*! -* @return Returns the current log severity display level. -*/ -extern BNCLogLevel BNCLogDisplayLevel(void); - -/*! -* @param level Sets the current display level for log messages. -*/ -extern void BNCLogSetDisplayLevel(BNCLogLevel level); - -/*! -* @param level The log level to convert to a string. -* @return Returns the string indicating the log level. -*/ -extern NSString *_Nonnull BNCLogStringFromLogLevel(BNCLogLevel level); - -/*! -* @param string A string indicating the log level. -* @return Returns The log level corresponding to the string. -*/ -extern BNCLogLevel BNCLogLevelFromString(NSString*_Null_unspecified string); - -///@name Pre-defined log message handlers -- -typedef void (*BNCLogOutputFunctionPtr)(NSDate*_Nonnull timestamp, BNCLogLevel level, NSString*_Nullable message); - -///@param functionPtr A pointer to the logging function. Setting the parameter to NULL will flush -/// and close the currently set log function and future log messages will be -/// ignored until a non-NULL logging function is set. -extern void BNCLogSetOutputFunction(BNCLogOutputFunctionPtr _Nullable functionPtr); - -#pragma mark - BNCLogWriteMessage - -/// The main logging function used in the variadic logging defines. -extern void BNCLogWriteMessage( - BNCLogLevel logLevel, - const char *_Nullable sourceFileName, - int32_t sourceLineNumber, - NSString *_Nullable message -); - -///@param format Log an info message -#define BNCLogDebugSDK(...) \ - do { BNCLogWriteMessage(BNCLogLevelDebugSDK, __FILE__, __LINE__, __VA_ARGS__); } while (0) - -///@param format Log a debug message -#define BNCLogDebug(...) \ - do { BNCLogWriteMessage(BNCLogLevelDebug, __FILE__, __LINE__, __VA_ARGS__); } while (0) - -///@param format Log a warning message -#define BNCLogWarning(...) \ - do { BNCLogWriteMessage(BNCLogLevelWarning, __FILE__, __LINE__, __VA_ARGS__); } while (0) - -///@param format Log an error message -#define BNCLogError(...) \ - do { BNCLogWriteMessage(BNCLogLevelError, __FILE__, __LINE__, __VA_ARGS__); } while (0) - -///@param format Log a message -#define BNCLog(...) \ - do { BNCLogWriteMessage(BNCLogLevelLog, __FILE__, __LINE__, __VA_ARGS__); } while (0) diff --git a/BranchSDK/BNCLog.m b/BranchSDK/BNCLog.m deleted file mode 100644 index 110523860..000000000 --- a/BranchSDK/BNCLog.m +++ /dev/null @@ -1,109 +0,0 @@ -/** - @file BNCLog.m - @package Branch-SDK - @brief Simple logging functions. - - @author Edward Smith - @date October 2016 - @copyright Copyright © 2016 Branch. All rights reserved. -*/ - -#import "BNCLog.h" - -#define _countof(array) (sizeof(array)/sizeof(array[0])) - -static BNCLogOutputFunctionPtr bnc_LoggingFunction = nil; // Default to just NSLog output. - -// A fallback attempt at logging if an error occurs in BNCLog. -// BNCLog can't log itself, but if an error occurs it uses this simple define: -extern void BNCLogInternalError(NSString *message); -void BNCLogInternalError(NSString *message) { - NSLog(@"[branch.io] BNCLog.m (%d) Log error: %@", __LINE__, message); -} - -#pragma mark - Log Message Severity - -static BNCLogLevel bnc_LogDisplayLevel = BNCLogLevelWarning; - -BNCLogLevel BNCLogDisplayLevel(void) { - BNCLogLevel level = bnc_LogDisplayLevel; - return level; -} - -void BNCLogSetDisplayLevel(BNCLogLevel level) { - bnc_LogDisplayLevel = level; -} - -static NSString*const bnc_logLevelStrings[] = { - @"BNCLogLevelAll", - @"BNCLogLevelBreakPoint", - @"BNCLogLevelDebug", - @"BNCLogLevelWarning", - @"BNCLogLevelError", - @"BNCLogLevelAssert", - @"BNCLogLevelLog", - @"BNCLogLevelNone", - @"BNCLogLevelMax" -}; - -NSString* BNCLogStringFromLogLevel(BNCLogLevel level) { - level = MAX(MIN(level, BNCLogLevelMax), 0); - return bnc_logLevelStrings[level]; -} - -BNCLogLevel BNCLogLevelFromString(NSString*string) { - if (!string) return BNCLogLevelNone; - for (NSUInteger i = 0; i < _countof(bnc_logLevelStrings); ++i) { - if ([bnc_logLevelStrings[i] isEqualToString:string]) { - return i; - } - } - if ([string isEqualToString:@"BNCLogLevelDebugSDK"]) { - return BNCLogLevelDebugSDK; - } - return BNCLogLevelNone; -} - -void BNCLogSetOutputFunction(BNCLogOutputFunctionPtr _Nullable logFunction) { - bnc_LoggingFunction = logFunction; -} -#pragma mark - BNCLogInternal - -void BNCLogWriteMessage( - BNCLogLevel logLevel, - const char *_Nullable file, - int32_t lineNumber, - NSString *_Nullable message - ) { - if (!file) file = ""; - if (!message) message = @""; - if (![message isKindOfClass:[NSString class]]) { - message = [NSString stringWithFormat:@"0x%016llx <%@> %@", - (uint64_t) message, message.class, message.description]; - } - - NSString* filename = - [[NSString stringWithCString:file encoding:NSMacOSRomanStringEncoding] - lastPathComponent]; - - NSString * const logLevels[BNCLogLevelMax] = { - @"DebugSDK", - @"Break", - @"Debug", - @"Warning", - @"Error", - @"Assert", - @"Log", - @"None", - }; - - logLevel = MAX(MIN(logLevel, BNCLogLevelMax-1), 0); - NSString *levelString = logLevels[logLevel]; - NSString *s = [NSString stringWithFormat:@"[branch.io] %@(%d) %@: %@", filename, lineNumber, levelString, message]; - - if (logLevel >= bnc_LogDisplayLevel) { - NSLog(@"%@", s); // Upgrade this to unified logging when we can. - if (bnc_LoggingFunction) - bnc_LoggingFunction([NSDate date], logLevel, message); - } -} diff --git a/BranchSDK/BNCThreads.h b/BranchSDK/BNCThreads.h deleted file mode 100644 index 924a840dc..000000000 --- a/BranchSDK/BNCThreads.h +++ /dev/null @@ -1,43 +0,0 @@ -/** - @file BNCThreads.h - @package Branch-SDK - @brief Utilities for working with threads, queues, and blocks. - - @author Edward Smith - @date May 2018 - @copyright Copyright © 2018 Branch. All rights reserved. -*/ - -#if __has_feature(modules) -@import Foundation; -#else -#import -#endif - -///@group Blocks and Threads -#pragma mark - Blocks and Threads - -static inline dispatch_time_t BNCDispatchTimeFromSeconds(NSTimeInterval seconds) { - return dispatch_time(DISPATCH_TIME_NOW, (int64_t)seconds * NSEC_PER_SEC); -} - -static inline void BNCAfterSecondsPerformBlockOnMainThread(NSTimeInterval seconds, dispatch_block_t block) { - dispatch_after(BNCDispatchTimeFromSeconds(seconds), dispatch_get_main_queue(), block); -} - -static inline void BNCPerformBlockOnMainThreadAsync(dispatch_block_t block) { - dispatch_async(dispatch_get_main_queue(), block); -} - -static inline uint64_t BNCNanoSecondsFromTimeInterval(NSTimeInterval interval) { - return (uint64_t)(interval * ((NSTimeInterval) NSEC_PER_SEC)); -} - -static inline void BNCSleepForTimeInterval(NSTimeInterval seconds) { - double secPart = trunc(seconds); - double nanoPart = trunc((seconds - secPart) * ((double)NSEC_PER_SEC)); - struct timespec sleepTime; - sleepTime.tv_sec = (__typeof(sleepTime.tv_sec)) secPart; - sleepTime.tv_nsec = (__typeof(sleepTime.tv_nsec)) nanoPart; - nanosleep(&sleepTime, NULL); -} diff --git a/BranchSDK/BNCThreads.m b/BranchSDK/BNCThreads.m deleted file mode 100644 index 53d0aae5b..000000000 --- a/BranchSDK/BNCThreads.m +++ /dev/null @@ -1,11 +0,0 @@ -/** - @file BNCThreads.m - @package Branch-SDK - @brief Utilities for working with threads, queues, and blocks. - - @author Edward Smith - @date May 2018 - @copyright Copyright © 2018 Branch. All rights reserved. -*/ - -#import "BNCThreads.h" diff --git a/BranchSDK/BNCURLFilter.m b/BranchSDK/BNCURLFilter.m deleted file mode 100644 index 0fa5c31ec..000000000 --- a/BranchSDK/BNCURLFilter.m +++ /dev/null @@ -1,182 +0,0 @@ -/** - @file BNCURLFilter.m - @package Branch-SDK - @brief Manages a list of URLs that we should ignore. - - @author Edward Smith - @date February 14, 2018 - @copyright Copyright © 2018 Branch. All rights reserved. -*/ - -#import "BNCURLFilter.h" -#import "Branch.h" -#import "BNCLog.h" - -@interface BNCURLFilter () { - NSArray*_patternList; -} -@property (strong, nonatomic) NSArray *ignoredURLRegex; -@property (assign, nonatomic) NSInteger listVersion; -@property (strong, nonatomic) id networkService; -@property (assign, nonatomic) BOOL hasUpdatedPatternList; -@property (strong, nonatomic) NSError *error; -@property (strong, nonatomic) NSURL *jsonURL; -@end - -@implementation BNCURLFilter - -- (instancetype) init { - self = [super init]; - if (!self) return self; - - self.patternList = @[ - @"^fb\\d+:((?!campaign_ids).)*$", - @"^li\\d+:", - @"^pdk\\d+:", - @"^twitterkit-.*:", - @"^com\\.googleusercontent\\.apps\\.\\d+-.*:\\/oauth", - @"^(?i)(?!(http|https):).*(:|:.*\\b)(password|o?auth|o?auth.?token|access|access.?token)\\b", - @"^(?i)((http|https):\\/\\/).*[\\/|?|#].*\\b(password|o?auth|o?auth.?token|access|access.?token)\\b", - ]; - self.listVersion = -1; // First time always refresh the list version, version 0. - - NSArray *storedList = [BNCPreferenceHelper sharedInstance].savedURLPatternList; - if (storedList.count > 0) { - self.patternList = storedList; - self.listVersion = [BNCPreferenceHelper sharedInstance].savedURLPatternListVersion; - } - - NSError *error = nil; - _ignoredURLRegex = [self.class compileRegexArray:self.patternList error:&error]; - self.error = error; - - return self; -} - -- (void) dealloc { - [self.networkService cancelAllOperations]; - self.networkService = nil; -} - -- (void) setPatternList:(NSArray *)patternList { - @synchronized (self) { - _patternList = patternList; - _ignoredURLRegex = [self.class compileRegexArray:_patternList error:nil]; - } -} - -- (NSArray*) patternList { - @synchronized (self) { - return _patternList; - } -} - -+ (NSArray*) compileRegexArray:(NSArray*)patternList - error:(NSError*_Nullable __autoreleasing *_Nullable)error_ { - if (error_) *error_ = nil; - NSMutableArray *array = [NSMutableArray new]; - for (NSString *pattern in patternList) { - NSError *error = nil; - NSRegularExpression *regex = - [NSRegularExpression regularExpressionWithPattern:pattern - options: NSRegularExpressionAnchorsMatchLines | NSRegularExpressionUseUnicodeWordBoundaries - error:&error]; - if (error || !regex) { - BNCLogError([NSString stringWithFormat:@"Invalid regular expression '%@': %@.", pattern, error]); - if (error_ && !*error_) *error_ = error; - } else { - [array addObject:regex]; - } - } - return array; -} - -- (NSString*_Nullable) patternMatchingURL:(NSURL*_Nullable)url { - NSString *urlString = url.absoluteString; - if (urlString == nil || urlString.length <= 0) return nil; - NSRange range = NSMakeRange(0, urlString.length); - - for (NSRegularExpression* regex in self.ignoredURLRegex) { - NSUInteger matches = [regex numberOfMatchesInString:urlString options:0 range:range]; - if (matches > 0) return regex.pattern; - } - - return nil; -} - -- (BOOL) shouldIgnoreURL:(NSURL *)url { - return ([self patternMatchingURL:url]) ? YES : NO; -} - -- (void) updatePatternList { - [self updatePatternListWithCompletion:nil]; -} - -- (void) updatePatternListWithCompletion:(void (^) (NSError*error, NSArray*list))completion { - @synchronized(self) { - if (self.hasUpdatedPatternList) { - if (completion) completion(self.error, self.patternList); - return; - } - self.hasUpdatedPatternList = YES; - } - - self.error = nil; - NSString *urlString = [self.jsonURL absoluteString]; - if (!urlString) { - urlString = [NSString stringWithFormat:@"%@/sdk/uriskiplist_v%ld.json", [BNCPreferenceHelper sharedInstance].patternListURL, (long) self.listVersion+1]; - } - NSMutableURLRequest *request = - [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlString] - cachePolicy:NSURLRequestReloadIgnoringLocalCacheData - timeoutInterval:30.0]; - - self.networkService = [[Branch networkServiceClass] new]; - id operation = - [self.networkService networkOperationWithURLRequest:request completion: - ^(id operation) { - [self processServerOperation:operation]; - if (completion) completion(self.error, self.patternList); - [self.networkService cancelAllOperations]; - self.networkService = nil; - } - ]; - [operation start]; -} - -- (void) processServerOperation:(id)operation { - NSError *error = nil; - NSString *responseString = nil; - if (operation.responseData) - responseString = [[NSString alloc] initWithData:operation.responseData encoding:NSUTF8StringEncoding]; - if (operation.response.statusCode == 404) { - BNCLogDebugSDK(@"No new URL ignore list found."); - } else { - BNCLogDebugSDK([NSString stringWithFormat:@"URL ignore list update result. Error: %@ status: %ld body:\n%@.", - operation.error, (long)operation.response.statusCode, responseString]); - } - if (operation.error || operation.responseData == nil || operation.response.statusCode != 200) { - self.error = operation.error; - return; - } - - NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:operation.responseData options:0 error:&error]; - if (error) { - self.error = error; - BNCLogError([NSString stringWithFormat:@"Can't parse JSON: %@.", error]); - return; - } - - NSArray *urls = dictionary[@"uri_skip_list"]; - if (![urls isKindOfClass:NSArray.class]) return; - - NSNumber *version = dictionary[@"version"]; - if (![version isKindOfClass:NSNumber.class]) return; - - self.patternList = urls; - self.listVersion = [version longValue]; - [BNCPreferenceHelper sharedInstance].savedURLPatternList = self.patternList; - [BNCPreferenceHelper sharedInstance].savedURLPatternListVersion = self.listVersion; -} - -@end diff --git a/BranchSDK/NSMutableDictionary+Branch.h b/BranchSDK/NSMutableDictionary+Branch.h deleted file mode 100644 index 6a0feef1e..000000000 --- a/BranchSDK/NSMutableDictionary+Branch.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// NSMutableDictionary+Branch.h -// Branch -// -// Created by Edward Smith on 1/11/17. -// Copyright © 2017 Branch Metrics. All rights reserved. -// - -#if __has_feature(modules) -@import Foundation; -#else -#import -#endif - -void BNCForceNSMutableDictionaryCategoryToLoad(void) __attribute__((constructor)); - -@interface NSMutableDictionary (Branch) - -- (void) bnc_safeSetObject:(id)anObject forKey:(id)aKey; -- (void) bnc_safeAddEntriesFromDictionary:(NSDictionary,id> *)otherDictionary; - -@end diff --git a/BranchSDK/NSMutableDictionary+Branch.m b/BranchSDK/NSMutableDictionary+Branch.m deleted file mode 100644 index 9815a267b..000000000 --- a/BranchSDK/NSMutableDictionary+Branch.m +++ /dev/null @@ -1,36 +0,0 @@ -// -// NSMutableDictionary+Branch.m -// Branch -// -// Created by Edward Smith on 1/11/17. -// Copyright © 2017 Branch Metrics. All rights reserved. -// - - -#import "NSMutableDictionary+Branch.h" - - -@implementation NSMutableDictionary (Branch) - -- (void) bnc_safeSetObject:(id)anObject forKey:(id)aKey { - if (anObject && aKey) { - [self setObject:anObject forKey:aKey]; - } -} - -- (void) bnc_safeAddEntriesFromDictionary:(NSDictionary,id> *)otherDictionary { - if ([otherDictionary isKindOfClass:[NSDictionary class]]) { - NSDictionary *deepCopy = - [[NSDictionary alloc] - initWithDictionary:otherDictionary - copyItems:YES]; - [self addEntriesFromDictionary:deepCopy]; - } -} - -@end - - -__attribute__((constructor)) void BNCForceNSMutableDictionaryCategoryToLoad(void) { - // Does nothing. But will force the linker to include this category. -} diff --git a/ChangeLog.md b/ChangeLog.md index 4d3aa4a2f..5a897be76 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -1,6 +1,44 @@ Branch iOS SDK Change Log -V.3.0.0 +v.3.4.3 +- Fix push notifications when app is backgrounded and the app uses `handlePushNotification` instead of `handleDeeplink` + +v.3.4.2 +- Fix tvOS when using SPM + +v.3.4.1 +- Fix cold link launch when using deferred initialization and an AppDelegate only app. +- Fix cocoapods privacy manifest collision. +- Fix error recovery serialization. +- Update logs with more appropriate log levels. +- Pass back underlying Network NSErrors that cause the SDK to give up. + +v.3.4.0 +- Added support for setting the Branch API base URL through the `branch.json` file. + +v.3.3.0 +- SDK behavior change to fix a race condition when opening a closed app with a link. In some apps, this race condition could cause the occasional loss of link data. + +When opening a closed app with a link, the Branch SDK will no longer attempt to merge the app open and link arrival lifecycle events. Apps will now get called on "app open" and on "link arrival", which are often very close together. If your app ignores callbacks with no link data, then this change should be transparent. + +v.3.2.0 +- Add support for setting DMA compliance parameters. +- Update logging to allow a custom callback so clients may reroute Branch Logs to their logging infrastructure. +- Update logging to use `os_log` private by default. +- New custom server URL API. When set the SDK will always use this endpoint, the Privacy Manifest should be edited to match. +- Update cocoapods, frameworks and tests to use SPM layout. +- Fix crash when using pre-built xcframework on iOS 12 +- Improve Swift compatibility by removing API variations that differ only by an NSError. + +v.3.1.0 +- Fix tuist SPM integration when using external by switching to a more typical SPM layout. + +Note this release is only being deployed to the SPM repo to unblock tuist users. A follow up release will address compatibility between this bugfix and other integration methods. + +v.3.0.1 +- Fix organic open when app is already running in background. + +v.3.0.0 - Add a Privacy Manifest for the Branch SDK. App developers may need add an App level Privacy Manifest for data they collect and pass into the Branch SDK. - Known Issue: When using cocoapods without the `use_frameworks!` option, the build can fail with a duplicate privacy manifest error. Workaround is to manually merge privacy manifests. @@ -21,13 +59,13 @@ V.3.0.0 - pre-iOS 10 locale support - Device carrier. This was used for fraud analysis, but is no longer available on new iOS versions. -V.2.2.1 +v.2.2.1 Branch iOS SDK 2.2.1 adds parameter for current SKAN 4.0 Window in /v1/open and /v2/event requests. - SDK-1982 - SKAN Simplification DB updates -V.2.2.0 +v.2.2.0 Branch iOS SDK 2.2.0 adds the ability to include developer ID in installs and a new method to change the Branch API base URL. @@ -35,7 +73,7 @@ Branch iOS SDK 2.2.0 adds the ability to include developer ID in installs and a - SDK-1755 - Remove old Apple Search Ads APIs - SDK-1934 - Expose a public method to change the Branch API base url -V.2.1.2 +v.2.1.2 Branch iOS SDK 2.1.2 adds additional support for Meta AEM links. It also includes some bug fixes and debugging improvements. diff --git a/DeepLinkDemo/Podfile b/DeepLinkDemo/Podfile index 3203fe516..80f3473a4 100644 --- a/DeepLinkDemo/Podfile +++ b/DeepLinkDemo/Podfile @@ -1,5 +1,5 @@ # Uncomment the next line to define a global platform for your project - platform :ios, '9.0' + platform :ios, '12.0' target 'DeepLinkDemo' do # Comment the next line if you don't want to use dynamic frameworks diff --git a/DeepLinkDemo/Podfile.lock b/DeepLinkDemo/Podfile.lock index cb614ef91..41cac458e 100644 --- a/DeepLinkDemo/Podfile.lock +++ b/DeepLinkDemo/Podfile.lock @@ -1,5 +1,5 @@ PODS: - - IQKeyboardManager (6.5.11) + - IQKeyboardManager (6.5.15) DEPENDENCIES: - IQKeyboardManager @@ -9,8 +9,8 @@ SPEC REPOS: - IQKeyboardManager SPEC CHECKSUMS: - IQKeyboardManager: ef43ce1ba1e5aaf4adf222c0a46f39761f246879 + IQKeyboardManager: 22ffab9bd300ad493485a390a095f5db0c841776 -PODFILE CHECKSUM: 28ea4157aa971450d43ffe2adb0c6ecb20612b86 +PODFILE CHECKSUM: 5d77f506f7fd530dd480a25e957b270a906b4207 -COCOAPODS: 1.11.2 +COCOAPODS: 1.12.1 diff --git a/Framework/BranchSDK.h b/Framework/BranchSDK.h index bc23920bd..c57177260 100644 --- a/Framework/BranchSDK.h +++ b/Framework/BranchSDK.h @@ -24,6 +24,7 @@ FOUNDATION_EXPORT const unsigned char BranchSDKVersionString[]; #import #import #import +#import #import @@ -54,10 +55,10 @@ FOUNDATION_EXPORT const unsigned char BranchSDKVersionString[]; #import // BNCServerRequest includes BNCServerInterface.h -#import +//#import // BNCServerInterface.h includes BNCServerResponse.h and BNCPreferenceHelper.h #import -#import +//#import // BNCLinkCache.h uses BNCLinkData.h #import diff --git a/Framework/PrivacyInfo.xcprivacy b/Framework/PrivacyInfo.xcprivacy index 1c0043760..3593fc9cd 100644 --- a/Framework/PrivacyInfo.xcprivacy +++ b/Framework/PrivacyInfo.xcprivacy @@ -6,7 +6,8 @@ NSPrivacyTrackingDomains - https://api-safetrack.branch.io + api-safetrack.branch.io + api-safetrack-eu.branch.io NSPrivacyCollectedDataTypes diff --git a/Package.swift b/Package.swift index 95d907d84..0ae916e32 100644 --- a/Package.swift +++ b/Package.swift @@ -18,11 +18,17 @@ let package = Package( targets: [ .target( name: "BranchSDK", - path: "BranchSDK", + path: "Sources", + sources: [ + "BranchSDK/" + ], resources: [ - .copy("PrivacyInfo.xcprivacy"), + .copy("Resources/PrivacyInfo.xcprivacy"), + ], + publicHeadersPath: "BranchSDK/Public/", + cSettings: [ + .headerSearchPath("BranchSDK/Private"), ], - publicHeadersPath: "", linkerSettings: [ .linkedFramework("CoreServices"), .linkedFramework("SystemConfiguration"), diff --git a/BranchSDK/BNCAppGroupsData.m b/Sources/BranchSDK/BNCAppGroupsData.m similarity index 96% rename from BranchSDK/BNCAppGroupsData.m rename to Sources/BranchSDK/BNCAppGroupsData.m index e7885d9d9..cb4908f86 100644 --- a/BranchSDK/BNCAppGroupsData.m +++ b/Sources/BranchSDK/BNCAppGroupsData.m @@ -7,8 +7,6 @@ // #import "BNCAppGroupsData.h" - -#import "BNCLog.h" #import "BNCApplication.h" #import "BNCPreferenceHelper.h" #import "BNCSystemObserver.h" @@ -20,8 +18,8 @@ @interface BNCAppGroupsData() @implementation BNCAppGroupsData + (instancetype)shared { - static BNCAppGroupsData *appGroupsData; - static dispatch_once_t onceToken; + static BNCAppGroupsData *appGroupsData = nil; + static dispatch_once_t onceToken = 0; dispatch_once(&onceToken, ^{ appGroupsData = [BNCAppGroupsData new]; }); diff --git a/BranchSDK/BNCAppleReceipt.m b/Sources/BranchSDK/BNCAppleReceipt.m similarity index 94% rename from BranchSDK/BNCAppleReceipt.m rename to Sources/BranchSDK/BNCAppleReceipt.m index ea54b4947..3536b7e89 100644 --- a/BranchSDK/BNCAppleReceipt.m +++ b/Sources/BranchSDK/BNCAppleReceipt.m @@ -23,8 +23,8 @@ @interface BNCAppleReceipt() @implementation BNCAppleReceipt + (BNCAppleReceipt *)sharedInstance { - static BNCAppleReceipt *singleton; - static dispatch_once_t onceToken; + static BNCAppleReceipt *singleton = nil; + static dispatch_once_t onceToken = 0; dispatch_once(&onceToken, ^{ singleton = [BNCAppleReceipt new]; }); diff --git a/BranchSDK/BNCApplication.m b/Sources/BranchSDK/BNCApplication.m similarity index 70% rename from BranchSDK/BNCApplication.m rename to Sources/BranchSDK/BNCApplication.m index f5e0b8996..a3cce47c5 100644 --- a/BranchSDK/BNCApplication.m +++ b/Sources/BranchSDK/BNCApplication.m @@ -9,7 +9,7 @@ */ #import "BNCApplication.h" -#import "BNCLog.h" +#import "BranchLogger.h" #import "BNCKeyChain.h" static NSString*const kBranchKeychainService = @"BranchKeychainService"; @@ -21,7 +21,7 @@ @implementation BNCApplication // BNCApplication checks a few values in keychain -// Checking keychain from main thread early in the app lifecycle can deadlock. INTENG-7291 +// Checking keychain from main thread early in the app lifecycle can deadlock. INTENG-7291 + (void)loadCurrentApplicationWithCompletion:(void (^)(BNCApplication *application))completion { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ BNCApplication *tmp = [BNCApplication currentApplication]; @@ -69,63 +69,71 @@ + (BNCApplication*) createCurrentApplication { return application; } -+ (NSDate*) currentBuildDate { ++ (NSDate *)currentBuildDate { NSURL *appURL = nil; NSURL *bundleURL = [NSBundle mainBundle].bundleURL; NSDictionary *info = [NSBundle mainBundle].infoDictionary; - NSString *appName = info[(__bridge NSString*)kCFBundleExecutableKey]; + NSString *appName = info[(__bridge NSString *)kCFBundleExecutableKey]; if (appName.length > 0 && bundleURL) { + // path to the app on device. file:///private/var/containers/Bundle/Application/GUID appURL = [bundleURL URLByAppendingPathComponent:appName]; } else { + // TODO: Why is this fallback necessary? The NSBundle approach has been available since iOS 2.0 + // path to old app location, this symlinks to the new location. file:///var/containers/Bundle/Application/GUID NSString *path = [[NSProcessInfo processInfo].arguments firstObject]; - if (path) appURL = [NSURL fileURLWithPath:path]; + if (path) { + appURL = [NSURL fileURLWithPath:path]; + } } - if (appURL == nil) + if (appURL == nil) { + [[BranchLogger shared] logError:@"Failed to get build date, app path is nil" error:nil]; return nil; + } NSError *error = nil; NSFileManager *fileManager = [NSFileManager defaultManager]; NSDictionary *attributes = [fileManager attributesOfItemAtPath:appURL.path error:&error]; if (error) { - BNCLogError([NSString stringWithFormat:@"Can't get build date: %@.", error]); + [[BranchLogger shared] logError:@"Failed to get build date" error:error]; return nil; } - NSDate * buildDate = [attributes fileCreationDate]; + NSDate *buildDate = [attributes fileCreationDate]; if (buildDate == nil || [buildDate timeIntervalSince1970] <= 0.0) { - BNCLogError([NSString stringWithFormat:@"Invalid build date: %@.", buildDate]); + [[BranchLogger shared] logError:[NSString stringWithFormat:@"Invalid build date: %@", buildDate] error:nil]; } return buildDate; } -+ (NSDate*) firstInstallBuildDate { ++ (NSDate *)firstInstallBuildDate { + // check for stored build date NSError *error = nil; - NSDate *firstBuildDate = - [BNCKeyChain retrieveDateForService:kBranchKeychainService - key:kBranchKeychainFirstBuildKey - error:&error]; - if (firstBuildDate) + NSDate *firstBuildDate = [BNCKeyChain retrieveDateForService:kBranchKeychainService key:kBranchKeychainFirstBuildKey error:&error]; + if (firstBuildDate) { return firstBuildDate; - + } + + // get current build date and store it firstBuildDate = [self currentBuildDate]; - error = [BNCKeyChain storeDate:firstBuildDate - forService:kBranchKeychainService - key:kBranchKeychainFirstBuildKey - cloudAccessGroup:nil]; - if (error) BNCLogError([NSString stringWithFormat:@"Keychain store: %@.", error]); + error = [BNCKeyChain storeDate:firstBuildDate forService:kBranchKeychainService key:kBranchKeychainFirstBuildKey cloudAccessGroup:nil]; + if (error) { + [[BranchLogger shared] logError:@"Error saving build date" error:error]; + } return firstBuildDate; } -+ (NSDate *) currentInstallDate { ++ (NSDate *)currentInstallDate { NSDate *installDate = [NSDate date]; #if !TARGET_OS_TV // tvOS always returns a creation date of Unix epoch 0 on device installDate = [self creationDateForLibraryDirectory]; - #endif - if (installDate == nil || [installDate timeIntervalSince1970] <= 0.0) { - BNCLogWarning([NSString stringWithFormat:@"Invalid install date, using [NSDate date]."]); + [[BranchLogger shared] logError:@"Invalid install date, using [NSDate date]" error:nil]; } + #else + [[BranchLogger shared] logWarning:@"File system creation date not supported on tvOS, using [NSDate date]" error:nil]; + #endif + return installDate; } @@ -135,13 +143,13 @@ + (NSDate *)creationDateForLibraryDirectory { NSURL *directoryURL = [[fileManager URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask] firstObject]; NSDictionary *attributes = [fileManager attributesOfItemAtPath:directoryURL.path error:&error]; if (error) { - BNCLogError([NSString stringWithFormat:@"Can't get creation date for Library directory: %@", error]); - return nil; + [[BranchLogger shared] logWarning:@"Failed to get creation date for NSLibraryDirectory" error:error]; + return nil; } return [attributes fileCreationDate]; } -+ (NSDate*) firstInstallDate { ++ (NSDate *)firstInstallDate { // check keychain for stored install date, on iOS this is lost on app deletion. NSError *error = nil; NSDate* firstInstallDate = [BNCKeyChain retrieveDateForService:kBranchKeychainService key:kBranchKeychainFirstInstalldKey error:&error]; @@ -155,22 +163,9 @@ + (NSDate*) firstInstallDate { // save filesystem time to keychain error = [BNCKeyChain storeDate:firstInstallDate forService:kBranchKeychainService key:kBranchKeychainFirstInstalldKey cloudAccessGroup:nil]; if (error) { - BNCLogError([NSString stringWithFormat:@"Keychain store: %@.", error]); + [[BranchLogger shared] logWarning:@"Error while saving install date" error:error]; } return firstInstallDate; } @end - -@implementation BNCApplication (BNCTest) - -- (void) setAppOriginalInstallDate:(NSDate*)originalInstallDate - firstInstallDate:(NSDate*)firstInstallDate - lastUpdateDate:(NSDate*)lastUpdateDate { - self->_currentInstallDate = firstInstallDate; // latest_install_time - self->_firstInstallDate = originalInstallDate; // first_install_time - self->_currentBuildDate = lastUpdateDate; // lastest_update_time -} - -@end - diff --git a/BranchSDK/BNCCallbackMap.m b/Sources/BranchSDK/BNCCallbackMap.m similarity index 94% rename from BranchSDK/BNCCallbackMap.m rename to Sources/BranchSDK/BNCCallbackMap.m index 8c1803824..ae5e4e829 100644 --- a/BranchSDK/BNCCallbackMap.m +++ b/Sources/BranchSDK/BNCCallbackMap.m @@ -15,8 +15,8 @@ @interface BNCCallbackMap() @implementation BNCCallbackMap + (instancetype)shared { - static BNCCallbackMap *map; - static dispatch_once_t onceToken; + static BNCCallbackMap *map = nil; + static dispatch_once_t onceToken = 0; dispatch_once(&onceToken, ^{ map = [BNCCallbackMap new]; }); diff --git a/BranchSDK/BNCConfig.m b/Sources/BranchSDK/BNCConfig.m similarity index 92% rename from BranchSDK/BNCConfig.m rename to Sources/BranchSDK/BNCConfig.m index ba11b7d30..b1bf233ed 100644 --- a/BranchSDK/BNCConfig.m +++ b/Sources/BranchSDK/BNCConfig.m @@ -8,7 +8,7 @@ #include "BNCConfig.h" -NSString * const BNC_SDK_VERSION = @"3.0.0"; +NSString * const BNC_SDK_VERSION = @"3.4.3"; NSString * const BNC_LINK_URL = @"https://bnc.lt"; NSString * const BNC_CDN_URL = @"https://cdn.branch.io"; diff --git a/BranchSDK/BNCContentDiscoveryManager.m b/Sources/BranchSDK/BNCContentDiscoveryManager.m similarity index 99% rename from BranchSDK/BNCContentDiscoveryManager.m rename to Sources/BranchSDK/BNCContentDiscoveryManager.m index ec4feefb3..420107980 100644 --- a/BranchSDK/BNCContentDiscoveryManager.m +++ b/Sources/BranchSDK/BNCContentDiscoveryManager.m @@ -6,6 +6,8 @@ // Copyright © 2015 Branch Metrics. All rights reserved. // +#if !TARGET_OS_TV + #import "BNCContentDiscoveryManager.h" #import "Branch.h" #import "BranchConstants.h" @@ -396,3 +398,4 @@ - (void)indexContentWithTitle:(NSString *)title } @end +#endif diff --git a/BranchSDK/BNCCrashlyticsWrapper.m b/Sources/BranchSDK/BNCCrashlyticsWrapper.m similarity index 100% rename from BranchSDK/BNCCrashlyticsWrapper.m rename to Sources/BranchSDK/BNCCrashlyticsWrapper.m diff --git a/BranchSDK/BNCCurrency.m b/Sources/BranchSDK/BNCCurrency.m similarity index 100% rename from BranchSDK/BNCCurrency.m rename to Sources/BranchSDK/BNCCurrency.m diff --git a/BranchSDK/BNCDeepLinkViewControllerInstance.m b/Sources/BranchSDK/BNCDeepLinkViewControllerInstance.m similarity index 100% rename from BranchSDK/BNCDeepLinkViewControllerInstance.m rename to Sources/BranchSDK/BNCDeepLinkViewControllerInstance.m diff --git a/BranchSDK/BNCDeviceInfo.m b/Sources/BranchSDK/BNCDeviceInfo.m similarity index 97% rename from BranchSDK/BNCDeviceInfo.m rename to Sources/BranchSDK/BNCDeviceInfo.m index abd311e3a..dd6f1926d 100644 --- a/BranchSDK/BNCDeviceInfo.m +++ b/Sources/BranchSDK/BNCDeviceInfo.m @@ -9,11 +9,9 @@ #import "BNCDeviceInfo.h" #import "BNCPreferenceHelper.h" #import "BNCSystemObserver.h" -#import "BNCLog.h" #import "BNCConfig.h" #import "BNCNetworkInterface.h" #import "BNCReachability.h" -#import "NSMutableDictionary+Branch.h" #import "BNCDeviceSystem.h" #if !TARGET_OS_TV @@ -36,7 +34,7 @@ @interface BNCDeviceInfo() @implementation BNCDeviceInfo + (BNCDeviceInfo *)getInstance { - static BNCDeviceInfo *bnc_deviceInfo = 0; + static BNCDeviceInfo *bnc_deviceInfo = nil; static dispatch_once_t onceToken = 0; dispatch_once(&onceToken, ^{ bnc_deviceInfo = [BNCDeviceInfo new]; diff --git a/BranchSDK/BNCDeviceSystem.m b/Sources/BranchSDK/BNCDeviceSystem.m similarity index 100% rename from BranchSDK/BNCDeviceSystem.m rename to Sources/BranchSDK/BNCDeviceSystem.m diff --git a/BranchSDK/BNCEncodingUtils.m b/Sources/BranchSDK/BNCEncodingUtils.m similarity index 77% rename from BranchSDK/BNCEncodingUtils.m rename to Sources/BranchSDK/BNCEncodingUtils.m index 8d53e3750..c07f3dcbb 100644 --- a/BranchSDK/BNCEncodingUtils.m +++ b/Sources/BranchSDK/BNCEncodingUtils.m @@ -8,8 +8,8 @@ #import "BNCEncodingUtils.h" #import "BNCPreferenceHelper.h" -#import "BNCLog.h" #import +#import "BranchLogger.h" #pragma mark BNCWireFormat @@ -129,9 +129,8 @@ + (NSString *)sha256Encode:(NSString *)input { #pragma mark - Param Encoding methods + (NSString *)iso8601StringFromDate:(NSDate *)date { - static NSDateFormatter *dateFormatter; - static dispatch_once_t onceToken; - + static NSDateFormatter *dateFormatter = nil; + static dispatch_once_t onceToken = 0; dispatch_once(&onceToken, ^{ dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]]; // POSIX to avoid weird issues @@ -165,9 +164,8 @@ + (NSString *)encodeDictionaryToJsonString:(NSDictionary *)dictionary { NSMutableString *encodedDictionary = [[NSMutableString alloc] initWithString:@"{"]; for (NSString *key in dictionary) { - // protect against non-string keys if (![key isKindOfClass:[NSString class]]) { - BNCLogError([NSString stringWithFormat:@"Unexpected key type %@. Skipping key.", [key class]]); + [[BranchLogger shared] logWarning:[NSString stringWithFormat:@"Ignoring unexpected key type %@", [key class]] error:nil]; continue; } @@ -177,38 +175,30 @@ + (NSString *)encodeDictionaryToJsonString:(NSDictionary *)dictionary { id obj = dictionary[key]; if ([obj isKindOfClass:[NSString class]]) { value = [BNCEncodingUtils sanitizedStringFromString:obj]; - } - else if ([obj isKindOfClass:[NSURL class]]) { + } else if ([obj isKindOfClass:[NSURL class]]) { value = [obj absoluteString]; - } - else if ([obj isKindOfClass:[NSDate class]]) { + } else if ([obj isKindOfClass:[NSDate class]]) { value = [BNCEncodingUtils iso8601StringFromDate:obj]; - } - else if ([obj isKindOfClass:[NSArray class]]) { + } else if ([obj isKindOfClass:[NSArray class]]) { value = [BNCEncodingUtils encodeArrayToJsonString:obj]; string = NO; - } - else if ([obj isKindOfClass:[NSDictionary class]] || [obj isKindOfClass:[NSMutableDictionary class]]) { + } else if ([obj isKindOfClass:[NSDictionary class]] || [obj isKindOfClass:[NSMutableDictionary class]]) { value = [BNCEncodingUtils encodeDictionaryToJsonString:obj]; string = NO; - } - else if ([obj isKindOfClass:[NSNumber class]]) { + } else if ([obj isKindOfClass:[NSNumber class]]) { string = NO; - if (obj == (id)kCFBooleanFalse) + if (obj == (id)kCFBooleanFalse) { value = @"false"; - else - if (obj == (id)kCFBooleanTrue) + } else if (obj == (id)kCFBooleanTrue) { value = @"true"; - else + } else { value = [obj stringValue]; - } - else if ([obj isKindOfClass:[NSNull class]]) { + } + } else if ([obj isKindOfClass:[NSNull class]]) { value = @"null"; string = NO; - } - else { - // If this type is not a known type, don't attempt to encode it. - BNCLogError([NSString stringWithFormat:@"Cannot encode value for key %@. The value is not an accepted type.", key]); + } else { + [[BranchLogger shared] logWarning:[NSString stringWithFormat:@"Ignoring unexpected value type %@", [obj class]] error:nil]; continue; } @@ -230,12 +220,11 @@ + (NSString *)encodeDictionaryToJsonString:(NSDictionary *)dictionary { [encodedDictionary appendString:@"}"]; - BNCLogDebugSDK([NSString stringWithFormat:@"Encoded dictionary: %@.", encodedDictionary]); + [[BranchLogger shared] logVerbose:[NSString stringWithFormat:@"Encoded dictionary: %@.", encodedDictionary] error:nil]; return encodedDictionary; } + (NSString *)encodeArrayToJsonString:(NSArray *)array { - // Empty array if (![array count]) { return @"[]"; } @@ -247,41 +236,31 @@ + (NSString *)encodeArrayToJsonString:(NSArray *)array { if ([obj isKindOfClass:[NSString class]]) { value = [BNCEncodingUtils sanitizedStringFromString:obj]; - } - else if ([obj isKindOfClass:[NSURL class]]) { + } else if ([obj isKindOfClass:[NSURL class]]) { value = [obj absoluteString]; - } - else if ([obj isKindOfClass:[NSDate class]]) { + } else if ([obj isKindOfClass:[NSDate class]]) { value = [BNCEncodingUtils iso8601StringFromDate:obj]; - } - else if ([obj isKindOfClass:[NSArray class]]) { + } else if ([obj isKindOfClass:[NSArray class]]) { value = [BNCEncodingUtils encodeArrayToJsonString:obj]; string = NO; - } - else if ([obj isKindOfClass:[NSDictionary class]] || [obj isKindOfClass:[NSMutableDictionary class]]) { + } else if ([obj isKindOfClass:[NSDictionary class]] || [obj isKindOfClass:[NSMutableDictionary class]]) { value = [BNCEncodingUtils encodeDictionaryToJsonString:obj]; string = NO; - } - else if ([obj isKindOfClass:[NSNumber class]]) { + } else if ([obj isKindOfClass:[NSNumber class]]) { value = [obj stringValue]; string = NO; - } - else if ([obj isKindOfClass:[NSNull class]]) { + } else if ([obj isKindOfClass:[NSNull class]]) { value = @"null"; string = NO; - } - else { - // If this type is not a known type, don't attempt to encode it. - BNCLogError([NSString stringWithFormat:@"Cannot encode value %@. The value is not an accepted type.", obj]); + } else { + [[BranchLogger shared] logWarning:[NSString stringWithFormat:@"Ignoring unexpected value type %@", [obj class]] error:nil]; continue; } - // If this is a "string" object, wrap it in quotes if (string) { + // quote strings [encodedArray appendFormat:@"\"%@\",", value]; - } - // Otherwise, just add the raw value after the colon - else { + } else { [encodedArray appendFormat:@"%@,", value]; } } @@ -290,7 +269,7 @@ + (NSString *)encodeArrayToJsonString:(NSArray *)array { [encodedArray deleteCharactersInRange:NSMakeRange([encodedArray length] - 1, 1)]; [encodedArray appendString:@"]"]; - BNCLogDebugSDK([NSString stringWithFormat:@"Encoded array: %@.", encodedArray]); + [[BranchLogger shared] logVerbose:[NSString stringWithFormat:@"Encoded array: %@.", encodedArray] error:nil]; return encodedArray; } @@ -304,26 +283,20 @@ + (NSString *)encodeDictionaryToQueryString:(NSDictionary *)dictionary { NSMutableString *queryString = [[NSMutableString alloc] initWithString:@"?"]; for (NSString *key in [dictionary allKeys]) { - // No empty keys, please. if (key.length) { id obj = dictionary[key]; NSString *value; if ([obj isKindOfClass:[NSString class]]) { value = [BNCEncodingUtils urlEncodedString:obj]; - } - else if ([obj isKindOfClass:[NSURL class]]) { + } else if ([obj isKindOfClass:[NSURL class]]) { value = [BNCEncodingUtils urlEncodedString:[obj absoluteString]]; - } - else if ([obj isKindOfClass:[NSDate class]]) { + } else if ([obj isKindOfClass:[NSDate class]]) { value = [BNCEncodingUtils iso8601StringFromDate:obj]; - } - else if ([obj isKindOfClass:[NSNumber class]]) { + } else if ([obj isKindOfClass:[NSNumber class]]) { value = [obj stringValue]; - } - else { - // If this type is not a known type, don't attempt to encode it. - BNCLogError([NSString stringWithFormat:@"Cannot encode value %@. The value is not an accepted type.", obj]); + } else { + [[BranchLogger shared] logWarning:[NSString stringWithFormat:@"Ignoring unexpected value type %@", [obj class]] error:nil]; continue; } @@ -333,29 +306,41 @@ + (NSString *)encodeDictionaryToQueryString:(NSDictionary *)dictionary { // Delete last character (either trailing & or ? if no params present) [queryString deleteCharactersInRange:NSMakeRange(queryString.length - 1, 1)]; - return queryString; } -+ (NSString*) stringByPercentDecodingString:(NSString *)string { ++ (NSString *)stringByPercentDecodingString:(NSString *)string { return [string stringByRemovingPercentEncoding]; } -+ (NSString*) stringByPercentEncodingStringForQuery:(NSString *)string { - return [string stringByAddingPercentEncodingWithAllowedCharacters: - [NSCharacterSet URLQueryAllowedCharacterSet]]; ++ (NSString *)stringByPercentEncodingStringForQuery:(NSString *)string { + return [string stringByAddingPercentEncodingWithAllowedCharacters: [NSCharacterSet URLQueryAllowedCharacterSet]]; +} + ++ (NSString *)prettyPrintJSON:(NSDictionary *)json { + if (![NSJSONSerialization isValidJSONObject:json]) { + [[BranchLogger shared] logWarning:@"Dictionary is not a valid JSON" error:nil]; + return nil; + } + + NSError *error; + NSData *data = [NSJSONSerialization dataWithJSONObject:json options:NSJSONWritingSortedKeys | NSJSONWritingPrettyPrinted error:&error]; + + if (!data || error) { + [[BranchLogger shared] logWarning:@"Failed to pretty print JSON" error:error]; + return nil; + } + return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; } #pragma mark - Param Decoding Methods + (NSDictionary *)decodeJsonDataToDictionary:(NSData *)jsonData { NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; - return [BNCEncodingUtils decodeJsonStringToDictionary:jsonString]; } + (NSDictionary *)decodeJsonStringToDictionary:(NSString *)jsonString { - // Just a basic decode, easy enough NSData *tempData = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; if (!tempData) { return @{}; @@ -378,7 +363,6 @@ + (NSDictionary *)decodeJsonStringToDictionary:(NSString *)jsonString { return base64DecodedDictionary; } - // Apparently this data was not parsible into a dictionary, so we'll just return an empty one return @{}; } @@ -392,27 +376,29 @@ + (NSDictionary *)decodeQueryStringToDictionary:(NSString *)queryString { NSString *key = kv[0]; NSString *val = [kv[1] stringByRemovingPercentEncoding]; - // Don't add empty items if (val.length) { params[key] = val; } } } - return params; } #pragma mark - Hex Strings -+ (NSString *) hexStringFromData:(NSData*)data { - ++ (NSString *)hexStringFromData:(NSData*)data { NSUInteger bytesCount = data.length; - if (bytesCount <= 0) return @""; - + if (bytesCount <= 0) { + return @""; + } + const char *hexChars = "0123456789ABCDEF"; const char *dataBuffer = data.bytes; char *chars = malloc(sizeof(char) * (bytesCount * 2 + 1)); - if (!chars) return @""; + if (!chars) { + return @""; + } + char *s = chars; for (unsigned i = 0; i < bytesCount; ++i) { *s++ = hexChars[((*dataBuffer & 0xF0) >> 4)]; @@ -422,35 +408,39 @@ + (NSString *) hexStringFromData:(NSData*)data { *s = '\0'; NSString *hexString = [NSString stringWithUTF8String:chars]; - if (chars) free(chars); + if (chars) { + free(chars); + } + return hexString; } -+ (NSData *) dataFromHexString:(NSString*)string { - if (!string) return nil; - ++ (NSData *)dataFromHexString:(NSString*)string { + if (!string) { + return nil; + } + NSData *data = nil; NSData *inputData = [string dataUsingEncoding:NSUTF8StringEncoding]; size_t length = (inputData.length+1)/2; uint8_t *bytes = malloc(length); uint8_t *b = bytes; - if (!bytes) goto exit; - + if (!bytes) { + goto exit; + } + int highValue = -1; const uint8_t *p = (const uint8_t*) [inputData bytes]; for (NSUInteger i = 0; i < inputData.length; ++i) { int value; - if (*p >= '0' && *p <= '9') + if (*p >= '0' && *p <= '9') { value = *p - '0'; - else - if (*p >= 'A' && *p <= 'F') + } else if (*p >= 'A' && *p <= 'F') { value = *p - 'A' + 10; - else - if (*p >= 'a' && *p <= 'f') + } else if (*p >= 'a' && *p <= 'f') { value = *p - 'a' + 10; - else - if (isspace(*p)) { + } else if (isspace(*p)) { p++; continue; } else { @@ -467,9 +457,12 @@ + (NSData *) dataFromHexString:(NSString*)string { } // If highValue != -1 then we got an odd number of hex values, which is an error. - if (highValue == -1) + if (highValue == -1) { data = [NSData dataWithBytes:bytes length:b-bytes]; + } + // Error handling in C code is one case where goto can improve readability. + // https://www.kernel.org/doc/html/v4.19/process/coding-style.html exit: if (bytes) { free(bytes); @@ -479,23 +472,27 @@ + (NSData *) dataFromHexString:(NSString*)string { #pragma mark - URL QueryItems -+ (NSArray*) queryItems:(NSURL*)URL { - NSMutableArray* keyValues = [NSMutableArray new]; - if (!URL) return keyValues; - ++ (NSArray *)queryItems:(NSURL *)URL { + NSMutableArray *keyValues = [NSMutableArray new]; + if (!URL) { + return keyValues; + } + NSArray *queryItems = [[URL query] componentsSeparatedByString:@"&"]; - for (NSString* itemPair in queryItems) { + for (NSString *itemPair in queryItems) { BNCKeyValue *keyValue = [BNCKeyValue new]; NSRange range = [itemPair rangeOfString:@"="]; if (range.location == NSNotFound) { - if (itemPair.length) + if (itemPair.length) { keyValue.key = itemPair; + } } else { keyValue.key = [itemPair substringWithRange:NSMakeRange(0, range.location)]; NSRange r = NSMakeRange(range.location+1, itemPair.length-range.location-1); - if (r.length > 0) + if (r.length > 0) { keyValue.value = [itemPair substringWithRange:r]; + } } keyValue.key = [BNCEncodingUtils stringByPercentDecodingString:keyValue.key]; @@ -505,8 +502,13 @@ + (NSData *) dataFromHexString:(NSString*)string { keyValue.value = [keyValue.value stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; if (keyValue.key.length || keyValue.value.length) { - if (keyValue.key == nil) keyValue.key = @""; - if (keyValue.value == nil) keyValue.value = @""; + if (keyValue.key == nil) { + keyValue.key = @""; + } + + if (keyValue.value == nil) { + keyValue.value = @""; + } [keyValues addObject:keyValue]; } } diff --git a/BranchSDK/BNCEventUtils.m b/Sources/BranchSDK/BNCEventUtils.m similarity index 90% rename from BranchSDK/BNCEventUtils.m rename to Sources/BranchSDK/BNCEventUtils.m index 911d60694..f65d90c22 100644 --- a/BranchSDK/BNCEventUtils.m +++ b/Sources/BranchSDK/BNCEventUtils.m @@ -15,8 +15,8 @@ @interface BNCEventUtils() @implementation BNCEventUtils + (instancetype)shared { - static BNCEventUtils *set; - static dispatch_once_t onceToken; + static BNCEventUtils *set = nil; + static dispatch_once_t onceToken = 0; dispatch_once(&onceToken, ^{ set = [BNCEventUtils new]; }); diff --git a/BranchSDK/BNCInitSessionResponse.m b/Sources/BranchSDK/BNCInitSessionResponse.m similarity index 100% rename from BranchSDK/BNCInitSessionResponse.m rename to Sources/BranchSDK/BNCInitSessionResponse.m diff --git a/BranchSDK/BNCJSONUtility.m b/Sources/BranchSDK/BNCJSONUtility.m similarity index 100% rename from BranchSDK/BNCJSONUtility.m rename to Sources/BranchSDK/BNCJSONUtility.m diff --git a/BranchSDK/BNCKeyChain.m b/Sources/BranchSDK/BNCKeyChain.m similarity index 76% rename from BranchSDK/BNCKeyChain.m rename to Sources/BranchSDK/BNCKeyChain.m index 6edd76ac9..a8e0a3e56 100644 --- a/BranchSDK/BNCKeyChain.m +++ b/Sources/BranchSDK/BNCKeyChain.m @@ -9,7 +9,7 @@ */ #import "BNCKeyChain.h" -#import "BNCLog.h" +#import "BranchLogger.h" // Apple Keychain Reference: // https://developer.apple.com/library/content/documentation/Conceptual/ @@ -20,11 +20,12 @@ @implementation BNCKeyChain +// Wraps OSStatus in an NSError +// Security errors are defined in Security/SecBase.h + (NSError *) errorWithKey:(NSString *)key OSStatus:(OSStatus)status { - // Security errors are defined in Security/SecBase.h if (status == errSecSuccess) return nil; NSString *reason = (__bridge_transfer NSString*) SecCopyErrorMessageString(status, NULL); - NSString *description = [NSString stringWithFormat:@"Security error with key '%@': code %ld.", key, (long) status]; + NSString *description = [NSString stringWithFormat:@"Branch Keychain error for key '%@': OSStatus %ld.", key, (long) status]; if (!reason) { reason = @"Sec OSStatus error."; @@ -37,7 +38,7 @@ + (NSError *) errorWithKey:(NSString *)key OSStatus:(OSStatus)status { return error; } -+ (NSDate *) retrieveDateForService:(NSString *)service key:(NSString *)key error:(NSError **)error { ++ (NSDate *)retrieveDateForService:(NSString *)service key:(NSString *)key error:(NSError **)error { if (error) *error = nil; if (service == nil || key == nil) { NSError *localError = [self errorWithKey:key OSStatus:errSecParam]; @@ -57,7 +58,8 @@ + (NSDate *) retrieveDateForService:(NSString *)service key:(NSString *)key erro OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)dictionary, (CFTypeRef *)&valueData); if (status != errSecSuccess) { NSError *localError = [self errorWithKey:key OSStatus:status]; - BNCLogDebugSDK([NSString stringWithFormat:@"Can't retrieve key: %@.", localError]); + [[BranchLogger shared] logVerbose:@"Key not found" error:localError]; + if (error) *error = localError; if (valueData) CFRelease(valueData); return nil; @@ -66,8 +68,7 @@ + (NSDate *) retrieveDateForService:(NSString *)service key:(NSString *)key erro if (valueData) { @try { value = [NSKeyedUnarchiver unarchivedObjectOfClass:[NSDate class] fromData:(__bridge NSData*)valueData error:NULL]; - } - @catch (id) { + } @catch (NSException *exception) { value = nil; NSError *localError = [self errorWithKey:key OSStatus:errSecDecode]; if (error) *error = localError; @@ -82,14 +83,14 @@ + (NSError *) storeDate:(NSDate *)date key:(NSString *)key cloudAccessGroup:(NSString *)accessGroup { - if (date == nil || service == nil || key == nil) + if (date == nil || service == nil || key == nil) { return [self errorWithKey:key OSStatus:errSecParam]; - + } + NSData* valueData = nil; @try { valueData = [NSKeyedArchiver archivedDataWithRootObject:date requiringSecureCoding:YES error:NULL]; - } - @catch(id) { + } @catch (NSException *exception) { valueData = nil; } if (!valueData) { @@ -106,7 +107,7 @@ + (NSError *) storeDate:(NSDate *)date OSStatus status = SecItemDelete((__bridge CFDictionaryRef)dictionary); if (status != errSecSuccess && status != errSecItemNotFound) { NSError *error = [self errorWithKey:key OSStatus:status]; - BNCLogDebugSDK([NSString stringWithFormat:@"Can't clear to store key: %@.", error]); + [[BranchLogger shared] logDebug:@"Failed to save key" error:error]; } dictionary[(__bridge id)kSecValueData] = valueData; @@ -122,7 +123,7 @@ + (NSError *) storeDate:(NSDate *)date status = SecItemAdd((__bridge CFDictionaryRef)dictionary, NULL); if (status) { NSError *error = [self errorWithKey:key OSStatus:status]; - BNCLogDebugSDK([NSString stringWithFormat:@"Can't store key: %@.", error]); + [[BranchLogger shared] logDebug:@"Failed to save key" error:error]; return error; } return nil; @@ -140,21 +141,23 @@ + (NSError*) removeValuesForService:(NSString *)service key:(NSString *)key { if (status == errSecItemNotFound) status = errSecSuccess; if (status) { NSError *error = [self errorWithKey:key OSStatus:status]; - BNCLogDebugSDK([NSString stringWithFormat:@"Can't remove key: %@.", error]); + [[BranchLogger shared] logDebug:@"Failed to remove key" error:[self errorWithKey:key OSStatus:status]]; return error; } return nil; } -+ (NSString * _Nullable) securityAccessGroup { - // https://stackoverflow.com/questions/11726672/access-app-identifier-prefix-programmatically - @synchronized(self) { - static NSString*_securityAccessGroup = nil; - if (_securityAccessGroup) return _securityAccessGroup; - - // First store a value: +// The security access group string is prefixed with the Apple Developer Team ID ++ (NSString * _Nullable)securityAccessGroup { + static NSString *_securityAccessGroup = nil; + static dispatch_once_t onceToken = 0; + dispatch_once(&onceToken, ^{ + + // The keychain cannot be empty prior to requesting the security access group string. Add a tmp variable. NSError *error = [self storeDate:[NSDate date] forService:@"BranchKeychainService" key:@"Temp" cloudAccessGroup:nil]; - if (error) BNCLogDebugSDK([NSString stringWithFormat:@"Error storing temp value: %@.", error]); + if (error) { + [[BranchLogger shared] logWarning:@"Failed to store temp value" error:error]; + } NSDictionary* dictionary = @{ (__bridge id)kSecClass: (__bridge id)kSecClassGenericPassword, @@ -165,18 +168,23 @@ + (NSString * _Nullable) securityAccessGroup { }; CFDictionaryRef resultDictionary = NULL; OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)dictionary, (CFTypeRef*)&resultDictionary); - if (status == errSecItemNotFound) return nil; + + if (status == errSecItemNotFound) { + return; + } if (status != errSecSuccess) { - BNCLogDebugSDK([NSString stringWithFormat:@"Get securityAccessGroup returned(%ld): %@.", - (long) status, [self errorWithKey:nil OSStatus:status]]); - return nil; + [[BranchLogger shared] logWarning:[NSString stringWithFormat:@"Failed to retrieve security access group"] error:[self errorWithKey:nil OSStatus:status]]; + return; + } + NSString *group = [(__bridge NSDictionary *)resultDictionary objectForKey:(__bridge NSString *)kSecAttrAccessGroup]; + if (group.length > 0) { + _securityAccessGroup = [group copy]; } - NSString*group = - [(__bridge NSDictionary *)resultDictionary objectForKey:(__bridge NSString *)kSecAttrAccessGroup]; - if (group.length > 0) _securityAccessGroup = [group copy]; CFRelease(resultDictionary); - return _securityAccessGroup; - } + }); + + return _securityAccessGroup; + } @end diff --git a/BranchSDK/BNCLinkCache.m b/Sources/BranchSDK/BNCLinkCache.m similarity index 100% rename from BranchSDK/BNCLinkCache.m rename to Sources/BranchSDK/BNCLinkCache.m diff --git a/BranchSDK/BNCLinkData.m b/Sources/BranchSDK/BNCLinkData.m similarity index 100% rename from BranchSDK/BNCLinkData.m rename to Sources/BranchSDK/BNCLinkData.m diff --git a/BranchSDK/BNCNetworkInterface.m b/Sources/BranchSDK/BNCNetworkInterface.m similarity index 90% rename from BranchSDK/BNCNetworkInterface.m rename to Sources/BranchSDK/BNCNetworkInterface.m index 7f384660c..2bc9a19c4 100644 --- a/BranchSDK/BNCNetworkInterface.m +++ b/Sources/BranchSDK/BNCNetworkInterface.m @@ -7,7 +7,7 @@ // #import "BNCNetworkInterface.h" -#import "BNCLog.h" +#import "BranchLogger.h" #import #import @@ -41,6 +41,7 @@ - (NSString*) description { ]; } +// Reads network interface information to the device IP address + (NSArray *)currentInterfaces { struct ifaddrs *interfaces = NULL; @@ -49,16 +50,15 @@ - (NSString*) description { // Retrieve the current interfaces - returns 0 on success if (getifaddrs(&interfaces) != 0) { int e = errno; - BNCLogError([NSString stringWithFormat:@"Can't read ip address: (%d): %s.", e, strerror(e)]); + [[BranchLogger shared] logWarning:[NSString stringWithFormat:@"Failed to read IP Address: (%d): %s", e, strerror(e)] error:nil]; + goto exit; } // Loop through linked list of interfaces -- struct ifaddrs *interface = NULL; for (interface=interfaces; interface; interface=interface->ifa_next) { - - // BNCLogDebugSDK(@"Found %s: %x.", interface->ifa_name, interface->ifa_flags); - + // Check the state: IFF_RUNNING, IFF_UP, IFF_LOOPBACK, etc. if ((interface->ifa_flags & IFF_UP) && (interface->ifa_flags & IFF_RUNNING) && !(interface->ifa_flags & IFF_LOOPBACK)) { } else { @@ -94,6 +94,8 @@ - (NSString*) description { } } + // Error handling in C code is one case where goto can improve readability. + // https://www.kernel.org/doc/html/v4.19/process/coding-style.html exit: if (interfaces) freeifaddrs(interfaces); return currentInterfaces; diff --git a/BranchSDK/BNCNetworkService.m b/Sources/BranchSDK/BNCNetworkService.m similarity index 71% rename from BranchSDK/BNCNetworkService.m rename to Sources/BranchSDK/BNCNetworkService.m index 48b7edba0..01c517835 100644 --- a/BranchSDK/BNCNetworkService.m +++ b/Sources/BranchSDK/BNCNetworkService.m @@ -8,8 +8,9 @@ #import "BNCNetworkService.h" #import "BNCEncodingUtils.h" -#import "BNCLog.h" +#import "BranchLogger.h" #import "NSError+Branch.h" +#import "BranchLogger.h" #pragma mark BNCNetworkOperation @@ -51,7 +52,8 @@ - (void) cancel { [self.sessionTask cancel]; } -- (NSString*) stringFromResponseData { +// only used in logging? Consider removing +- (NSString *)stringFromResponseData { NSString *string = nil; if ([self.responseData isKindOfClass:[NSData class]]) { string = [[NSString alloc] initWithData:(NSData*)self.responseData encoding:NSUTF8StringEncoding]; @@ -147,12 +149,12 @@ - (BOOL) operationsAreSuspended { #pragma mark - Operations -- (BNCNetworkOperation*) networkOperationWithURLRequest:(NSMutableURLRequest*)request +- (BNCNetworkOperation *) networkOperationWithURLRequest:(NSMutableURLRequest*)request completion:(void (^)(idoperation))completion { BNCNetworkOperation *operation = [BNCNetworkOperation new]; if (![request isKindOfClass:[NSMutableURLRequest class]]) { - BNCLogError(@"A `NSMutableURLRequest` request parameter was expected."); + [[BranchLogger shared] logError:[NSString stringWithFormat:@"Expected NSMutableURLRequest, got %@", [request class]] error:nil]; return nil; } operation.request = request; @@ -161,50 +163,37 @@ - (BNCNetworkOperation*) networkOperationWithURLRequest:(NSMutableURLRequest*)re return operation; } -- (void) startOperation:(BNCNetworkOperation*)operation { +- (void)startOperation:(BNCNetworkOperation *)operation { operation.networkService = self; if (!operation.startDate) { operation.startDate = [NSDate date]; } + if (!operation.timeoutDate) { NSTimeInterval timeoutInterval = operation.request.timeoutInterval; - if (timeoutInterval < 0.0) + if (timeoutInterval < 0.0) { timeoutInterval = self.defaultTimeoutInterval; - operation.timeoutDate = - [[operation startDate] dateByAddingTimeInterval:timeoutInterval]; + } + operation.timeoutDate = [[operation startDate] dateByAddingTimeInterval:timeoutInterval]; } + if ([operation.request isKindOfClass:[NSMutableURLRequest class]]) { ((NSMutableURLRequest*)operation.request).timeoutInterval = - [operation.timeoutDate timeIntervalSinceDate:[NSDate date]]; + [operation.timeoutDate timeIntervalSinceDate:[NSDate date]]; } else { - BNCLogError(@"SDK logic error. Expected mutable request in `start` method."); + [[BranchLogger shared] logError:[NSString stringWithFormat:@"Expected NSMutableURLRequest, got %@", [operation.request class]] error:nil]; } - operation.sessionTask = - [self.session dataTaskWithRequest:operation.request - completionHandler: - ^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { - operation.responseData = data; - operation.response = (NSHTTPURLResponse*) response; - operation.error = error; - if (operation.response.statusCode == 404) { - /* Don't print 404 messages because they look like an error. - BNCLogDebugSDK(@"Network finish operation %@ %1.3fs. Status %ld.", - operation.request.URL.absoluteString, - [[NSDate date] timeIntervalSinceDate:operation.startDate], - (long)operation.response.statusCode); - */ - } else { - BNCLogDebug([NSString stringWithFormat:@"Network finish operation %@ %1.3fs. Status %ld error %@.\n%@.", - operation.request.URL.absoluteString, - [[NSDate date] timeIntervalSinceDate:operation.startDate], - (long)operation.response.statusCode, - operation.error, - operation.stringFromResponseData]); - } - if (operation.completionBlock) - operation.completionBlock(operation); - }]; - BNCLogDebug([NSString stringWithFormat:@"Network start operation %@.", operation.request.URL]); + + operation.sessionTask = [self.session dataTaskWithRequest:operation.request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { + operation.responseData = data; + operation.response = (NSHTTPURLResponse*) response; + operation.error = error; + + if (operation.completionBlock) { + operation.completionBlock(operation); + } + }]; + [operation.sessionTask resume]; } diff --git a/BranchSDK/BNCPartnerParameters.m b/Sources/BranchSDK/BNCPartnerParameters.m similarity index 86% rename from BranchSDK/BNCPartnerParameters.m rename to Sources/BranchSDK/BNCPartnerParameters.m index 8981aba3e..e3048f8a0 100644 --- a/BranchSDK/BNCPartnerParameters.m +++ b/Sources/BranchSDK/BNCPartnerParameters.m @@ -7,7 +7,7 @@ // #import "BNCPartnerParameters.h" -#import "BNCLog.h" +#import "BranchLogger.h" @interface BNCPartnerParameters() @property (nonatomic, strong, readwrite) NSMutableDictionary *> *parameters; @@ -16,8 +16,8 @@ @interface BNCPartnerParameters() @implementation BNCPartnerParameters + (instancetype)shared { - static BNCPartnerParameters *partnerParameters; - static dispatch_once_t onceToken; + static BNCPartnerParameters *partnerParameters = nil; + static dispatch_once_t onceToken = 0; dispatch_once(&onceToken, ^{ partnerParameters = [BNCPartnerParameters new]; }); @@ -54,7 +54,7 @@ - (void)addFacebookParameterWithName:(NSString *)name value:(NSString *)value { if ([self sha256HashSanityCheckValue:value]) { [self addParameterWithName:name value:value partnerName:@"fb"]; } else { - BNCLogWarning(@"Partner parameter does not appear to be SHA256 hashed. Dropping the parameter."); + [[BranchLogger shared] logWarning:@"Partner parameter does not appear to be SHA256 hashed. Dropping the parameter." error:nil]; } } @@ -62,7 +62,7 @@ - (void)addSnapParameterWithName:(NSString *)name value:(NSString *)value { if ([self sha256HashSanityCheckValue:value]) { [self addParameterWithName:name value:value partnerName:@"snap"]; } else { - BNCLogWarning(@"Partner parameter does not appear to be SHA256 hashed. Dropping the parameter."); + [[BranchLogger shared] logWarning:@"Partner parameter does not appear to be SHA256 hashed. Dropping the parameter." error:nil]; } } diff --git a/BranchSDK/BNCPasteboard.m b/Sources/BranchSDK/BNCPasteboard.m similarity index 92% rename from BranchSDK/BNCPasteboard.m rename to Sources/BranchSDK/BNCPasteboard.m index d1fe4765c..0ce70bb66 100644 --- a/BranchSDK/BNCPasteboard.m +++ b/Sources/BranchSDK/BNCPasteboard.m @@ -13,8 +13,8 @@ @implementation BNCPasteboard + (BNCPasteboard *)sharedInstance { - static BNCPasteboard *pasteboard; - static dispatch_once_t onceToken; + static BNCPasteboard *pasteboard = nil; + static dispatch_once_t onceToken = 0; dispatch_once(&onceToken, ^{ pasteboard = [BNCPasteboard new]; }); diff --git a/BranchSDK/BNCPreferenceHelper.m b/Sources/BranchSDK/BNCPreferenceHelper.m similarity index 87% rename from BranchSDK/BNCPreferenceHelper.m rename to Sources/BranchSDK/BNCPreferenceHelper.m index f67a01b02..ff4eacafa 100644 --- a/BranchSDK/BNCPreferenceHelper.m +++ b/Sources/BranchSDK/BNCPreferenceHelper.m @@ -10,7 +10,7 @@ #import "BNCEncodingUtils.h" #import "BNCConfig.h" #import "Branch.h" -#import "BNCLog.h" +#import "BranchLogger.h" #import "BranchConstants.h" #import "NSString+Branch.h" #import "BNCSKAdNetwork.h" @@ -26,7 +26,6 @@ static NSString * const BRANCH_PREFS_KEY_LAST_RUN_BRANCH_KEY = @"bnc_last_run_branch_key"; static NSString * const BRANCH_PREFS_KEY_LAST_STRONG_MATCH_DATE = @"bnc_strong_match_created_date"; -static NSString * const BRANCH_PREFS_KEY_API_URL = @"bnc_api_url"; static NSString * const BRANCH_PREFS_KEY_PATTERN_LIST_URL = @"bnc_pattern_list_url"; static NSString * const BRANCH_PREFS_KEY_RANDOMIZED_DEVICE_TOKEN = @"bnc_randomized_device_token"; @@ -61,6 +60,10 @@ static NSString * const BRANCH_PREFS_KEY_LOG_IAP_AS_EVENTS = @"bnc_log_iap_as_events"; +static NSString * const BRANCH_PREFS_KEY_DMA_EEA = @"bnc_dma_eea"; +static NSString * const BRANCH_PREFS_KEY_DMA_AD_PERSONALIZATION = @"bnc_dma_ad_personalization"; +static NSString * const BRANCH_PREFS_KEY_DMA_AD_USER_DATA = @"bnc_dma_ad_user_data"; + NSURL* /* _Nonnull */ BNCURLForBranchDirectory_Unthreaded(void); @@ -68,7 +71,6 @@ @interface BNCPreferenceHelper () { NSOperationQueue *_persistPrefsQueue; NSString *_lastSystemBuildVersion; NSString *_browserUserAgentString; - NSString *_branchAPIURL; NSString *_referringURL; } @@ -76,6 +78,9 @@ @interface BNCPreferenceHelper () { @property (strong, nonatomic) NSMutableDictionary *requestMetadataDictionary; @property (strong, nonatomic) NSMutableDictionary *instrumentationDictionary; +// unit tests run in parallel, causing issues with data stored to disk +@property (nonatomic, assign, readwrite) BOOL useStorage; + @end @implementation BNCPreferenceHelper @@ -111,14 +116,20 @@ @implementation BNCPreferenceHelper highestConversionValueSent = _highestConversionValueSent, referringURLQueryParameters = _referringURLQueryParameters, anonID = _anonID, - patternListURL = _patternListURL; + patternListURL = _patternListURL, + eeaRegion = _eeaRegion, + adPersonalizationConsent = _adPersonalizationConsent, + adUserDataUsageConsent = _adUserDataUsageConsent; + (BNCPreferenceHelper *)sharedInstance { - static BNCPreferenceHelper *preferenceHelper; - static dispatch_once_t onceToken; + static BNCPreferenceHelper *preferenceHelper = nil; + static dispatch_once_t onceToken = 0; dispatch_once(&onceToken, ^{ preferenceHelper = [[BNCPreferenceHelper alloc] init]; + + // the shared version read/writes data to storage + preferenceHelper.useStorage = YES; }); return preferenceHelper; @@ -135,6 +146,7 @@ - (instancetype)init { _persistPrefsQueue.maxConcurrentOperationCount = 1; self.disableAdNetworkCallouts = NO; + self.useStorage = NO; } return self; } @@ -149,34 +161,14 @@ - (void) dealloc { #pragma mark - API methods -- (void)setBranchAPIURL:(NSString*)branchAPIURL_ { - @synchronized (self) { - _branchAPIURL = [branchAPIURL_ copy]; - [self writeObjectToDefaults:BRANCH_PREFS_KEY_API_URL value:_branchAPIURL]; - } -} - -// TODO: This method is not used with the Tracking domain change. See SDK-2118 -- (NSString *)branchAPIURL { - @synchronized (self) { - if (!_branchAPIURL) { - _branchAPIURL = [self readStringFromDefaults:BRANCH_PREFS_KEY_API_URL]; - } - - // return the default URL in the event there's nothing in storage - if (_branchAPIURL == nil || [_branchAPIURL isEqualToString:@""]) { - _branchAPIURL = [BNC_API_URL copy]; - [self writeObjectToDefaults:BRANCH_PREFS_KEY_API_URL value:_branchAPIURL]; +- (void)setPatternListURL:(NSString *)url { + if ([url hasPrefix:@"http://"] || [url hasPrefix:@"https://"] ){ + @synchronized (self) { + _patternListURL = url; + [self writeObjectToDefaults:BRANCH_PREFS_KEY_PATTERN_LIST_URL value:url]; } - - return _branchAPIURL; - } -} - -- (void)setPatternListURL:(NSString*)url { - @synchronized (self) { - _patternListURL = url; - [self writeObjectToDefaults:BRANCH_PREFS_KEY_PATTERN_LIST_URL value:url]; + } else { + [[BranchLogger shared] logWarning:@"Ignoring invalid custom CDN URL" error:nil]; } } @@ -776,6 +768,60 @@ - (void) setInvokeRegisterApp:(BOOL)invoke { } } +- (BOOL) eeaRegionInitialized { + @synchronized(self) { + if([self readObjectFromDefaults:BRANCH_PREFS_KEY_DMA_EEA]) + return YES; + return NO; + } +} + +- (BOOL) eeaRegion { + @synchronized(self) { + NSNumber *b = (id) [self readObjectFromDefaults:BRANCH_PREFS_KEY_DMA_EEA]; + if ([b isKindOfClass:NSNumber.class]) return [b boolValue]; + return NO; + } +} + +- (void) setEeaRegion:(BOOL)isEEARegion { + @synchronized(self) { + NSNumber *b = [NSNumber numberWithBool:isEEARegion]; + [self writeObjectToDefaults:BRANCH_PREFS_KEY_DMA_EEA value:b]; + } +} + +- (BOOL) adPersonalizationConsent { + @synchronized(self) { + NSNumber *b = (id) [self readObjectFromDefaults:BRANCH_PREFS_KEY_DMA_AD_PERSONALIZATION]; + if ([b isKindOfClass:NSNumber.class]) return [b boolValue]; + return NO; + } +} + +- (void) setAdPersonalizationConsent:(BOOL)hasConsent { + @synchronized(self) { + NSNumber *b = [NSNumber numberWithBool:hasConsent]; + [self writeObjectToDefaults:BRANCH_PREFS_KEY_DMA_AD_PERSONALIZATION value:b]; + } +} + +- (BOOL) adUserDataUsageConsent { + @synchronized(self) { + NSNumber *b = (id) [self readObjectFromDefaults:BRANCH_PREFS_KEY_DMA_AD_USER_DATA]; + if ([b isKindOfClass:NSNumber.class]) return [b boolValue]; + return NO; + } +} + +- (void) setAdUserDataUsageConsent:(BOOL)hasConsent { + @synchronized(self) { + NSNumber *b = [NSNumber numberWithBool:hasConsent]; + [self writeObjectToDefaults:BRANCH_PREFS_KEY_DMA_AD_USER_DATA value:b]; + } +} + + - (void) clearTrackingInformation { @synchronized(self) { /* @@ -857,8 +903,7 @@ - (void)writeObjectToDefaults:(NSString *)key value:(NSObject *)value { @synchronized (self) { if (value) { self.persistenceDict[key] = value; - } - else { + } else { [self.persistenceDict removeObjectForKey:key]; } [self persistPrefsToDisk]; @@ -866,21 +911,23 @@ - (void)writeObjectToDefaults:(NSString *)key value:(NSObject *)value { } - (void)persistPrefsToDisk { - @synchronized (self) { - if (!self.persistenceDict) return; - - NSData *data = [self serializePrefDict:self.persistenceDict]; - if (!data) return; - - NSURL *prefsURL = [self.class.URLForPrefsFile copy]; - NSBlockOperation *newPersistOp = [NSBlockOperation blockOperationWithBlock:^ { - NSError *error = nil; - [data writeToURL:prefsURL options:NSDataWritingAtomic error:&error]; - if (error) { - BNCLogWarning([NSString stringWithFormat:@"Failed to persist preferences: %@.", error]); - } - }]; - [_persistPrefsQueue addOperation:newPersistOp]; + if (self.useStorage) { + @synchronized (self) { + if (!self.persistenceDict) return; + + NSData *data = [self serializePrefDict:self.persistenceDict]; + if (!data) return; + + NSURL *prefsURL = [self.class.URLForPrefsFile copy]; + NSBlockOperation *newPersistOp = [NSBlockOperation blockOperationWithBlock:^ { + NSError *error = nil; + [data writeToURL:prefsURL options:NSDataWritingAtomic error:&error]; + if (error) { + [[BranchLogger shared] logWarning:@"Failed to persist preferences" error:error]; + } + }]; + [_persistPrefsQueue addOperation:newPersistOp]; + } } } @@ -890,8 +937,8 @@ - (NSData *)serializePrefDict:(NSMutableDictionary *)dict { NSData *data = nil; @try { data = [NSKeyedArchiver archivedDataWithRootObject:dict requiringSecureCoding:YES error:NULL]; - } @catch (id exception) { - BNCLogWarning([NSString stringWithFormat:@"Exception serializing preferences dict: %@.", exception]); + } @catch (NSException *exception) { + [[BranchLogger shared] logError:[NSString stringWithFormat:@"Exception serializing preferences dict: %@.", exception] error:nil]; } return data; } @@ -906,7 +953,11 @@ + (void) clearAll { - (NSMutableDictionary *)persistenceDict { @synchronized(self) { if (!_persistenceDict) { - _persistenceDict = [self deserializePrefDictFromData:[self loadPrefData]]; + if (self.useStorage) { + _persistenceDict = [self deserializePrefDictFromData:[self loadPrefData]]; + } else { + _persistenceDict = [[NSMutableDictionary alloc] init]; + } } return _persistenceDict; } @@ -918,10 +969,10 @@ - (NSData *)loadPrefData { NSError *error = nil; data = [NSData dataWithContentsOfURL:self.class.URLForPrefsFile options:0 error:&error]; if (error || !data) { - BNCLogWarning(@"Failed to load preferences from storage."); + [[BranchLogger shared] logWarning:@"Failed to load preferences from storage. This is expected on first run." error:error]; } - } @catch (NSException *) { - BNCLogWarning(@"Failed to load preferences from storage."); + } @catch (NSException *exception) { + [[BranchLogger shared] logError:[NSString stringWithFormat:@"Exception loading preferences dict: %@.", exception] error:nil]; } return data; } @@ -934,7 +985,7 @@ - (NSMutableDictionary *)deserializePrefDictFromData:(NSData *)data { dict = [NSKeyedUnarchiver unarchivedObjectOfClasses:classes fromData:data error:&error]; if (error) { - BNCLogWarning(@"Failed to load preferences from storage."); + [[BranchLogger shared] logWarning:@"Failed to load preferences from storage." error:error]; } } @@ -942,6 +993,8 @@ - (NSMutableDictionary *)deserializePrefDictFromData:(NSData *)data { if (dict && [dict isKindOfClass:[NSDictionary class]]) { return [dict mutableCopy]; } else { + + // if nothing was loaded, default to an empty dictionary return [[NSMutableDictionary alloc] init]; } } @@ -1030,10 +1083,10 @@ + (NSURL* _Nonnull) URLForPrefsFile { attributes:nil error:&error]; if (success) { + [[BranchLogger shared] logVerbose:[NSString stringWithFormat:@"Using storage URL %@", branchURL] error:error]; return branchURL; } else { - // BNCLog is dependent on BNCCreateDirectoryForBranchURLWithSearchPath_Unthreaded and cannot be used to log errors from it. - NSLog(@"CreateBranchURL failed: %@ URL: %@.", error, branchURL); + [[BranchLogger shared] logWarning:[NSString stringWithFormat:@"Failed to create URL %@", branchURL] error:error]; } } return nil; @@ -1071,9 +1124,11 @@ + (NSURL* _Nonnull) URLForPrefsFile { withIntermediateDirectories:YES attributes:nil error:&error]; - if (!success) { - // BNCLog is dependent on BNCURLForBranchDirectory_Unthreaded and cannot be used to log errors from it. - NSLog(@"Worst case CreateBranchURL error was: %@ URL: %@.", error, branchURL); + if (success) { + [[BranchLogger shared] logVerbose:[NSString stringWithFormat:@"Using storage URL %@", branchURL] error:error]; + } else { + [[BranchLogger shared] logWarning:[NSString stringWithFormat:@"Failed to create URL %@", branchURL] error:error]; + [[BranchLogger shared] logError:@"Failed all attempts to create URLs to BNCPreferenceHelper storage." error:nil]; } return branchURL; } diff --git a/BranchSDK/BNCProductCategory.m b/Sources/BranchSDK/BNCProductCategory.m similarity index 100% rename from BranchSDK/BNCProductCategory.m rename to Sources/BranchSDK/BNCProductCategory.m diff --git a/BranchSDK/BNCQRCodeCache.m b/Sources/BranchSDK/BNCQRCodeCache.m similarity index 93% rename from BranchSDK/BNCQRCodeCache.m rename to Sources/BranchSDK/BNCQRCodeCache.m index 2efa1996f..b77723e64 100644 --- a/BranchSDK/BNCQRCodeCache.m +++ b/Sources/BranchSDK/BNCQRCodeCache.m @@ -16,8 +16,8 @@ @implementation BNCQRCodeCache //Can only hold one QR code in cache. Just used to debounce. + (BNCQRCodeCache *) sharedInstance { - static BNCQRCodeCache *singleton; - static dispatch_once_t onceToken; + static BNCQRCodeCache *singleton = nil; + static dispatch_once_t onceToken = 0; dispatch_once(&onceToken, ^{ singleton = [BNCQRCodeCache new]; }); diff --git a/BranchSDK/BNCReachability.m b/Sources/BranchSDK/BNCReachability.m similarity index 97% rename from BranchSDK/BNCReachability.m rename to Sources/BranchSDK/BNCReachability.m index d1516c785..ddc98e6e9 100644 --- a/BranchSDK/BNCReachability.m +++ b/Sources/BranchSDK/BNCReachability.m @@ -28,8 +28,8 @@ @interface BNCReachability() @implementation BNCReachability + (BNCReachability *)shared { - static BNCReachability *reachability; - static dispatch_once_t onceToken; + static BNCReachability *reachability = nil; + static dispatch_once_t onceToken = 0; dispatch_once(&onceToken, ^{ reachability = [BNCReachability new]; }); diff --git a/BranchSDK/BNCReferringURLUtility.m b/Sources/BranchSDK/BNCReferringURLUtility.m similarity index 96% rename from BranchSDK/BNCReferringURLUtility.m rename to Sources/BranchSDK/BNCReferringURLUtility.m index f026b7379..3d7b63aac 100644 --- a/BranchSDK/BNCReferringURLUtility.m +++ b/Sources/BranchSDK/BNCReferringURLUtility.m @@ -10,7 +10,7 @@ #import "BNCPreferenceHelper.h" #import "BranchConstants.h" #import "BNCUrlQueryParameter.h" -#import "BNCLog.h" +#import "BranchLogger.h" #import @interface BNCReferringURLUtility() @@ -79,6 +79,7 @@ - (void)processQueryParameter:(NSURLQueryItem *)item { param.validityWindow = [self defaultValidityWindowForParam:name]; } + [[BranchLogger shared] logDebug:[NSString stringWithFormat:@"Parsed Referring URL: %@", param] error:nil]; [self.urlQueryParameters setValue:param forKey:name]; } @@ -90,6 +91,8 @@ - (void)processMetaQueryParameter:(NSURLQueryItem *)item { param.timestamp = [NSDate date]; param.isDeepLink = YES; param.validityWindow = [self defaultValidityWindowForParam:BRANCH_REQUEST_KEY_META_CAMPAIGN_IDS]; + + [[BranchLogger shared] logDebug:[NSString stringWithFormat:@"Parsed Referring URL: %@", param] error:nil]; [self.urlQueryParameters setValue:param forKey:BRANCH_REQUEST_KEY_META_CAMPAIGN_IDS]; } } @@ -112,6 +115,8 @@ - (NSDictionary *)dictionaryFromEncodedJsonString:(NSString *)encodedJsonString NSDictionary *json = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error]; if (!error) { return json; + } else { + [[BranchLogger shared] logError:@"Failed to parse Meta AEM JSON" error:error]; } } return nil; @@ -263,7 +268,6 @@ - (NSMutableDictionary *)serializeToJson:(NSMutableDictionaryoperation) = ^void (idoperation) { - BNCServerResponse *serverResponse = - [self processServerResponse:operation.response data:operation.responseData error:operation.error]; + BNCServerResponse *serverResponse = [self processServerResponse:operation.response data:operation.responseData error:operation.error]; [self collectInstrumentationMetricsWithOperation:operation]; - NSError *underlyingError = operation.error; - NSInteger status = [serverResponse.statusCode integerValue]; - // If the phone is in a poor network condition, // iOS will return statuses such as -1001, -1003, -1200, -9806 // indicating various parts of the HTTP post failed. @@ -108,69 +104,46 @@ - (void)genericHTTPRequest:(NSURLRequest *)request retryNumber:(NSInteger)retryN // Status 53 means the request was killed by the OS because we're still in the background. // This started happening in iOS 12 / Xcode 10 production when we're called from continueUserActivity: // but we're not fully out of the background yet. + + NSInteger status = [serverResponse.statusCode integerValue]; + NSError *underlyingError = operation.error; + // Retry request if appropriate BOOL isRetryableStatusCode = status >= 500 || status < 0 || status == 53; - - // Retry the request if appropriate if (retryNumber < self.preferenceHelper.retryCount && isRetryableStatusCode) { - dispatch_time_t dispatchTime = - dispatch_time(DISPATCH_TIME_NOW, self.preferenceHelper.retryInterval * NSEC_PER_SEC); + dispatch_time_t dispatchTime = dispatch_time(DISPATCH_TIME_NOW, self.preferenceHelper.retryInterval * NSEC_PER_SEC); dispatch_after(dispatchTime, dispatch_get_main_queue(), ^{ if (retryHandler) { - BNCLogDebug([NSString stringWithFormat:@"Retrying request with url %@", request.URL.relativePath]); - // Create the next request + [[BranchLogger shared] logDebug: [NSString stringWithFormat:@"Retrying request with HTTP status code %ld", (long)status] error:underlyingError]; NSURLRequest *retryRequest = retryHandler(retryNumber); - [self genericHTTPRequest:retryRequest - retryNumber:(retryNumber + 1) - callback:callback retryHandler:retryHandler]; + [self genericHTTPRequest:retryRequest retryNumber:(retryNumber + 1) callback:callback retryHandler:retryHandler]; } }); - // Do not continue on if retrying, else the callback will be called incorrectly - return; - } - - NSError *branchError = nil; - - // Wrap up bad statuses w/ specific error messages - if (status >= 500) { - branchError = [NSError branchErrorWithCode:BNCServerProblemError error:underlyingError]; - } - else if (status == 409) { - branchError = [NSError branchErrorWithCode:BNCDuplicateResourceError error:underlyingError]; - } - else if (status >= 400) { - NSString *errorString = [serverResponse.data objectForKey:@"error"]; - if (![errorString isKindOfClass:[NSString class]]) - errorString = nil; - if (!errorString) - errorString = underlyingError.localizedDescription; - if (!errorString) - errorString = @"The request was invalid."; - branchError = [NSError branchErrorWithCode:BNCBadRequestError localizedMessage:errorString]; - } - else if (underlyingError) { - branchError = [NSError branchErrorWithCode:BNCServerProblemError error:underlyingError]; - } + } else { + if (status != 200) { + if ([NSError branchDNSBlockingError:underlyingError]) { + [[BranchLogger shared] logWarning:[NSString stringWithFormat:@"Possible DNS Ad Blocker. Giving up on request with HTTP status code %ld", (long)status] error:underlyingError]; + } else { + [[BranchLogger shared] logWarning: [NSString stringWithFormat:@"Giving up on request with HTTP status code %ld", (long)status] error:underlyingError]; + } + } - if (branchError) { - BNCLogError([NSString stringWithFormat:@"An error prevented request to %@ from completing: %@", - request.URL.absoluteString, branchError]); + // Don't call on the main queue since it might be blocked. + if (callback) { + callback(serverResponse, underlyingError); + } } - - // Don't call on the main queue since it might be blocked. - if (callback) - callback(serverResponse, branchError); }; + // Drops non-linking requests when tracking is disabled if (Branch.trackingDisabled) { NSString *endpoint = request.URL.absoluteString; - - // if endpoint is not linking related, fail it. + if (![self isLinkingRelatedRequest:endpoint]) { [[BNCPreferenceHelper sharedInstance] clearTrackingInformation]; NSError *error = [NSError branchErrorWithCode:BNCTrackingDisabledError]; - BNCLogWarning([NSString stringWithFormat:@"Dropping Request %@: - %@", endpoint, error]); + [[BranchLogger shared] logWarning:[NSString stringWithFormat:@"Dropping non-linking request"] error:error]; if (callback) { callback(nil, error); } @@ -178,12 +151,13 @@ - (void)genericHTTPRequest:(NSURLRequest *)request retryNumber:(NSInteger)retryN } } - id operation = - [self.networkService networkOperationWithURLRequest:request.copy completion:completionHandler]; + id operation = [self.networkService networkOperationWithURLRequest:request.copy completion:completionHandler]; [operation start]; + + // In the past we allowed clients to provide their own networking classes. NSError *error = [self verifyNetworkOperation:operation]; if (error) { - BNCLogError([NSString stringWithFormat:@"Network service error: %@.", error]); + [[BranchLogger shared] logError:@"NetworkService returned an operation that failed validation" error:error]; if (callback) { callback(nil, error); } @@ -214,7 +188,6 @@ - (BOOL)isLinkingRelatedRequest:(NSString *)endpoint { } - (NSError *)verifyNetworkOperation:(id)operation { - if (!operation) { NSString *message = @"A network operation instance is expected to be returned by the" " networkOperationWithURLRequest:completion: method."; @@ -278,29 +251,23 @@ - (NSURLRequest *)prepareGetRequest:(NSDictionary *)params url:(NSString *)url k NSDictionary *tmp = [self addRetryCount:retryNumber toJSON:params]; NSString *requestUrlString = [NSString stringWithFormat:@"%@%@", url, [BNCEncodingUtils encodeDictionaryToQueryString:tmp]]; - BNCLogDebug([NSString stringWithFormat:@"URL: %@", requestUrlString]); - NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:requestUrlString] cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:self.preferenceHelper.timeout]; [request setHTTPMethod:@"GET"]; [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; + [[BranchLogger shared] logDebug:[NSString stringWithFormat:@"%@\nHeaders %@", request, [request allHTTPHeaderFields]] error:nil]; + return request; } - (NSURLRequest *)preparePostRequest:(NSDictionary *)params url:(NSString *)url key:(NSString *)key retryNumber:(NSInteger)retryNumber { - NSDictionary *tmp = [self addRetryCount:retryNumber toJSON:params]; + NSDictionary *updatedParams = [self addRetryCount:retryNumber toJSON:params]; - NSData *postData = [BNCEncodingUtils encodeDictionaryToJsonData:tmp]; + NSData *postData = [BNCEncodingUtils encodeDictionaryToJsonData:updatedParams]; NSString *postLength = [NSString stringWithFormat:@"%lu", (unsigned long)[postData length]]; - - BNCLogDebug([NSString stringWithFormat:@"URL: %@.\n", url]); - BNCLogDebug([NSString stringWithFormat:@"Body: %@\nJSON: %@.", - params, - [[NSString alloc] initWithData:postData encoding:NSUTF8StringEncoding]] - ); NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url] @@ -311,6 +278,10 @@ - (NSURLRequest *)preparePostRequest:(NSDictionary *)params url:(NSString *)url [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; [request setHTTPBody:postData]; + if ([[BranchLogger shared] shouldLog:BranchLogLevelDebug]) { + [[BranchLogger shared] logDebug:[NSString stringWithFormat:@"%@\nHeaders %@\nBody %@", request, [request allHTTPHeaderFields], [BNCEncodingUtils prettyPrintJSON:updatedParams]] error:nil]; + } + return request; } @@ -323,14 +294,21 @@ - (BNCServerResponse *)processServerResponse:(NSURLResponse *)response data:(NSD serverResponse.statusCode = @([httpResponse statusCode]); serverResponse.data = [BNCEncodingUtils decodeJsonDataToDictionary:data]; serverResponse.requestId = requestId; - } - else { + + if ([[BranchLogger shared] shouldLog:BranchLogLevelDebug]) { + [[BranchLogger shared] logDebug:[NSString stringWithFormat:@"%@\nBody %@", response, [BNCEncodingUtils prettyPrintJSON:serverResponse.data]] error:nil]; + } + + } else { serverResponse.statusCode = @(error.code); serverResponse.data = error.userInfo; serverResponse.requestId = requestId; + + if ([[BranchLogger shared] shouldLog:BranchLogLevelDebug]) { + [[BranchLogger shared] logDebug:@"Request failed with NSError" error:error]; + } } - - BNCLogDebug([NSString stringWithFormat:@"Server returned: %@.", serverResponse]); + return serverResponse; } diff --git a/BranchSDK/BNCServerRequest.m b/Sources/BranchSDK/BNCServerRequest.m similarity index 74% rename from BranchSDK/BNCServerRequest.m rename to Sources/BranchSDK/BNCServerRequest.m index ede44b0d8..decdf92db 100644 --- a/BranchSDK/BNCServerRequest.m +++ b/Sources/BranchSDK/BNCServerRequest.m @@ -7,16 +7,16 @@ // #import "BNCServerRequest.h" -#import "BNCLog.h" +#import "BranchLogger.h" @implementation BNCServerRequest - (void)makeRequest:(BNCServerInterface *)serverInterface key:(NSString *)key callback:(BNCServerCallback)callback { - BNCLogError(@"BNCServerRequest subclasses must implement makeRequest:key:callback:."); + [[BranchLogger shared] logError:@"BNCServerRequest subclasses must implement makeRequest:key:callback:." error:nil]; } - (void)processResponse:(BNCServerResponse *)response error:(NSError *)error { - BNCLogError(@"BNCServerRequest subclasses must implement processResponse:error:."); + [[BranchLogger shared] logError:@"BNCServerRequest subclasses must implement processResponse:error:." error:nil]; } - (id)initWithCoder:(NSCoder *)aDecoder { diff --git a/BranchSDK/BNCServerRequestQueue.m b/Sources/BranchSDK/BNCServerRequestQueue.m similarity index 81% rename from BranchSDK/BNCServerRequestQueue.m rename to Sources/BranchSDK/BNCServerRequestQueue.m index dea5a88f7..28bdd988a 100755 --- a/BranchSDK/BNCServerRequestQueue.m +++ b/Sources/BranchSDK/BNCServerRequestQueue.m @@ -15,7 +15,7 @@ #import "BranchOpenRequest.h" #import "BranchEvent.h" -#import "BNCLog.h" +#import "BranchLogger.h" static NSString * const BRANCH_QUEUE_FILE = @"BNCServerRequestQueue"; @@ -68,7 +68,7 @@ - (void)enqueue:(BNCServerRequest *)request { - (void)insert:(BNCServerRequest *)request at:(NSUInteger)index { @synchronized (self) { if (index > self.queue.count) { - BNCLogError(@"Invalid queue operation: index out of bound!"); + [[BranchLogger shared] logError:@"Invalid queue operation: index out of bound!" error:nil]; return; } if (request) { @@ -94,7 +94,7 @@ - (BNCServerRequest *)removeAt:(NSUInteger)index { @synchronized (self) { BNCServerRequest *request = nil; if (index >= self.queue.count) { - BNCLogError(@"Invalid queue operation: index out of bound!"); + [[BranchLogger shared] logError:@"Invalid queue operation: index out of bound!" error:nil]; return nil; } request = [self.queue objectAtIndex:index]; @@ -120,7 +120,7 @@ - (BNCServerRequest *)peek { - (BNCServerRequest *)peekAt:(NSUInteger)index { @synchronized (self) { if (index >= self.queue.count) { - BNCLogError(@"Invalid queue operation: index out of bound!"); + [[BranchLogger shared] logError:@"Invalid queue operation: index out of bound!" error:nil]; return nil; } BNCServerRequest *request = nil; @@ -161,56 +161,17 @@ - (BOOL)containsInstallOrOpen { } } -- (BOOL)removeInstallOrOpen { +- (BranchOpenRequest *)findExistingInstallOrOpen { @synchronized (self) { for (NSUInteger i = 0; i < self.queue.count; i++) { BNCServerRequest *request = [self.queue objectAtIndex:i]; - // Install extends open, so only need to check open. - if ([request isKindOfClass:[BranchOpenRequest class]]) { - BNCLogDebugSDK(@"Removing open request."); - ((BranchOpenRequest *)request).callback = nil; - [self remove:request]; - return YES; - } - } - return NO; - } -} - -- (BranchOpenRequest *)moveInstallOrOpenToFront:(NSInteger)networkCount { - @synchronized (self) { - - BOOL requestAlreadyInProgress = networkCount > 0; - BNCServerRequest *openOrInstallRequest; - for (NSUInteger i = 0; i < self.queue.count; i++) { - BNCServerRequest *req = [self.queue objectAtIndex:i]; - if ([req isKindOfClass:[BranchOpenRequest class]]) { - - // Already in front, nothing to do - if (i == 0 || (i == 1 && requestAlreadyInProgress)) { - return (BranchOpenRequest *)req; - } - - // Otherwise, pull this request out and stop early - openOrInstallRequest = [self removeAt:i]; - break; + // Install subclasses open, so only need to check open + if ([request isKindOfClass:[BranchOpenRequest class]]) { + return (BranchOpenRequest *)request; } } - - if (!openOrInstallRequest) { - BNCLogError(@"No install or open request in queue while trying to move it to the front."); - return nil; - } - - if (!requestAlreadyInProgress || !self.queue.count) { - [self insert:openOrInstallRequest at:0]; - } - else { - [self insert:openOrInstallRequest at:1]; - } - - return (BranchOpenRequest *)openOrInstallRequest; + return nil; } } @@ -265,10 +226,10 @@ - (void)persistImmediately { [data writeToURL:self.class.URLForQueueFile options:NSDataWritingAtomic error:&error]; if (error) { - BNCLogError([NSString stringWithFormat:@"Failed to persist queue to disk: %@.", error]); + [[BranchLogger shared] logError:[NSString stringWithFormat:@"Failed to persist queue to disk: %@.", error] error:error]; } } else { - BNCLogError([NSString stringWithFormat:@"Failed to encode queue."]); + [[BranchLogger shared] logError:[NSString stringWithFormat:@"Failed to encode queue."] error:nil]; } } } @@ -306,7 +267,7 @@ - (NSData *)archiveObject:(NSObject *)object { data = [NSKeyedArchiver archivedDataWithRootObject:object requiringSecureCoding:YES error:&error]; if (!data && error) { - BNCLogWarning([NSString stringWithFormat:@"Failed to archive: %@", error]); + [[BranchLogger shared] logWarning:@"Failed to archive: %@" error:error]; } return data; } @@ -323,6 +284,19 @@ - (void)retrieve { } } +// It's been reported that unarchive can fail in some situations. In that case, remove the queued requests file. +- (void)removeSaveFile { + NSURL *fileURL = [BNCServerRequestQueue URLForQueueFile]; + if (fileURL) { + NSError *error; + [NSFileManager.defaultManager removeItemAtURL:fileURL error:&error]; + + if (error) { + [[BranchLogger shared] logError:@"Failed to remove archived queue" error:error]; + } + } +} + - (NSMutableArray *)unarchiveQueueFromData:(NSData *)data { NSMutableArray *queue = [NSMutableArray new]; @@ -356,7 +330,8 @@ - (id)unarchiveObjectFromData:(NSData *)data { id object = [NSKeyedUnarchiver unarchivedObjectOfClasses:[BNCServerRequestQueue encodableClasses] fromData:data error:&error]; if (error) { - BNCLogWarning([NSString stringWithFormat:@"Failed to unarchive: %@", error]); + [[BranchLogger shared] logError:@"Failed to unarchive" error:error]; + [self removeSaveFile]; } return object; @@ -365,12 +340,12 @@ - (id)unarchiveObjectFromData:(NSData *)data { // only replay analytics requests, the others are time sensitive + (NSSet *)replayableRequestClasses { static NSSet *requestClasses = nil; - static dispatch_once_t onceToken; + static dispatch_once_t onceToken = 0; dispatch_once(&onceToken, ^ { NSArray *tmp = @[ [BranchOpenRequest class], [BranchInstallRequest class], - [BranchEventRequest class], + [BranchEventRequest class] ]; requestClasses = [NSSet setWithArray:tmp]; }); @@ -381,7 +356,7 @@ - (id)unarchiveObjectFromData:(NSData *)data { // encodable classes also includes NSArray and NSData + (NSSet *)encodableClasses { static NSSet *classes = nil; - static dispatch_once_t onceToken; + static dispatch_once_t onceToken = 0; dispatch_once(&onceToken, ^ { NSMutableArray *tmp = [NSMutableArray new]; [tmp addObject:[NSArray class]]; // root object @@ -398,7 +373,7 @@ - (id)unarchiveObjectFromData:(NSData *)data { + (NSURL * _Nonnull) URLForQueueFile { static NSURL *URL = nil; - static dispatch_once_t onceToken; + static dispatch_once_t onceToken = 0; dispatch_once(&onceToken, ^ { URL = BNCURLForBranchDirectory(); URL = [URL URLByAppendingPathComponent:BRANCH_QUEUE_FILE isDirectory:NO]; @@ -408,11 +383,11 @@ + (NSURL * _Nonnull) URLForQueueFile { + (instancetype)getInstance { static BNCServerRequestQueue *sharedQueue = nil; - static dispatch_once_t onceToken; + static dispatch_once_t onceToken = 0; dispatch_once(&onceToken, ^ { sharedQueue = [[BNCServerRequestQueue alloc] init]; [sharedQueue retrieve]; - BNCLogDebugSDK([NSString stringWithFormat:@"Retrieved from storage: %@.", sharedQueue]); + [[BranchLogger shared] logVerbose:[NSString stringWithFormat:@"Retrieved from storage: %@.", sharedQueue] error:nil]; }); return sharedQueue; } diff --git a/BranchSDK/BNCServerResponse.m b/Sources/BranchSDK/BNCServerResponse.m similarity index 100% rename from BranchSDK/BNCServerResponse.m rename to Sources/BranchSDK/BNCServerResponse.m diff --git a/BranchSDK/BNCSpotlightService.m b/Sources/BranchSDK/BNCSpotlightService.m similarity index 99% rename from BranchSDK/BNCSpotlightService.m rename to Sources/BranchSDK/BNCSpotlightService.m index 75aa0eaab..aa517c355 100644 --- a/BranchSDK/BNCSpotlightService.m +++ b/Sources/BranchSDK/BNCSpotlightService.m @@ -6,6 +6,8 @@ // Copyright © 2017 Branch Metrics. All rights reserved. // +#if !TARGET_OS_TV + #import "BNCSpotlightService.h" #import "Branch.h" #import "BNCSystemObserver.h" @@ -487,3 +489,4 @@ - (void)removeAllBranchSearchableItemsWithCallback:(void (^_Nullable)(NSError * #undef IndexingNotAvalable } @end +#endif diff --git a/BranchSDK/BNCSystemObserver.m b/Sources/BranchSDK/BNCSystemObserver.m similarity index 89% rename from BranchSDK/BNCSystemObserver.m rename to Sources/BranchSDK/BNCSystemObserver.m index 9b11dcd4e..e171a7271 100644 --- a/BranchSDK/BNCSystemObserver.m +++ b/Sources/BranchSDK/BNCSystemObserver.m @@ -7,7 +7,7 @@ // #import "BNCSystemObserver.h" -#import "BNCLog.h" +#import "BranchLogger.h" #if __has_feature(modules) @import UIKit; @import SystemConfiguration; @@ -31,6 +31,7 @@ @implementation BNCSystemObserver + (NSString *)appleAttributionToken { // token is not available on simulator if ([self isSimulator]) { + [[BranchLogger shared] logVerbose:[NSString stringWithFormat:@"AppleAttributionToken not available on simulator"] error:nil]; return nil; } @@ -54,7 +55,7 @@ + (NSString *)appleAttributionToken { // Apple said this API should respond within 50ms, lets give up after 500 ms dispatch_semaphore_wait(semaphore, dispatch_time(DISPATCH_TIME_NOW, (int64_t)(500 * NSEC_PER_MSEC))); if (token == nil) { - BNCLogDebug([NSString stringWithFormat:@"AppleAttributionToken request timed out"]); + [[BranchLogger shared] logError:[NSString stringWithFormat:@"AppleAttributionToken request timed out"] error:nil]; } } #endif @@ -64,6 +65,7 @@ + (NSString *)appleAttributionToken { + (NSString *)advertiserIdentifier { #ifdef BRANCH_EXCLUDE_IDFA_CODE + [[BranchLogger shared] logDebug:[NSString stringWithFormat:@"BRANCH_EXCLUDE_IDFA_CODE flag enabled. IDFA is not available"] error:nil]; return nil; #else @@ -80,6 +82,7 @@ + (NSString *)advertiserIdentifier { (sharedManager, advertisingIdentifierSelector); uid = [uuid UUIDString]; if ([uid isEqualToString:@"00000000-0000-0000-0000-000000000000"]) { + [[BranchLogger shared] logVerbose:[NSString stringWithFormat:@"IDFA is all 0's. Probably running on a simulator or an App Clip."] error:nil]; uid = nil; } } @@ -92,6 +95,7 @@ + (NSString *)attOptedInStatus { NSString *statusString = @"unavailable"; #ifdef BRANCH_EXCLUDE_ATT_STATUS_CODE + [[BranchLogger shared] logDebug:[NSString stringWithFormat:@"BRANCH_EXCLUDE_IDFA_CODE flag enabled. ATT opt in status unavailable"] error:nil]; #else Class ATTrackingManagerClass = NSClassFromString(@"ATTrackingManager"); @@ -128,6 +132,8 @@ + (NSString *)defaultURIScheme { for (NSDictionary *urlType in urlTypes) { NSArray *urlSchemes = [urlType objectForKey:@"CFBundleURLSchemes"]; for (NSString *uriScheme in urlSchemes) { + + // TODO: Add a log to indicate that a URI was ignored due to a match with a known URI format if ([uriScheme hasPrefix:@"fb"]) continue; // Facebook if ([uriScheme hasPrefix:@"db"]) continue; // DB? if ([uriScheme hasPrefix:@"twitterkit-"]) continue; // Twitter @@ -168,6 +174,8 @@ + (NSString *)teamIdentifier { if (teamWithDot.length) { return [teamWithDot substringToIndex:([teamWithDot length] - 1)]; } + + [[BranchLogger shared] logVerbose:@"AppIdentifierPrefix not found in mainBundle" error:nil]; return nil; } diff --git a/Sources/BranchSDK/BNCURLFilter.m b/Sources/BranchSDK/BNCURLFilter.m new file mode 100644 index 000000000..65cf25ff5 --- /dev/null +++ b/Sources/BranchSDK/BNCURLFilter.m @@ -0,0 +1,188 @@ +/** + @file BNCURLFilter.m + @package Branch-SDK + @brief Manages a list of URLs that we should ignore. + + @author Edward Smith + @date February 14, 2018 + @copyright Copyright © 2018 Branch. All rights reserved. +*/ + +#import "BNCURLFilter.h" +#import "Branch.h" +#import "BranchLogger.h" +#import "NSError+Branch.h" + +@interface BNCURLFilter () + +@property (strong, nonatomic, readwrite) NSArray *patternList; + +// Is YES if the list has already been updated from the server, or is overridden with a custom list. +@property (nonatomic, assign, readwrite) BOOL hasUpdatedPatternList; + +@property (strong, nonatomic) NSArray *ignoredURLRegex; +@property (assign, nonatomic) NSInteger listVersion; + +@end + +@implementation BNCURLFilter + +- (instancetype)init { + self = [super init]; + if (!self) return self; + + [self useDefaultPatternList]; + + return self; +} + +- (void)useDefaultPatternList { + self.patternList = @[ + @"^fb\\d+:((?!campaign_ids).)*$", // Facebook + @"^li\\d+:", // LinkedIn - deprecated + @"^pdk\\d+:", // Pinterest - deprecated + @"^twitterkit-.*:", // TwitterKit - deprecated + @"^com\\.googleusercontent\\.apps\\.\\d+-.*:\\/oauth", // Google + @"^(?i)(?!(http|https):).*(:|:.*\\b)(password|o?auth|o?auth.?token|access|access.?token)\\b", + @"^(?i)((http|https):\\/\\/).*[\\/|?|#].*\\b(password|o?auth|o?auth.?token|access|access.?token)\\b", + ]; + self.listVersion = -1; // First time always refresh the list version, version 0. + self.ignoredURLRegex = [self compileRegexArray:self.patternList]; +} + +- (NSArray *)compileRegexArray:(NSArray *)patternList { + NSMutableArray *array = [NSMutableArray new]; + for (NSString *pattern in patternList) { + NSError *regexError = nil; + NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options: NSRegularExpressionAnchorsMatchLines | NSRegularExpressionUseUnicodeWordBoundaries error:®exError]; + + if (regex && !regexError) { + [array addObject:regex]; + } else { + [[BranchLogger shared] logError:[NSString stringWithFormat:@"Invalid regular expression '%@'", pattern] error:regexError]; + } + } + return array; +} + +- (nullable NSString *)patternMatchingURL:(NSURL *)url { + NSString *urlString = url.absoluteString; + if (urlString == nil || urlString.length <= 0) return nil; + + NSRange range = NSMakeRange(0, urlString.length); + for (NSRegularExpression* regex in self.ignoredURLRegex) { + NSUInteger matches = [regex numberOfMatchesInString:urlString options:0 range:range]; + if (matches > 0) return regex.pattern; + } + + return nil; +} + +- (BOOL)shouldIgnoreURL:(NSURL *)url { + return ([self patternMatchingURL:url]) ? YES : NO; +} + +- (void)useSavedPatternList { + NSArray *storedList = [BNCPreferenceHelper sharedInstance].savedURLPatternList; + if (storedList.count > 0) { + self.patternList = storedList; + self.listVersion = [BNCPreferenceHelper sharedInstance].savedURLPatternListVersion; + } + self.ignoredURLRegex = [self compileRegexArray:self.patternList]; +} + +- (void)useCustomPatternList:(NSArray *)patternList { + if (patternList.count > 0) { + self.patternList = patternList; + self.listVersion = 0; + } + self.ignoredURLRegex = [self compileRegexArray:self.patternList]; +} + +#pragma mark Server update + +- (void)updatePatternListFromServerWithCompletion:(void (^_Nullable) (void))completion { + if (self.hasUpdatedPatternList) { + return; + } + + NSString *urlString = [NSString stringWithFormat:@"%@/sdk/uriskiplist_v%ld.json", [BNCPreferenceHelper sharedInstance].patternListURL, (long) self.listVersion+1]; + NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlString] cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:30.0]; + + __block id networkService = [[Branch networkServiceClass] new]; + id operation = [networkService networkOperationWithURLRequest:request completion: ^(id operation) { + [self processServerOperation:operation]; + if (completion) { + completion(); + } + }]; + [operation start]; +} + +- (BOOL)foundUpdatedURLList:(id)operation { + NSInteger statusCode = operation.response.statusCode; + NSError *error = operation.error; + NSString *jsonString = nil; + if (operation.responseData) { + jsonString = [[NSString alloc] initWithData:operation.responseData encoding:NSUTF8StringEncoding]; + } + + if (statusCode == 404) { + [[BranchLogger shared] logDebug:@"No update for URL ignore list found." error:nil]; + return NO; + } else if (statusCode != 200 || error != nil || jsonString == nil) { + if ([NSError branchDNSBlockingError:error]) { + [[BranchLogger shared] logWarning:@"Possible DNS Ad Blocker" error:error]; + } else { + [[BranchLogger shared] logWarning:@"Failed to update URL ignore list" error:operation.error]; + } + return NO; + } else { + return YES; + } +} + +- (nullable NSDictionary *)parseJSONFromData:(NSData *)data { + NSError *error = nil; + NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error]; + + if (error) { + [[BranchLogger shared] logWarning:@"Failed to parse uri_skip_list" error:error]; + return nil; + } + + // Given the way this is currently designed, the server will return formats that will fail this check. + // Making this a verbose log until we have a chance to refactor this design. + NSArray *urls = dictionary[@"uri_skip_list"]; + if (![urls isKindOfClass:NSArray.class]) { + [[BranchLogger shared] logVerbose:@"Failed to parse uri_skip_list is not a NSArray" error:nil]; + return nil; + } + + NSNumber *version = dictionary[@"version"]; + if (![version isKindOfClass:NSNumber.class]) { + [[BranchLogger shared] logWarning:@"Failed to parse uri_skip_list, version is not a NSNumber." error:nil]; + return nil; + } + + return dictionary; +} + +- (void)processServerOperation:(id)operation { + if ([self foundUpdatedURLList:operation]) { + NSDictionary *json = [self parseJSONFromData:operation.responseData]; + if (json) { + NSNumber *version = json[@"version"]; + + self.hasUpdatedPatternList = YES; + self.patternList = json[@"uri_skip_list"]; + self.listVersion = [version longValue]; + self.ignoredURLRegex = [self compileRegexArray:self.patternList]; + + [BNCPreferenceHelper sharedInstance].savedURLPatternList = self.patternList; + [BNCPreferenceHelper sharedInstance].savedURLPatternListVersion = self.listVersion; + } + } +} + +@end diff --git a/BranchSDK/BNCUrlQueryParameter.m b/Sources/BranchSDK/BNCUrlQueryParameter.m similarity index 100% rename from BranchSDK/BNCUrlQueryParameter.m rename to Sources/BranchSDK/BNCUrlQueryParameter.m diff --git a/BranchSDK/BNCUserAgentCollector.m b/Sources/BranchSDK/BNCUserAgentCollector.m similarity index 96% rename from BranchSDK/BNCUserAgentCollector.m rename to Sources/BranchSDK/BNCUserAgentCollector.m index 029173f4c..fd43d3089 100644 --- a/BranchSDK/BNCUserAgentCollector.m +++ b/Sources/BranchSDK/BNCUserAgentCollector.m @@ -6,6 +6,7 @@ // Copyright © 2019 Branch, Inc. All rights reserved. // +#if !TARGET_OS_TV #import "BNCUserAgentCollector.h" #import "BNCPreferenceHelper.h" #import "BNCDeviceSystem.h" @@ -26,8 +27,8 @@ @interface BNCUserAgentCollector() @implementation BNCUserAgentCollector + (BNCUserAgentCollector *)instance { - static BNCUserAgentCollector *collector; - static dispatch_once_t onceToken; + static BNCUserAgentCollector *collector = nil; + static dispatch_once_t onceToken = 0; dispatch_once(&onceToken, ^{ collector = [BNCUserAgentCollector new]; }); @@ -108,3 +109,4 @@ - (void)collectUserAgentWithCompletion:(void (^)(NSString *userAgent))completion } @end +#endif diff --git a/BranchSDK/Branch+Validator.m b/Sources/BranchSDK/Branch+Validator.m similarity index 100% rename from BranchSDK/Branch+Validator.m rename to Sources/BranchSDK/Branch+Validator.m diff --git a/BranchSDK/Branch.m b/Sources/BranchSDK/Branch.m similarity index 90% rename from BranchSDK/Branch.m rename to Sources/BranchSDK/Branch.m index 24bcf7ef0..bae996c17 100644 --- a/BranchSDK/Branch.m +++ b/Sources/BranchSDK/Branch.m @@ -39,10 +39,12 @@ #import "BranchEvent.h" #import "BNCPasteboard.h" #import "NSError+Branch.h" -#import "BNCLog.h" +#import "BranchLogger.h" #import "UIViewController+Branch.h" #import "BNCReferringURLUtility.h" #import "BNCServerAPI.h" +#import "BranchPluginSupport.h" +#import "BranchLogger.h" #if !TARGET_OS_TV #import "BNCUserAgentCollector.h" @@ -80,7 +82,6 @@ NSString * const BNCShareInitiatedEvent = @"Share Started"; NSString * const BNCShareCompletedEvent = @"Share Completed"; -static NSString * const BNCLogLevelKey = @"io.branch.sdk.BNCLogLevel"; NSString * const BNCSpotlightFeature = @"spotlight"; #ifndef CSSearchableItemActivityIdentifier @@ -89,6 +90,8 @@ #pragma mark - Load Categories +// Depending on linker settings, static compilation can omit ObjC categories leading to a runtime error. +// These no-op static initializers force the category to load. void ForceCategoriesToLoad(void); void ForceCategoriesToLoad(void) { BNCForceNSErrorCategoryToLoad(); @@ -122,7 +125,6 @@ typedef NS_ENUM(NSInteger, BNCInitStatus) { @interface Branch() { NSInteger _networkCount; - BNCURLFilter *_userURLFilter; } // This isolation queue protects branch initialization and ensures things are processed in order. @@ -141,6 +143,8 @@ @interface Branch() { @property (strong, nonatomic) NSDictionary *deepLinkDebugParams; @property (strong, nonatomic) NSMutableArray *allowedSchemeList; @property (strong, nonatomic) BNCURLFilter *urlFilter; +@property (strong, nonatomic, readwrite) BNCURLFilter *userURLFilter; + @property (strong, nonatomic) BNCServerAPI *serverAPI; #if !TARGET_OS_TV @@ -153,6 +157,7 @@ @interface Branch() { // This is enabled by setting deferInitForPluginRuntime to true in branch.json @property (nonatomic, assign, readwrite) BOOL deferInitForPluginRuntime; @property (nonatomic, copy, nullable) void (^cachedInitBlock)(void); +@property (nonatomic, copy, readwrite) NSString *cachedURLString; @end @@ -207,6 +212,8 @@ - (id)initWithInterface:(BNCServerInterface *)interface self.class.branchKey = key; self.urlFilter = [BNCURLFilter new]; + [self.urlFilter useSavedPatternList]; + self.userURLFilter = nil; [BranchOpenRequest setWaitNeededForOpenResponseLock]; @@ -231,8 +238,12 @@ - (id)initWithInterface:(BNCServerInterface *)interface BranchJsonConfig *config = BranchJsonConfig.instance; self.deferInitForPluginRuntime = config.deferInitForPluginRuntime; + if (config.apiUrl) { + [Branch setAPIUrl:config.apiUrl]; + } + if (config.enableLogging) { - [self enableLogging]; + [Branch enableLogging]; } if (config.checkPasteboardOnInstall) { @@ -247,14 +258,14 @@ - (id)initWithInterface:(BNCServerInterface *)interface + (void)setNetworkServiceClass:(Class)networkServiceClass { @synchronized ([Branch class]) { if (bnc_networkServiceClass) { - BNCLogError(@"The Branch network service class is already set. It can be set only once."); + [[BranchLogger shared] logError:@"The Branch network service class is already set. Ignoring attempt to set it again." error:nil]; return; } if (![networkServiceClass conformsToProtocol:@protocol(BNCNetworkServiceProtocol)]) { - BNCLogError([NSString stringWithFormat:@"Class '%@' doesn't conform to protocol '%@'.", - NSStringFromClass(networkServiceClass), - NSStringFromProtocol(@protocol(BNCNetworkServiceProtocol))] - ); + [[BranchLogger shared] logError:[NSString stringWithFormat:@"Class '%@' doesn't conform to protocol '%@'.", + NSStringFromClass(networkServiceClass), + NSStringFromProtocol(@protocol(BNCNetworkServiceProtocol))] error:nil]; + return; } bnc_networkServiceClass = networkServiceClass; @@ -313,7 +324,7 @@ + (void)resetBranchKey { + (void)setUseTestBranchKey:(BOOL)useTestKey { @synchronized (self) { if (bnc_branchKey && !!useTestKey != !!bnc_useTestBranchKey) { - BNCLogError(@"Can't switch the Branch key once it's in use."); + [[BranchLogger shared] logError:@"Can't switch the Branch key once it's in use." error:nil]; return; } bnc_useTestBranchKey = useTestKey; @@ -331,7 +342,7 @@ + (void)setBranchKey:(NSString *)branchKey { [self setBranchKey:branchKey error:&error]; if (error) { - BNCLogError([NSString stringWithFormat:@"Branch init error: %@", error.localizedDescription]); + [[BranchLogger shared] logError:@"Failed to set Branch Key" error:error]; } } @@ -346,6 +357,8 @@ + (void)setBranchKey:(NSString*)branchKey error:(NSError **)error { NSString *errorMessage = [NSString stringWithFormat:@"Branch key can only be set once."]; *error = [NSError branchErrorWithCode:BNCInitError localizedMessage:errorMessage]; + [[BranchLogger shared] logError:[NSString stringWithFormat:@"Branch key can only be set once."] error:*error]; + return; } @@ -354,15 +367,13 @@ + (void)setBranchKey:(NSString*)branchKey error:(NSError **)error { NSString *errorMessage = [NSString stringWithFormat:@"Invalid Branch key of type '%@'.", typeName]; *error = [NSError branchErrorWithCode:BNCInitError localizedMessage:errorMessage]; + [[BranchLogger shared] logError:[NSString stringWithFormat:@"Invalid Branch key of type '%@'.", typeName] error:*error]; return; } if ([branchKey hasPrefix:@"key_test"]) { bnc_useTestBranchKey = YES; - BNCLogWarning( - @"You are using your test app's Branch Key. " - "Remember to change it to live Branch Key for production deployment." - ); + [[BranchLogger shared] logWarning: @"You are using your test app's Branch Key. Remember to change it to live Branch Key for production deployment." error:nil]; } else if ([branchKey hasPrefix:@"key_live"]) { bnc_useTestBranchKey = NO; @@ -370,6 +381,7 @@ + (void)setBranchKey:(NSString*)branchKey error:(NSError **)error { } else { NSString *errorMessage = [NSString stringWithFormat:@"Invalid Branch key format. Did you add your Branch key to your Info.plist? Passed key is '%@'.", branchKey]; *error = [NSError branchErrorWithCode:BNCInitError localizedMessage:errorMessage]; + [[BranchLogger shared] logError:[NSString stringWithFormat:@"Invalid Branch key format. Did you add your Branch key to your Info.plist? Passed key is '%@'.", branchKey] error:*error]; return; } @@ -401,9 +413,7 @@ + (NSString *)branchKey { self.branchKey = branchKey; if (!bnc_branchKey) { - BNCLogError(@"Your Branch key is not set in your Info.plist file. See " - "https://dev.branch.io/getting-started/sdk-integration-guide/guide/ios/#configure-xcode-project" - " for configuration instructions."); + [[BranchLogger shared] logError:@"Your Branch key is not set in your Info.plist file. See https://dev.branch.io/getting-started/sdk-integration-guide/guide/ios/#configure-xcode-project for configuration instructions." error:nil]; } return bnc_branchKey; } @@ -416,20 +426,38 @@ + (BOOL)branchKeyIsSet { } - (void)enableLogging { - BNCLogSetDisplayLevel(BNCLogLevelDebug); + [Branch enableLogging]; +} + +- (void)enableLoggingAtLevel:(BranchLogLevel)logLevel withCallback:(nullable BranchLogCallback)callback { + [Branch enableLoggingAtLevel:logLevel withCallback:callback]; +} + ++ (void)enableLogging { + BranchLogger *logger = [BranchLogger shared]; + logger.loggingEnabled = YES; + logger.logLevelThreshold = BranchLogLevelDebug; +} + ++ (void)enableLoggingAtLevel:(BranchLogLevel)logLevel withCallback:(nullable BranchLogCallback)callback { + BranchLogger *logger = [BranchLogger shared]; + logger.loggingEnabled = YES; + logger.logLevelThreshold = logLevel; + if (callback) { + logger.logCallback = callback; + } } - (void)useEUEndpoints { [BNCServerAPI sharedInstance].useEUServers = YES; } -- (void)setDebug { - NSLog(@"Branch setDebug is deprecated and all functionality has been disabled. " - "If you wish to enable logging, please invoke enableLogging. " - "If you wish to simulate installs, please see add a Test Device " - "(https://help.branch.io/using-branch/docs/adding-test-devices) " - "then reset your test device's data " - "(https://help.branch.io/using-branch/docs/adding-test-devices#section-resetting-your-test-device-data)."); ++ (void)setAPIUrl:(NSString *)url { + if ([url hasPrefix:@"http://"] || [url hasPrefix:@"https://"] ){ + [BNCServerAPI sharedInstance].customAPIURL = url; + } else { + [[BranchLogger shared] logWarning:@"Ignoring invalid custom API URL" error:nil]; + } } - (void)validateSDKIntegration { @@ -462,43 +490,11 @@ - (void)setRetryInterval:(NSTimeInterval)retryInterval { self.preferenceHelper.retryInterval = retryInterval; } -- (void)disableCookieBasedMatching { - // deprecated -} - -- (void)accountForFacebookSDKPreventingAppLaunch { - // deprecated -} - -- (void)suppressWarningLogs { - NSLog(@"suppressWarningLogs is deprecated and all functionality has been disabled. " - "If you wish to turn off all logging, please invoke BNCLogSetDisplayLevel(BNCLogLevelNone)."); -} - (void)setRequestMetadataKey:(NSString *)key value:(NSObject *)value { [self.preferenceHelper setRequestMetadataKey:key value:value]; } -- (void)enableDelayedInit { - // deprecated -} - -- (void)disableDelayedInit { - // deprecated -} - -- (NSURL *)getUrlForOnboardingWithRedirectUrl:(NSString *)redirectUrl { - // deprecated - return nil; -} - -- (void)resumeInit { - // deprecated -} - -- (void)setInstallRequestDelay:(NSInteger)installRequestDelay { - // deprecated -} + (BOOL)trackingDisabled { @synchronized(self) { @@ -526,7 +522,7 @@ + (void)setTrackingDisabled:(BOOL)disabled { // Set the flag: [BNCPreferenceHelper sharedInstance].trackingDisabled = NO; // Initialize a Branch session: - [Branch.getInstance initUserSessionAndCallCallback:NO sceneIdentifier:nil]; + [Branch.getInstance initUserSessionAndCallCallback:NO sceneIdentifier:nil urlString:nil]; } } } @@ -537,6 +533,12 @@ + (void)setReferrerGbraidValidityWindow:(NSTimeInterval)validityWindow{ } } ++ (void) setDMAParamsForEEA:(BOOL)eeaRegion AdPersonalizationConsent:(BOOL)adPersonalizationConsent AdUserDataUsageConsent:(BOOL)adUserDataUsageConsent{ + [BNCPreferenceHelper sharedInstance].eeaRegion = eeaRegion; + [BNCPreferenceHelper sharedInstance].adPersonalizationConsent = adPersonalizationConsent; + [BNCPreferenceHelper sharedInstance].adUserDataUsageConsent = adUserDataUsageConsent; +} + #pragma mark - InitSession Permutation methods - (void)initSessionWithLaunchOptions:(NSDictionary *)options { @@ -581,8 +583,7 @@ - (void)initSessionWithLaunchOptions:(NSDictionary *)options automaticallyDispla #pragma mark - Actual Init Session -- (void)initSessionWithLaunchOptions:(NSDictionary *)options isReferrable:(BOOL)isReferrable explicitlyRequestedReferrable:(BOOL)explicitlyRequestedReferrable automaticallyDisplayController:(BOOL)automaticallyDisplayController registerDeepLinkHandlerUsingBranchUniversalObject:(callbackWithBranchUniversalObject)callback { - +- (void)initSessionWithLaunchOptions:(NSDictionary *)options isReferrable:(BOOL)isReferrable explicitlyRequestedReferrable:(BOOL)explicitlyRequestedReferrable automaticallyDisplayController:(BOOL)automaticallyDisplayController registerDeepLinkHandlerUsingBranchUniversalObject:(callbackWithBranchUniversalObject)callback { [self initSceneSessionWithLaunchOptions:options isReferrable:isReferrable explicitlyRequestedReferrable:explicitlyRequestedReferrable automaticallyDisplayController:automaticallyDisplayController registerDeepLinkHandler:^(BNCInitSessionResponse * _Nullable initResponse, NSError * _Nullable error) { if (callback) { @@ -596,7 +597,6 @@ - (void)initSessionWithLaunchOptions:(NSDictionary *)options isReferrable:(BOOL) } - (void)initSessionWithLaunchOptions:(NSDictionary *)options isReferrable:(BOOL)isReferrable explicitlyRequestedReferrable:(BOOL)explicitlyRequestedReferrable automaticallyDisplayController:(BOOL)automaticallyDisplayController registerDeepLinkHandler:(callbackWithParams)callback { - [self initSceneSessionWithLaunchOptions:options isReferrable:isReferrable explicitlyRequestedReferrable:explicitlyRequestedReferrable automaticallyDisplayController:automaticallyDisplayController registerDeepLinkHandler:^(BNCInitSessionResponse * _Nullable initResponse, NSError * _Nullable error) { if (callback) { @@ -625,38 +625,22 @@ - (void)initSessionWithLaunchOptions:(NSDictionary *)options [self.class addBranchSDKVersionToCrashlyticsReport]; self.shouldAutomaticallyDeepLink = automaticallyDisplayController; - // If the SDK is already initialized, this means that initSession was called after other lifecycle calls. - if (self.initializationStatus == BNCInitStatusInitialized) { - [self initUserSessionAndCallCallback:YES sceneIdentifier:nil]; - return; - } - - // Save data from push notification on app launch + // Check for Branch link in a push payload + NSString *pushURL = nil; #if !TARGET_OS_TV if ([options objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]) { id branchUrlFromPush = [options objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey][BRANCH_PUSH_NOTIFICATION_PAYLOAD_KEY]; if ([branchUrlFromPush isKindOfClass:[NSString class]]) { self.preferenceHelper.universalLinkUrl = branchUrlFromPush; self.preferenceHelper.referringURL = branchUrlFromPush; + pushURL = (NSString *)branchUrlFromPush; } } #endif - // Handle case where there's no URI scheme or Universal Link. - if (![options.allKeys containsObject:UIApplicationLaunchOptionsURLKey] && ![options.allKeys containsObject:UIApplicationLaunchOptionsUserActivityDictionaryKey]) { - - // queue up async attribution checks - [self checkAttributionStatusAndInitialize]; - } + [self initUserSessionAndCallCallback:YES sceneIdentifier:nil urlString:pushURL]; } -- (void)checkAttributionStatusAndInitialize { - dispatch_async(self.isolationQueue, ^(){ - [self initUserSessionAndCallCallback:YES sceneIdentifier:nil]; - }); -} - -//these params will be added - (void)setDeepLinkDebugMode:(NSDictionary *)debugParams { self.deepLinkDebugParams = debugParams; } @@ -670,16 +654,8 @@ - (void)addAllowedScheme:(NSString *)scheme { } - (void)setUrlPatternsToIgnore:(NSArray*)urlsToIgnore { - @synchronized (self) { - _userURLFilter = [[BNCURLFilter alloc] init]; - _userURLFilter.patternList = urlsToIgnore; - } -} - -- (NSArray *)urlPatternsToIgnore { - @synchronized (self) { - return _userURLFilter.patternList; - } + self.userURLFilter = [[BNCURLFilter alloc] init]; + [self.userURLFilter useCustomPatternList:urlsToIgnore]; } // This is currently the same as handleDeeplink @@ -704,14 +680,14 @@ - (BOOL)handleDeepLink:(NSURL *)url sceneIdentifier:(NSString *)sceneIdentifier NSString *pattern = nil; pattern = [self.urlFilter patternMatchingURL:url]; if (!pattern) { - pattern = [_userURLFilter patternMatchingURL:url]; + pattern = [self.userURLFilter patternMatchingURL:url]; } if (pattern) { self.preferenceHelper.dropURLOpen = YES; self.preferenceHelper.externalIntentURI = pattern; self.preferenceHelper.referringURL = pattern; - [self initUserSessionAndCallCallback:YES sceneIdentifier:sceneIdentifier]; + [self initUserSessionAndCallCallback:YES sceneIdentifier:sceneIdentifier urlString:nil]; return NO; } @@ -755,7 +731,7 @@ - (BOOL)handleSchemeDeepLink_private:(NSURL*)url sceneIdentifier:(NSString *)sce self.preferenceHelper.linkClickIdentifier = params[@"link_click_id"]; } } - [self initUserSessionAndCallCallback:YES sceneIdentifier:sceneIdentifier]; + [self initUserSessionAndCallCallback:YES sceneIdentifier:sceneIdentifier urlString:url.absoluteString]; return handled; } @@ -777,7 +753,6 @@ - (BOOL)sceneIdentifier:(NSString *)sceneIdentifier - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary *)options { - NSString *source = options[UIApplicationOpenURLOptionsSourceApplicationKey]; NSString *annotation = options[UIApplicationOpenURLOptionsAnnotationKey]; return [self application:application openURL:url sourceApplication:source annotation:annotation]; @@ -789,7 +764,7 @@ - (BOOL)handleUniversalDeepLink_private:(NSString*)urlString sceneIdentifier:(NS self.preferenceHelper.referringURL = urlString; } - [self initUserSessionAndCallCallback:YES sceneIdentifier:sceneIdentifier]; + [self initUserSessionAndCallCallback:YES sceneIdentifier:sceneIdentifier urlString:urlString]; return [Branch isBranchLink:urlString]; } @@ -799,8 +774,6 @@ - (BOOL)continueUserActivity:(NSUserActivity *)userActivity { } - (BOOL)continueUserActivity:(NSUserActivity *)userActivity sceneIdentifier:(NSString *)sceneIdentifier { - BNCLogDebugSDK(@"continueUserActivity:"); - if (userActivity.referrerURL) { self.preferenceHelper.initialReferrer = userActivity.referrerURL.absoluteString; } @@ -831,7 +804,7 @@ - (BOOL)continueUserActivity:(NSUserActivity *)userActivity sceneIdentifier:(NSS } #endif - [self initUserSessionAndCallCallback:YES sceneIdentifier:sceneIdentifier]; + [self initUserSessionAndCallCallback:YES sceneIdentifier:sceneIdentifier urlString:userActivity.webpageURL.absoluteString]; return spotlightIdentifier != nil; } @@ -865,19 +838,9 @@ + (BOOL)isBranchLink:(NSString *)urlString { #pragma mark - Push Notification support - (void)handlePushNotification:(NSDictionary *)userInfo { - // look for a branch shortlink in the payload (shortlink because iOS7 only supports 256 bytes) NSString *urlStr = [userInfo objectForKey:BRANCH_PUSH_NOTIFICATION_PAYLOAD_KEY]; + if (urlStr.length) { - // reusing this field, so as not to create yet another url slot on prefshelper - self.preferenceHelper.universalLinkUrl = urlStr; - self.preferenceHelper.referringURL = urlStr; - } - - // If app is active, then close out the session and start a new one. - // Else the URL will be handled by `applicationDidBecomeActive`. - - Class UIApplicationClass = NSClassFromString(@"UIApplication"); - if (urlStr && [[UIApplicationClass sharedApplication] applicationState] == UIApplicationStateActive) { NSURL *url = [NSURL URLWithString:urlStr]; if (url) { [self handleDeepLink:url sceneIdentifier:nil]; @@ -956,7 +919,7 @@ - (void)handleATTAuthorizationStatus:(NSUInteger)status { - (void)setSKAdNetworkCalloutMaxTimeSinceInstall:(NSTimeInterval)maxTimeInterval { if (@available(iOS 16.1, macCatalyst 16.1, *)) { - BNCLogDebug(@"This is no longer supported for iOS 16.1+ - SKAN4.0"); + [[BranchLogger shared] logDebug:@"Not supported SKAN 4.0+, iOS 16.1+" error:nil]; } else { [BNCSKAdNetwork sharedInstance].maxTimeSinceInstall = maxTimeInterval; } @@ -1028,7 +991,7 @@ - (void)logoutWithCallback:(callbackWithStatus)callback { (Branch.trackingDisabled) ? [NSError branchErrorWithCode:BNCTrackingDisabledError] : [NSError branchErrorWithCode:BNCInitError]; - BNCLogError(@"Branch is not initialized, cannot logout."); + [[BranchLogger shared] logWarning:@"Branch is not initialized, cannot logout." error:error]; if (callback) {callback(NO, error);} return; } @@ -1438,7 +1401,7 @@ - (void)passPasteItemProviders:(NSArray *)itemProviders { // 2. Check if URL is branch URL and if yes -> store it. [item loadItemForTypeIdentifier:UTTypeURL.identifier options:NULL completionHandler:^(NSURL *url, NSError * _Null_unspecified error) { if (error) { - BNCLogError([NSString stringWithFormat:@"%@", error]); + [[BranchLogger shared] logWarning:@"Failed to load URL from Pasteboard" error:error]; } else if ([Branch isBranchLink:url.absoluteString]) { [self.preferenceHelper setLocalUrl:[url absoluteString]]; @@ -1464,8 +1427,7 @@ + (Branch *)getInstanceInternal:(NSString *)key { // If there was stored key and it isn't the same as the currently used (or doesn't exist), we need to clean up // Note: Link Click Identifier is not cleared because of the potential for that to mess up a deep link if (preferenceHelper.lastRunBranchKey && ![key isEqualToString:preferenceHelper.lastRunBranchKey]) { - BNCLogWarning(@"The Branch Key has changed, clearing relevant items."); - + [[BranchLogger shared] logWarning:@"The Branch Key has changed, clearing relevant items." error:nil]; preferenceHelper.appVersion = nil; preferenceHelper.randomizedDeviceToken = nil; preferenceHelper.sessionID = nil; @@ -1488,6 +1450,9 @@ + (Branch *)getInstanceInternal:(NSString *)key { cache:[[BNCLinkCache alloc] init] preferenceHelper:preferenceHelper key:key]; + + // Workaround for testbed not linking BranchPluginSupport, which prevents unit tests from finding it + [BranchPluginSupport instance]; }); return branch; } @@ -1575,6 +1540,8 @@ - (NSString *)generateShortUrl:(NSArray *)tags // If an ignore UA string is present, we always get a new url. // Otherwise, if we've already seen this request, use the cached version. if (!ignoreUAString && [self.linkCache objectForKey:linkData]) { + [[BranchLogger shared] logVerbose:@"Returning cached Branch Link" error:nil]; + shortURL = [self.linkCache objectForKey:linkData]; } else { BranchShortUrlSyncRequest *req = @@ -1591,7 +1558,7 @@ - (NSString *)generateShortUrl:(NSArray *)tags linkData:linkData linkCache:self.linkCache]; - BNCLogDebug(@"Creating a custom URL synchronously."); + [[BranchLogger shared] logVerbose:@"Requesting Branch Link synchronously" error:nil]; BNCServerResponse *serverResponse = [req makeRequest:self.serverInterface key:self.class.branchKey]; shortURL = [req processResponse:serverResponse]; @@ -1729,19 +1696,23 @@ - (void)registerViewWithParams:(NSDictionary *)params andCallback:(callbackWithP #pragma mark - Application State Change methods - (void)applicationDidBecomeActive { - if (!Branch.trackingDisabled && - self.initializationStatus != BNCInitStatusInitialized && - ![self.requestQueue containsInstallOrOpen]) { - [self initUserSessionAndCallCallback:YES sceneIdentifier:nil]; - } + dispatch_async(self.isolationQueue, ^(){ + // if necessary, creates a new organic open + BOOL installOrOpenInQueue = [self.requestQueue containsInstallOrOpen]; + if (!Branch.trackingDisabled && self.initializationStatus != BNCInitStatusInitialized && !installOrOpenInQueue) { + [self initUserSessionAndCallCallback:YES sceneIdentifier:nil urlString:nil]; + } + }); } - (void)applicationWillResignActive { - if (!Branch.trackingDisabled) { - [self.requestQueue persistImmediately]; - [BranchOpenRequest setWaitNeededForOpenResponseLock]; - BNCLogDebugSDK(@"Application resigned active."); - } + dispatch_async(self.isolationQueue, ^(){ + if (!Branch.trackingDisabled) { + self.initializationStatus = BNCInitStatusUninitialized; + [self.requestQueue persistImmediately]; + [BranchOpenRequest setWaitNeededForOpenResponseLock]; + } + }); } #pragma mark - Queue management @@ -1761,8 +1732,7 @@ - (void)setNetworkCount:(NSInteger)networkCount { - (void)insertRequestAtFront:(BNCServerRequest *)req { if (self.networkCount == 0) { [self.requestQueue insert:req at:0]; - } - else { + } else { [self.requestQueue insert:req at:1]; } } @@ -1800,12 +1770,13 @@ - (void) processRequest:(BNCServerRequest*)req [self.requestQueue dequeue]; self.networkCount = 0; - [self processNextQueueItem]; + dispatch_async(self.isolationQueue, ^{ + [self processNextQueueItem]; + }); } // On network problems, or Branch down, call the other callbacks and stop processing. else { - BNCLogDebugSDK(@"Network error: failing queued requests."); - + [[BranchLogger shared] logDebug:@"Network error: failing queued requests." error:nil]; // First, gather all the requests to fail NSMutableArray *requestsToFail = [[NSMutableArray alloc] init]; for (int i = 0; i < self.requestQueue.queueDepth; i++) { @@ -1877,7 +1848,7 @@ - (void)processNextQueueItem { // If tracking is disabled, then do not check for install event. It won't exist. if (!Branch.trackingDisabled) { if (![req isKindOfClass:[BranchInstallRequest class]] && !self.preferenceHelper.randomizedBundleToken) { - BNCLogError(@"User session has not been initialized!"); + [[BranchLogger shared] logError:@"User session has not been initialized!" error:nil]; BNCPerformBlockOnMainThreadSync(^{ [req processResponse:nil error:[NSError branchErrorWithCode:BNCInitError]]; }); @@ -1885,7 +1856,7 @@ - (void)processNextQueueItem { } else if (![req isKindOfClass:[BranchOpenRequest class]] && (!self.preferenceHelper.randomizedDeviceToken || !self.preferenceHelper.sessionID)) { - BNCLogError(@"Missing session items!"); + [[BranchLogger shared] logError:@"Missing session items!" error:nil]; BNCPerformBlockOnMainThreadSync(^{ [req processResponse:nil error:[NSError branchErrorWithCode:BNCInitError]]; }); @@ -1921,11 +1892,13 @@ - (BOOL)deferInitBlock:(void (^)(void))block { BOOL deferred = NO; @synchronized (self) { if (self.deferInitForPluginRuntime) { + [[BranchLogger shared] logDebug:@"Deferring SDK init until notifyNativeToInit is called" error:nil]; self.cachedInitBlock = block; deferred = YES; } } + // handle default non-deferred state if (!deferred && block) { block(); } @@ -1935,6 +1908,7 @@ - (BOOL)deferInitBlock:(void (^)(void))block { // Releases deferred init block - (void)notifyNativeToInit { @synchronized (self) { + [[BranchLogger shared] logDebug:@"Unlocking Deferred SDK init" error:nil]; self.deferInitForPluginRuntime = NO; } @@ -1948,49 +1922,39 @@ - (void)notifyNativeToInit { // Some methods require init before they are called. Instead of returning an error, we try to fix the situation by calling init ourselves. - (void)initSafetyCheck { if (self.initializationStatus == BNCInitStatusUninitialized) { - BNCLogDebug(@"Branch avoided an error by preemptively initializing."); - [self initUserSessionAndCallCallback:NO sceneIdentifier:nil]; + [[BranchLogger shared] logDebug:@"Branch avoided an error by preemptively initializing." error:nil]; + [self initUserSessionAndCallCallback:NO sceneIdentifier:nil urlString:nil]; } } -- (void)initUserSessionAndCallCallback:(BOOL)callCallback sceneIdentifier:(NSString *)sceneIdentifier { +- (void)initUserSessionAndCallCallback:(BOOL)callCallback sceneIdentifier:(NSString *)sceneIdentifier urlString:(NSString *)urlString { - // ignore lifecycle calls while waiting for a plugin runtime. @synchronized (self) { if (self.deferInitForPluginRuntime) { - //NSString *debug = [NSString stringWithFormat:@"Init is deferred, ignoring call: %@", NSThread.callStackSymbols]; - //BNCLogDebug(debug); + if (urlString) { + [[BranchLogger shared] logDebug:@"Branch init is deferred, caching link" error:nil]; + self.cachedURLString = urlString; + } else { + [[BranchLogger shared] logDebug:@"Branch init is deferred, ignoring lifecycle call without a link" error:nil]; + } return; + } else { + if (!urlString && self.cachedURLString) { + urlString = self.cachedURLString; + [[BranchLogger shared] logDebug:[NSString stringWithFormat:@"Using cached link: %@", urlString] error:nil]; + } + self.cachedURLString = nil; } } dispatch_async(self.isolationQueue, ^(){ - NSString *urlstring = nil; - if (self.preferenceHelper.universalLinkUrl.length) { - urlstring = self.preferenceHelper.universalLinkUrl; - } else if (self.preferenceHelper.externalIntentURI.length) { - urlstring = self.preferenceHelper.externalIntentURI; - } - - if (urlstring.length) { - NSArray *queryItems = [BNCEncodingUtils queryItems:[NSURL URLWithString:urlstring]]; - for (BNCKeyValue*item in queryItems) { - if ([item.key isEqualToString:@"BranchLogLevel"]) { - BNCLogLevel logLevel = BNCLogLevelFromString(item.value); - [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInteger:logLevel] forKey:BNCLogLevelKey]; - BNCLogSetDisplayLevel(logLevel); - NSLog(@"[io.branch.sdk] BNCLogLevel set to %ld.", (long) logLevel); - } - } - } // If the session is not yet initialized if (self.initializationStatus == BNCInitStatusUninitialized) { - [self initializeSessionAndCallCallback:callCallback sceneIdentifier:sceneIdentifier]; + [self initializeSessionAndCallCallback:callCallback sceneIdentifier:sceneIdentifier urlString:urlString]; } // If the session was initialized, but callCallback was specified, do so. else if (callCallback && self.initializationStatus == BNCInitStatusInitialized) { - // callback on main, this is generally what the client expects and maintains our previous behavior dispatch_async(dispatch_get_main_queue(), ^ { if (self.sceneSessionInitWithCallback) { @@ -1999,6 +1963,7 @@ - (void)initUserSessionAndCallCallback:(BOOL)callCallback sceneIdentifier:(NSStr response.universalObject = [self getLatestReferringBranchUniversalObject]; response.linkProperties = [self getLatestReferringBranchLinkProperties]; response.sceneIdentifier = sceneIdentifier; + self.sceneSessionInitWithCallback(response, nil); } }); @@ -2007,61 +1972,74 @@ - (void)initUserSessionAndCallCallback:(BOOL)callCallback sceneIdentifier:(NSStr } // only called from initUserSessionAndCallCallback! -- (void)initializeSessionAndCallCallback:(BOOL)callCallback sceneIdentifier:(NSString *)sceneIdentifier { - Class clazz = [BranchInstallRequest class]; - if (self.preferenceHelper.randomizedBundleToken) { - clazz = [BranchOpenRequest class]; - } - - callbackWithStatus initSessionCallback = ^(BOOL success, NSError *error) { - // callback on main, this is generally what the client expects and maintains our previous behavior - dispatch_async(dispatch_get_main_queue(), ^ { - if (error) { - [self handleInitFailure:error callCallback:callCallback sceneIdentifier:(NSString *)sceneIdentifier]; - } else { - [self handleInitSuccessAndCallCallback:callCallback sceneIdentifier:(NSString *)sceneIdentifier]; - } - }); - }; - - // Notify everyone -- - - NSURL *URL = - (self.preferenceHelper.referringURL.length) - ? [NSURL URLWithString:self.preferenceHelper.referringURL] - : nil; +- (void)initializeSessionAndCallCallback:(BOOL)callCallback sceneIdentifier:(NSString *)sceneIdentifier urlString:(NSString *)urlString { - if ([self.delegate respondsToSelector:@selector(branch:willStartSessionWithURL:)]) + // BranchDelegate willStartSessionWithURL notification + NSURL *URL = (self.preferenceHelper.referringURL.length) ? [NSURL URLWithString:self.preferenceHelper.referringURL] : nil; + if ([self.delegate respondsToSelector:@selector(branch:willStartSessionWithURL:)]) { [self.delegate branch:self willStartSessionWithURL:URL]; + } + // BranchWilLStartSession NSNotification NSMutableDictionary *userInfo = [NSMutableDictionary new]; userInfo[BranchURLKey] = URL; - [[NSNotificationCenter defaultCenter] - postNotificationName:BranchWillStartSessionNotification - object:self - userInfo:userInfo]; + [[NSNotificationCenter defaultCenter] postNotificationName:BranchWillStartSessionNotification object:self userInfo:userInfo]; + + // Prepare callback block + callbackWithStatus initSessionCallback = ^(BOOL success, NSError *error) { + // callback on main, this is generally what the client expects and maintains our previous behavior + dispatch_async(dispatch_get_main_queue(), ^ { + if (error) { + [self handleInitFailure:error callCallback:callCallback sceneIdentifier:(NSString *)sceneIdentifier]; + } else { + [self handleInitSuccessAndCallCallback:callCallback sceneIdentifier:(NSString *)sceneIdentifier]; + } + }); + }; - // Fix the queue order and open -- + @synchronized (self) { + dispatch_async(self.isolationQueue, ^(){ + [BranchOpenRequest setWaitNeededForOpenResponseLock]; + BranchOpenRequest *req = [self.requestQueue findExistingInstallOrOpen]; + + // nothing on queue, we need an new install or open. This may have link data + if (!req) { + if (self.preferenceHelper.randomizedBundleToken) { + req = [[BranchOpenRequest alloc] initWithCallback:initSessionCallback]; + } else { + req = [[BranchInstallRequest alloc] initWithCallback:initSessionCallback]; + } + req.callback = initSessionCallback; + req.urlString = urlString; + + [self.requestQueue insert:req at:0]; + + NSString *message = [NSString stringWithFormat:@"Request %@ callback %@ link %@", req, req.callback, req.urlString]; + [[BranchLogger shared] logDebug:message error:nil]; - @synchronized (self) { - [self removeInstallOrOpen]; - [BranchOpenRequest setWaitNeededForOpenResponseLock]; - BranchOpenRequest *req = [[clazz alloc] initWithCallback:initSessionCallback]; - [self insertRequestAtFront:req]; - self.initializationStatus = BNCInitStatusInitializing; - [self processNextQueueItem]; + } else { + + // new link arrival but an install or open is already on queue? need a new open for link resolution. + if (urlString) { + req = [[BranchOpenRequest alloc] initWithCallback:initSessionCallback]; + req.callback = initSessionCallback; + req.urlString = urlString; + + // put it behind the one that's already on queue + [self.requestQueue insert:req at:1]; + + [[BranchLogger shared] logDebug:@"Link resolution request" error:nil]; + NSString *message = [NSString stringWithFormat:@"Request %@ callback %@ link %@", req, req.callback, req.urlString]; + [[BranchLogger shared] logDebug:message error:nil]; + } + } + + self.initializationStatus = BNCInitStatusInitializing; + [self processNextQueueItem]; + }); } } -- (BOOL)removeInstallOrOpen { - @synchronized (self) { - if ([self.requestQueue removeInstallOrOpen]) { - self.networkCount = 0; - return YES; - } - return NO; - } -} - (void)handleInitSuccessAndCallCallback:(BOOL)callCallback sceneIdentifier:(NSString *)sceneIdentifier { @@ -2095,10 +2073,7 @@ - (void)handleInitSuccessAndCallCallback:(BOOL)callCallback sceneIdentifier:(NSS } [self sendOpenNotificationWithLinkParameters:latestReferringParams error:nil]; - - if (!self.urlFilter.hasUpdatedPatternList) { - [self.urlFilter updatePatternListWithCompletion:nil]; - } + [self.urlFilter updatePatternListFromServerWithCompletion:nil]; if (self.shouldAutomaticallyDeepLink) { dispatch_async(dispatch_get_main_queue(), ^ { @@ -2124,8 +2099,7 @@ - (void)automaticallyDeeplinkWithReferringParams:(NSDictionary *)latestReferring [branchSharingController configureControlWithData:latestReferringParams]; } else { - BNCLogWarning([NSString stringWithFormat:@"The automatic deeplink view controller '%@' for key '%@' does not implement 'configureControlWithData:'.", - branchSharingController, key]); + [[BranchLogger shared] logWarning:[NSString stringWithFormat:@"The automatic deeplink view controller '%@' for key '%@' does not implement 'configureControlWithData:'.", branchSharingController, key] error:nil]; } self.deepLinkPresentingController = [UIViewController bnc_currentViewController]; @@ -2137,7 +2111,7 @@ - (void)automaticallyDeeplinkWithReferringParams:(NSDictionary *)latestReferring [branchSharingController configureControlWithData:latestReferringParams]; } else { - BNCLogWarning(@"View controller does not implement configureControlWithData:"); + [[BranchLogger shared] logWarning:@"View controller does not implement configureControlWithData:" error:nil]; } branchSharingController.deepLinkingCompletionDelegate = self; switch (deepLinkInstance.option) { @@ -2199,7 +2173,7 @@ - (void)automaticallyDeeplinkWithReferringParams:(NSDictionary *)latestReferring [branchSharingController configureControlWithData:latestReferringParams]; } else { - BNCLogWarning(@"View controller does not implement configureControlWithData:"); + [[BranchLogger shared] logWarning:@"View controller does not implement configureControlWithData:" error:nil]; } branchSharingController.deepLinkingCompletionDelegate = self; if ([self.deepLinkPresentingController presentedViewController]) { diff --git a/BranchSDK/BranchActivityItemProvider.m b/Sources/BranchSDK/BranchActivityItemProvider.m similarity index 99% rename from BranchSDK/BranchActivityItemProvider.m rename to Sources/BranchSDK/BranchActivityItemProvider.m index 0f45d7e38..e55c37bd3 100644 --- a/BranchSDK/BranchActivityItemProvider.m +++ b/Sources/BranchSDK/BranchActivityItemProvider.m @@ -6,6 +6,8 @@ // Copyright (c) 2015 Branch Metrics. All rights reserved. // +#if !TARGET_OS_TV + #import "BranchActivityItemProvider.h" #import "Branch.h" #import "BranchConstants.h" @@ -98,7 +100,6 @@ - (BOOL) returnURL { - (id)item { NSString *channel = [BranchActivityItemProvider humanReadableChannelWithActivityType:self.activityType]; - // Allow for overrides specific to channel NSDictionary *params = [self paramsForChannel:channel]; NSArray *tags = [self tagsForChannel:channel]; @@ -256,3 +257,4 @@ - (NSString *)aliasForChannel:(NSString *)channel { } @end +#endif diff --git a/BranchSDK/BranchCSSearchableItemAttributeSet.m b/Sources/BranchSDK/BranchCSSearchableItemAttributeSet.m similarity index 97% rename from BranchSDK/BranchCSSearchableItemAttributeSet.m rename to Sources/BranchSDK/BranchCSSearchableItemAttributeSet.m index 01802dbf1..8f2fdaea4 100644 --- a/BranchSDK/BranchCSSearchableItemAttributeSet.m +++ b/Sources/BranchSDK/BranchCSSearchableItemAttributeSet.m @@ -5,12 +5,13 @@ // Created by Derrick Staten on 9/8/15. // Copyright © 2015 Branch Metrics. All rights reserved. // +#if !TARGET_OS_TV #import "BranchCSSearchableItemAttributeSet.h" #import "NSError+Branch.h" #import "BranchConstants.h" #import "BranchConstants.h" -#import "BNCLog.h" +#import "BranchLogger.h" #import "Branch.h" #import "BNCSystemObserver.h" @@ -45,7 +46,7 @@ - (instancetype)initWithItemContentType:(nonnull NSString *)type { - (void)setIdentifier:(NSString *)identifier { if (![identifier hasPrefix:BRANCH_SPOTLIGHT_PREFIX]) { - BNCLogWarning(@"Do not set BranchCSSearchableItemAttributeSet's identifier. It will be overwritten."); + [[BranchLogger shared] logWarning:@"Do not set BranchCSSearchableItemAttributeSet's identifier. It will be overwritten." error:nil]; } } @@ -157,3 +158,4 @@ - (void)indexContentWithUrl:(NSString *)url spotlightIdentifier:(NSString *)spot } @end +#endif diff --git a/BranchSDK/BranchConstants.m b/Sources/BranchSDK/BranchConstants.m similarity index 97% rename from BranchSDK/BranchConstants.m rename to Sources/BranchSDK/BranchConstants.m index f4d12989d..96749379b 100644 --- a/BranchSDK/BranchConstants.m +++ b/Sources/BranchSDK/BranchConstants.m @@ -161,3 +161,8 @@ NSString * const BRANCH_REQUEST_KEY_VALUE_POSTBACK_SEQUENCE_INDEX_0 = @"postback-sequence-index-0"; NSString * const BRANCH_REQUEST_KEY_VALUE_POSTBACK_SEQUENCE_INDEX_1 = @"postback-sequence-index-1"; NSString * const BRANCH_REQUEST_KEY_VALUE_POSTBACK_SEQUENCE_INDEX_2 = @"postback-sequence-index-2"; + +NSString * const BRANCH_REQUEST_KEY_DMA_EEA = @"dma_eea"; +NSString * const BRANCH_REQUEST_KEY_DMA_AD_PEROSALIZATION = @"dma_ad_personalization"; +NSString * const BRANCH_REQUEST_KEY_DMA_AD_USER_DATA = @"dma_ad_user_data"; + diff --git a/BranchSDK/BranchContentDiscoverer.m b/Sources/BranchSDK/BranchContentDiscoverer.m similarity index 97% rename from BranchSDK/BranchContentDiscoverer.m rename to Sources/BranchSDK/BranchContentDiscoverer.m index b8ab1da9c..f186ebbd0 100644 --- a/BranchSDK/BranchContentDiscoverer.m +++ b/Sources/BranchSDK/BranchContentDiscoverer.m @@ -13,7 +13,7 @@ #import "BNCPreferenceHelper.h" #import "BranchConstants.h" #import "BNCEncodingUtils.h" -#import "BNCLog.h" +#import "BranchLogger.h" #import "UIViewController+Branch.h" @interface BranchContentDiscoverer () @@ -27,12 +27,11 @@ @implementation BranchContentDiscoverer + (BranchContentDiscoverer *)getInstance { static BranchContentDiscoverer *sharedInstance = nil; - @synchronized (self) { - if (!sharedInstance) { - sharedInstance = [[BranchContentDiscoverer alloc] init]; - } + static dispatch_once_t onceToken = 0; + dispatch_once(&onceToken, ^{ + sharedInstance = [BranchContentDiscoverer new]; + }); return sharedInstance; - } } - (void) dealloc { @@ -51,7 +50,7 @@ - (void) startDiscoveryTaskWithManifest:(BranchContentDiscoveryManifest*)manifes - (void)startDiscoveryTask { if (![NSThread isMainThread]) { - BNCLogError(@"Discovery should be called on main thread."); + [[BranchLogger shared] logError:@"Discovery should be called on main thread." error:nil]; } [_contentDiscoveryTimer invalidate]; _contentDiscoveryTimer = diff --git a/BranchSDK/BranchContentDiscoveryManifest.m b/Sources/BranchSDK/BranchContentDiscoveryManifest.m similarity index 92% rename from BranchSDK/BranchContentDiscoveryManifest.m rename to Sources/BranchSDK/BranchContentDiscoveryManifest.m index e10585954..fc5e6163d 100644 --- a/BranchSDK/BranchContentDiscoveryManifest.m +++ b/Sources/BranchSDK/BranchContentDiscoveryManifest.m @@ -34,13 +34,12 @@ - (instancetype)init { } + (BranchContentDiscoveryManifest *)getInstance { - @synchronized (self) { - static BranchContentDiscoveryManifest *contentDiscoveryManifest = nil; - if (!contentDiscoveryManifest) { - contentDiscoveryManifest = [[BranchContentDiscoveryManifest alloc] init]; - } - return contentDiscoveryManifest; - } + static BranchContentDiscoveryManifest *sharedInstance = nil; + static dispatch_once_t onceToken = 0; + dispatch_once(&onceToken, ^{ + sharedInstance = [BranchContentDiscoveryManifest new]; + }); + return sharedInstance; } - (void)onBranchInitialised:(NSDictionary *)branchInitDict withUrl:(NSString *)referringURL { diff --git a/BranchSDK/BranchContentPathProperties.m b/Sources/BranchSDK/BranchContentPathProperties.m similarity index 100% rename from BranchSDK/BranchContentPathProperties.m rename to Sources/BranchSDK/BranchContentPathProperties.m diff --git a/BranchSDK/BranchDelegate.m b/Sources/BranchSDK/BranchDelegate.m similarity index 100% rename from BranchSDK/BranchDelegate.m rename to Sources/BranchSDK/BranchDelegate.m diff --git a/BranchSDK/BranchEvent.m b/Sources/BranchSDK/BranchEvent.m similarity index 85% rename from BranchSDK/BranchEvent.m rename to Sources/BranchSDK/BranchEvent.m index a7c9703cf..e7634173f 100644 --- a/BranchSDK/BranchEvent.m +++ b/Sources/BranchSDK/BranchEvent.m @@ -9,7 +9,7 @@ #import "BranchEvent.h" #import "BranchConstants.h" #import "NSError+Branch.h" -#import "BNCLog.h" +#import "BranchLogger.h" #import "BNCCallbackMap.h" #import "BNCReachability.h" #import "BNCSKAdNetwork.h" @@ -18,6 +18,7 @@ #import "BNCEventUtils.h" #import "BNCRequestFactory.h" #import "BNCServerAPI.h" +#import "NSMutableDictionary+Branch.h" #pragma mark BranchStandardEvents @@ -96,14 +97,13 @@ - (void)processResponse:(BNCServerResponse*)response error:(NSError*)error { BOOL lockWin = [[BNCSKAdNetwork sharedInstance] getLockedStatusFromDataResponse:dictionary]; BOOL shouldCallUpdatePostback = [[BNCSKAdNetwork sharedInstance] shouldCallPostbackForDataResponse:dictionary]; - BNCLogDebug([NSString stringWithFormat:@"SKAN 4.0 params - conversionValue:%@ coarseValue:%@, locked:%d, shouldCallPostback:%d, currentWindow:%d, firstAppLaunchTime: %@", conversionValue, coarseConversionValue, lockWin, shouldCallUpdatePostback, (int)[BNCPreferenceHelper sharedInstance].skanCurrentWindow, [BNCPreferenceHelper sharedInstance].firstAppLaunchTime]); - + [[BranchLogger shared] logDebug:[NSString stringWithFormat:@"SKAN 4.0 params - conversionValue:%@ coarseValue:%@, locked:%d, shouldCallPostback:%d, currentWindow:%d, firstAppLaunchTime: %@", conversionValue, coarseConversionValue, lockWin, shouldCallUpdatePostback, (int)[BNCPreferenceHelper sharedInstance].skanCurrentWindow, [BNCPreferenceHelper sharedInstance].firstAppLaunchTime] error:nil]; if(shouldCallUpdatePostback){ [[BNCSKAdNetwork sharedInstance] updatePostbackConversionValue: conversionValue.longValue coarseValue:coarseConversionValue lockWindow:lockWin completionHandler:^(NSError * _Nullable error) { if (error) { - BNCLogError([NSString stringWithFormat:@"Update conversion value failed with error - %@", [error description]]); + [[BranchLogger shared] logError:[NSString stringWithFormat:@"Update conversion value failed with error - %@", [error description]] error:error]; } else { - BNCLogDebug([NSString stringWithFormat:@"Update conversion value was successful. Conversion Value - %@", conversionValue]); + [[BranchLogger shared] logDebug:[NSString stringWithFormat:@"Update conversion value was successful. Conversion Value - %@", conversionValue] error:nil]; } }]; } @@ -111,9 +111,9 @@ - (void)processResponse:(BNCServerResponse*)response error:(NSError*)error { } else if (@available(iOS 15.4, macCatalyst 15.4, *)) { [[BNCSKAdNetwork sharedInstance] updatePostbackConversionValue:conversionValue.intValue completionHandler: ^(NSError *error){ if (error) { - BNCLogError([NSString stringWithFormat:@"Update conversion value failed with error - %@", [error description]]); + [[BranchLogger shared] logError:[NSString stringWithFormat:@"Update conversion value failed with error - %@", [error description]] error:error]; } else { - BNCLogDebug([NSString stringWithFormat:@"Update conversion value was successful. Conversion Value - %@", conversionValue]); + [[BranchLogger shared] logDebug:[NSString stringWithFormat:@"Update conversion value was successful. Conversion Value - %@", conversionValue] error:nil]; } }]; } else { @@ -134,8 +134,11 @@ - (instancetype)initWithCoder:(NSCoder *)decoder { self = [super initWithCoder:decoder]; if (!self) return self; - self.serverURL = [decoder decodeObjectOfClass:NSString.class forKey:@"serverURL"]; - self.eventDictionary = [decoder decodeObjectOfClass:NSDictionary.class forKey:@"eventDictionary"]; + self.serverURL = [decoder decodeObjectOfClass:NSURL.class forKey:@"serverURL"]; + + NSSet *classes = [NSSet setWithArray:@[NSDictionary.class, NSArray.class, NSString.class, NSNumber.class]]; + self.eventDictionary = [decoder decodeObjectOfClasses:classes forKey:@"eventDictionary"]; + return self; } @@ -219,22 +222,17 @@ - (NSString *)jsonStringForAdType:(BranchEventAdType)adType { - (NSDictionary*) dictionary { NSMutableDictionary *dictionary = [NSMutableDictionary new]; - #define BNCFieldDefinesDictionaryFromSelf - #include "BNCFieldDefines.h" - - addString(transactionID, transaction_id); - addString(currency, currency); - addDecimal(revenue, revenue); - addDecimal(shipping, shipping); - addDecimal(tax, tax); - addString(coupon, coupon); - addString(affiliation, affiliation); - addString(eventDescription, description); - addString(searchQuery, search_query); - addDictionary(customData, custom_data); + [dictionary bnc_addString:self.transactionID forKey:@"transaction_id"]; + [dictionary bnc_addString:self.currency forKey:@"currency"]; + [dictionary bnc_addDecimal:self.revenue forKey:@"revenue"]; + [dictionary bnc_addDecimal:self.shipping forKey:@"shipping"]; + [dictionary bnc_addDecimal:self.tax forKey:@"tax"]; + [dictionary bnc_addString:self.coupon forKey:@"coupon"]; + [dictionary bnc_addString:self.affiliation forKey:@"affiliation"]; + [dictionary bnc_addString:self.eventDescription forKey:@"description"]; + [dictionary bnc_addString:self.searchQuery forKey:@"search_query"]; + [dictionary bnc_addDictionary:self.customData forKey:@"custom_data"]; - #include "BNCFieldDefines.h" - NSString *adTypeString = [self jsonStringForAdType:self.adType]; if (adTypeString.length > 0) { [dictionary setObject:adTypeString forKey:@"ad_type"]; @@ -277,7 +275,8 @@ - (NSDictionary*) dictionary { - (void)logEventWithCompletion:(void (^_Nullable)(BOOL success, NSError * _Nullable error))completion { if (![_eventName isKindOfClass:[NSString class]] || _eventName.length == 0) { - BNCLogError([NSString stringWithFormat:@"Invalid event type '%@' or empty string.", NSStringFromClass(_eventName.class)]); + [[BranchLogger shared] logError:[NSString stringWithFormat:@"Invalid event type '%@' or empty string.", NSStringFromClass(_eventName.class)] error:nil]; + if (completion) { NSError *error = [NSError branchErrorWithCode:BNCGeneralError localizedMessage: @"Invalid event type"]; completion(NO, error); @@ -453,15 +452,15 @@ - (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProdu } [self logEvent]; - BNCLogDebug([NSString stringWithFormat:@"Created and logged event from transaction: %@", self.description]); + [[BranchLogger shared] logDebug:[NSString stringWithFormat:@"Created and logged event from transaction: %@", self.description] error:nil]; } else { - BNCLogError([NSString stringWithFormat:@"Unable to log Branch event from transaction. No products were found with the product ID."]); + [[BranchLogger shared] logError:[NSString stringWithFormat:@"Unable to log Branch event from transaction. No products were found with the product ID."] error:nil]; } }); } - (void)request:(SKRequest *)request didFailWithError:(NSError *)error { - BNCLogError([NSString stringWithFormat:@"Product request failed: %@", error]); + [[BranchLogger shared] logError:[NSString stringWithFormat:@"Product request failed: %@", error] error:error]; [[BNCEventUtils shared] removeEvent:self]; } diff --git a/BranchSDK/BranchInstallRequest.m b/Sources/BranchSDK/BranchInstallRequest.m similarity index 91% rename from BranchSDK/BranchInstallRequest.m rename to Sources/BranchSDK/BranchInstallRequest.m index 8bcc5dd13..f4aa50f50 100644 --- a/BranchSDK/BranchInstallRequest.m +++ b/Sources/BranchSDK/BranchInstallRequest.m @@ -20,7 +20,7 @@ - (id)initWithCallback:(callbackWithStatus)callback { - (void)makeRequest:(BNCServerInterface *)serverInterface key:(NSString *)key callback:(BNCServerCallback)callback { BNCRequestFactory *factory = [[BNCRequestFactory alloc] initWithBranchKey:key]; - NSDictionary *params = [factory dataForInstall]; + NSDictionary *params = [factory dataForInstallWithURLString:self.urlString]; [serverInterface postRequest:params url:[[BNCServerAPI sharedInstance] installServiceURL] key:key callback:callback]; } diff --git a/BranchSDK/BranchJsonConfig.m b/Sources/BranchSDK/BranchJsonConfig.m similarity index 82% rename from BranchSDK/BranchJsonConfig.m rename to Sources/BranchSDK/BranchJsonConfig.m index cf40aacec..a27850daa 100644 --- a/BranchSDK/BranchJsonConfig.m +++ b/Sources/BranchSDK/BranchJsonConfig.m @@ -6,7 +6,7 @@ // // -#import "BNCLog.h" +#import "BranchLogger.h" #import "BranchJsonConfig.h" NSString * _Nonnull const BranchJsonConfigDebugModeOption = @"debugMode"; @@ -17,6 +17,8 @@ NSString * _Nonnull const BranchJsonConfigDeferInitForPluginRuntimeOption = @"deferInitForPluginRuntime"; NSString * _Nonnull const BranchJsonConfigEnableLogging = @"enableLogging"; NSString * _Nonnull const BranchJsonConfigCheckPasteboardOnInstall = @"checkPasteboardOnInstall"; +NSString * _Nonnull const BranchJsonConfigAPIUrl = @"apiUrl"; + @interface BranchJsonConfig() @property (nonatomic, strong) NSDictionary *configuration; @@ -26,16 +28,13 @@ @interface BranchJsonConfig() @implementation BranchJsonConfig -+ (BranchJsonConfig * _Nonnull)instance -{ - @synchronized(self) { - static BranchJsonConfig *_instance; - static dispatch_once_t once = 0; - dispatch_once(&once, ^{ - _instance = [[BranchJsonConfig alloc] init]; - }); - return _instance; - } ++ (BranchJsonConfig * _Nonnull)instance { + static BranchJsonConfig *instance = nil; + static dispatch_once_t once = 0; + dispatch_once(&once, ^{ + instance = [BranchJsonConfig new]; + }); + return instance; } - (instancetype)init @@ -56,12 +55,12 @@ - (void)loadConfigFile NSError *error; id object = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error]; if (!object || error) { - BNCLogError([NSString stringWithFormat:@"Failed to parse branch.json. Error: %@", error.localizedDescription]); + [[BranchLogger shared] logError:@"Failed to parse branch.json" error:error]; return; } if (![object isKindOfClass:NSDictionary.class]) { - BNCLogError(@"Contents of branch.json should be a JSON object."); + [[BranchLogger shared] logError:@"Contents of branch.json should be a JSON object." error:nil]; return; } @@ -71,12 +70,10 @@ - (void)loadConfigFile - (NSData *)configFileContents { if (!self.configFileURL) return nil; - BNCLogDebug([NSString stringWithFormat:@"Loading %@", self.configFileURL.pathComponents.lastObject]); - NSError *error; NSData *data = [NSData dataWithContentsOfURL:self.configFileURL options:0 error:&error]; if (!data || error) { - BNCLogError([NSString stringWithFormat:@"Failed to load %@. Error: %@", self.configFileURL, error.localizedDescription]); + [[BranchLogger shared] logError:@"Failed to load branch.json" error:error]; return nil; } return data; @@ -109,7 +106,7 @@ - (void)findConfigFile } if (!configFileURL) { - BNCLogDebug(@"No branch.json in app bundle."); + [[BranchLogger shared] logVerbose:@"No branch.json in app bundle" error:nil]; return; } @@ -161,6 +158,11 @@ - (NSString *)testKey return self[BranchJsonConfigTestKeyOption]; } +- (NSString *)apiUrl +{ + return self[BranchJsonConfigAPIUrl]; +} + - (id)objectForKey:(NSString *)key { return self.configuration[key]; diff --git a/BranchSDK/BranchLATDRequest.m b/Sources/BranchSDK/BranchLATDRequest.m similarity index 100% rename from BranchSDK/BranchLATDRequest.m rename to Sources/BranchSDK/BranchLATDRequest.m diff --git a/BranchSDK/BranchLastAttributedTouchData.m b/Sources/BranchSDK/BranchLastAttributedTouchData.m similarity index 92% rename from BranchSDK/BranchLastAttributedTouchData.m rename to Sources/BranchSDK/BranchLastAttributedTouchData.m index 2193e943b..85bc3e0ab 100644 --- a/BranchSDK/BranchLastAttributedTouchData.m +++ b/Sources/BranchSDK/BranchLastAttributedTouchData.m @@ -9,7 +9,7 @@ #import "BranchLastAttributedTouchData.h" #import "BranchLATDRequest.h" #import "BNCJSONUtility.h" -#import "BNCLog.h" +#import "BranchLogger.h" @implementation BranchLastAttributedTouchData @@ -33,7 +33,7 @@ + (void)requestLastTouchAttributedData:(BNCServerInterface *)serverInterface key if (window > -1 && window < 365) { request.attributionWindow = window; } else { - BNCLogWarning(@"Attribution window is outside the expected range, using 30 days."); + [[BranchLogger shared] logWarning:@"Attribution window is outside the expected range, using 30 days" error:nil]; } [request makeRequest:serverInterface key:key callback:^(BNCServerResponse *response, NSError *error) { diff --git a/BranchSDK/BranchLinkProperties.m b/Sources/BranchSDK/BranchLinkProperties.m similarity index 100% rename from BranchSDK/BranchLinkProperties.m rename to Sources/BranchSDK/BranchLinkProperties.m diff --git a/Sources/BranchSDK/BranchLogger.m b/Sources/BranchSDK/BranchLogger.m new file mode 100644 index 000000000..d64a65568 --- /dev/null +++ b/Sources/BranchSDK/BranchLogger.m @@ -0,0 +1,131 @@ +// +// BranchLogger.m +// Branch +// +// Created by Nipun Singh on 2/1/24. +// Copyright © 2024 Branch, Inc. All rights reserved. +// + +#import "BranchLogger.h" +#import + +@implementation BranchLogger + +- (instancetype)init { + if ((self = [super init])) { + _loggingEnabled = NO; + _logLevelThreshold = BranchLogLevelDebug; + _includeCallerDetails = YES; + + // default callback sends logs to os_log + _logCallback = ^(NSString * _Nonnull message, BranchLogLevel logLevel, NSError * _Nullable error) { + NSString *formattedMessage = [BranchLogger formatMessage:message logLevel:logLevel error:error]; + + os_log_t log = os_log_create("io.branch.sdk", "BranchSDK"); + os_log_type_t osLogType = [BranchLogger osLogTypeForBranchLogLevel:logLevel]; + os_log_with_type(log, osLogType, "%{private}@", formattedMessage); + }; + } + return self; +} + ++ (instancetype)shared { + static BranchLogger *sharedInstance = nil; + static dispatch_once_t onceToken = 0; + dispatch_once(&onceToken, ^{ + sharedInstance = [[BranchLogger alloc] init]; + sharedInstance.loggingEnabled = NO; + sharedInstance.logLevelThreshold = BranchLogLevelDebug; + sharedInstance.includeCallerDetails = YES; + }); + return sharedInstance; +} + +- (BOOL)shouldLog:(BranchLogLevel)level { + if (!self.loggingEnabled || level < self.logLevelThreshold) { + return NO; + } + return YES; +} + +- (void)disableCallerDetails { + self.includeCallerDetails = NO; +} + +- (void)logError:(NSString *)message error:(NSError *_Nullable)error { + [self logMessage:message withLevel:BranchLogLevelError error:error]; +} + +- (void)logWarning:(NSString *)message error:(NSError *_Nullable)error { + [self logMessage:message withLevel:BranchLogLevelWarning error:error]; +} + +- (void)logDebug:(NSString *)message error:(NSError *_Nullable)error { + [self logMessage:message withLevel:BranchLogLevelDebug error:error]; +} + +- (void)logVerbose:(NSString *)message error:(NSError *_Nullable)error { + [self logMessage:message withLevel:BranchLogLevelVerbose error:error]; +} + +- (void)logMessage:(NSString *)message withLevel:(BranchLogLevel)level error:(NSError *_Nullable)error { + if (!self.loggingEnabled || level < self.logLevelThreshold || message.length == 0) { + return; + } + + NSString *formattedMessage = message; + if (self.includeCallerDetails) { + formattedMessage = [NSString stringWithFormat:@"%@ %@", [self callingClass], message]; + } + + if (self.logCallback) { + self.logCallback(formattedMessage, level, error); + } +} + +- (NSString *)callingClass { + NSArray *stackSymbols = [NSThread callStackSymbols]; + NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\[([^\\]]+)\\]" options:0 error:nil]; + if (stackSymbols.count > 3 && regex) { + NSString *callSite = stackSymbols[3]; + NSTextCheckingResult *match = [regex firstMatchInString:callSite options:0 range:NSMakeRange(0, [callSite length])]; + if (match && match.range.location != NSNotFound) { + NSString *callerDetails = [callSite substringWithRange:[match rangeAtIndex:0]]; + return callerDetails; + } + } + return @""; +} + ++ (NSString *)formatMessage:(NSString *)message logLevel:(BranchLogLevel)logLevel error:(NSError *)error { + NSString *logLevelString = [BranchLogger stringForLogLevel:logLevel]; + NSString *logTag = [NSString stringWithFormat:@"[BranchSDK][%@]", logLevelString]; + NSMutableString *fullMessage = [NSMutableString stringWithFormat:@"%@%@", logTag, message]; + if (error) { + [fullMessage appendFormat:@" NSError: %@", error]; + } + return fullMessage; +} + ++ (NSString *)stringForLogLevel:(BranchLogLevel)level { + switch (level) { + case BranchLogLevelVerbose: return @"Verbose"; + case BranchLogLevelDebug: return @"Debug"; + case BranchLogLevelWarning: return @"Warning"; + case BranchLogLevelError: return @"Error"; + default: return @"Unknown"; + } +} + +// Map the Branch log level to a similar Apple log level ++ (os_log_type_t)osLogTypeForBranchLogLevel:(BranchLogLevel)level { + switch (level) { + case BranchLogLevelError: return OS_LOG_TYPE_ERROR; // "report process-level errors" + case BranchLogLevelWarning: return OS_LOG_TYPE_DEFAULT; // "things that might result in a failure" + case BranchLogLevelDebug: return OS_LOG_TYPE_INFO; // "helpful, but not essential, for troubleshooting errors" + case BranchLogLevelVerbose: return OS_LOG_TYPE_DEBUG; // "useful during development or while troubleshooting a specific problem" + default: return OS_LOG_TYPE_DEFAULT; + } +} + +@end diff --git a/BranchSDK/BranchOpenRequest.m b/Sources/BranchSDK/BranchOpenRequest.m similarity index 76% rename from BranchSDK/BranchOpenRequest.m rename to Sources/BranchSDK/BranchOpenRequest.m index 2b2ec894c..96a6f7110 100644 --- a/BranchSDK/BranchOpenRequest.m +++ b/Sources/BranchSDK/BranchOpenRequest.m @@ -20,7 +20,7 @@ // handle app clip data for installs. This shouldn't be here imho #import "BNCAppGroupsData.h" -#import "BNCLog.h" +#import "BranchLogger.h" #import "BNCRequestFactory.h" #import "BNCServerAPI.h" @@ -47,7 +47,7 @@ - (id)initWithCallback:(callbackWithStatus)callback isInstall:(BOOL)isInstall { - (void)makeRequest:(BNCServerInterface *)serverInterface key:(NSString *)key callback:(BNCServerCallback)callback { BNCRequestFactory *factory = [[BNCRequestFactory alloc] initWithBranchKey:key]; - NSDictionary *params = [factory dataForOpen]; + NSDictionary *params = [factory dataForOpenWithURLString:self.urlString]; [serverInterface postRequest:params url:[[BNCServerAPI sharedInstance] openServiceURL] @@ -102,17 +102,14 @@ - (void)processResponse:(BNCServerResponse *)response error:(NSError *)error { if (sessionData == nil || [sessionData isKindOfClass:[NSString class]]) { } else if ([sessionData isKindOfClass:[NSDictionary class]]) { - BNCLogWarning([NSString stringWithFormat:@"Received session data of type '%@' data is '%@'.", - NSStringFromClass(sessionData.class), sessionData]); + [[BranchLogger shared] logWarning:[NSString stringWithFormat:@"Received session data of type '%@' data is '%@'.", NSStringFromClass(sessionData.class), sessionData] error:nil]; sessionData = [BNCEncodingUtils encodeDictionaryToJsonString:(NSDictionary*)sessionData]; } else if ([sessionData isKindOfClass:[NSArray class]]) { - BNCLogWarning([NSString stringWithFormat:@"Received session data of type '%@' data is '%@'.", - NSStringFromClass(sessionData.class), sessionData]); + [[BranchLogger shared] logWarning:[NSString stringWithFormat:@"Received session data of type '%@' data is '%@'.", NSStringFromClass(sessionData.class), sessionData] error:nil]; sessionData = [BNCEncodingUtils encodeArrayToJsonString:(NSArray*)sessionData]; } else { - BNCLogError([NSString stringWithFormat:@"Received session data of type '%@' data is '%@'.", - NSStringFromClass(sessionData.class), sessionData]); + [[BranchLogger shared] logError:[NSString stringWithFormat:@"Received session data of type '%@' data is '%@'.", NSStringFromClass(sessionData.class), sessionData] error:error]; sessionData = nil; } @@ -143,13 +140,9 @@ - (void)processResponse:(BNCServerResponse *)response error:(NSError *)error { } NSString *referringURL = nil; - if (preferenceHelper.universalLinkUrl.length) { - referringURL = preferenceHelper.universalLinkUrl; - } - else if (preferenceHelper.externalIntentURI.length) { - referringURL = preferenceHelper.externalIntentURI; - } - else { + if (self.urlString.length > 0) { + referringURL = self.urlString; + } else { NSDictionary *sessionDataDict = [BNCEncodingUtils decodeJsonStringToDictionary:sessionData]; NSString *link = sessionDataDict[BRANCH_RESPONSE_KEY_BRANCH_REFERRING_LINK]; if ([link isKindOfClass:[NSString class]]) { @@ -193,17 +186,17 @@ - (void)processResponse:(BNCServerResponse *)response error:(NSError *)error { [[BNCSKAdNetwork sharedInstance] updatePostbackConversionValue:0 coarseValue:defaultCoarseConValue lockWindow:NO completionHandler:^(NSError * _Nullable error) { if (error) { - BNCLogError([NSString stringWithFormat:@"Update conversion value failed with error - %@", [error description]]); + [[BranchLogger shared] logError:[NSString stringWithFormat:@"Update conversion value failed with error - %@", [error description]] error:error]; } else { - BNCLogDebug([NSString stringWithFormat:@"Update conversion value was successful for INSTALL Event"]); + [[BranchLogger shared] logDebug:[NSString stringWithFormat:@"Update conversion value was successful for INSTALL Event"] error:nil]; } }]; } else if (@available(iOS 15.4, macCatalyst 15.4, *)){ [[BNCSKAdNetwork sharedInstance] updatePostbackConversionValue:0 completionHandler:^(NSError * _Nullable error) { if (error) { - BNCLogError([NSString stringWithFormat:@"Update conversion value failed with error - %@", [error description]]); + [[BranchLogger shared] logError:[NSString stringWithFormat:@"Update conversion value failed with error - %@", [error description]] error:error]; } else { - BNCLogDebug([NSString stringWithFormat:@"Update conversion value was successful for INSTALL Event"]); + [[BranchLogger shared] logDebug:[NSString stringWithFormat:@"Update conversion value was successful for INSTALL Event"] error:nil]; } }]; } @@ -225,23 +218,23 @@ - (void)processResponse:(BNCServerResponse *)response error:(NSError *)error { BOOL lockWin = [[BNCSKAdNetwork sharedInstance] getLockedStatusFromDataResponse:data]; BOOL shouldCallUpdatePostback = [[BNCSKAdNetwork sharedInstance] shouldCallPostbackForDataResponse:data]; - BNCLogDebug([NSString stringWithFormat:@"SKAN 4.0 params - conversionValue:%@ coarseValue:%@, locked:%d, shouldCallPostback:%d, currentWindow:%d, firstAppLaunchTime: %@", conversionValue, coarseConversionValue, lockWin, shouldCallUpdatePostback, (int)preferenceHelper.skanCurrentWindow, preferenceHelper.firstAppLaunchTime]); + [[BranchLogger shared] logDebug: [NSString stringWithFormat:@"SKAN 4.0 params - conversionValue:%@ coarseValue:%@, locked:%d, shouldCallPostback:%d, currentWindow:%d, firstAppLaunchTime: %@", conversionValue, coarseConversionValue, lockWin, shouldCallUpdatePostback, (int)preferenceHelper.skanCurrentWindow, preferenceHelper.firstAppLaunchTime] error:nil]; if(shouldCallUpdatePostback){ [[BNCSKAdNetwork sharedInstance] updatePostbackConversionValue: conversionValue.longValue coarseValue:coarseConversionValue lockWindow:lockWin completionHandler:^(NSError * _Nullable error) { if (error) { - BNCLogError([NSString stringWithFormat:@"Update conversion value failed with error - %@", [error description]]); + [[BranchLogger shared] logError:[NSString stringWithFormat:@"Update conversion value failed with error - %@", [error description]] error:error]; } else { - BNCLogDebug([NSString stringWithFormat:@"Update conversion value was successful. Conversion Value - %@", conversionValue]); + [[BranchLogger shared] logDebug:[NSString stringWithFormat:@"Update conversion value was successful. Conversion Value - %@", conversionValue] error:nil]; } }]; } } else if (@available(iOS 15.4, macCatalyst 15.4, *)) { [[BNCSKAdNetwork sharedInstance] updatePostbackConversionValue:conversionValue.intValue completionHandler: ^(NSError *error){ if (error) { - BNCLogError([NSString stringWithFormat:@"Update conversion value failed with error - %@", [error description]]); + [[BranchLogger shared] logError:[NSString stringWithFormat:@"Update conversion value failed with error - %@", [error description]] error:error]; } else { - BNCLogDebug([NSString stringWithFormat:@"Update conversion value was successful. Conversion Value - %@", conversionValue]); + [[BranchLogger shared] logDebug:[NSString stringWithFormat:@"Update conversion value was successful. Conversion Value - %@", conversionValue] error:nil]; } }]; } else { @@ -260,6 +253,21 @@ - (NSString *)getActionName { return @"open"; } +- (instancetype)initWithCoder:(NSCoder *)decoder { + self = [super initWithCoder:decoder]; + if (!self) return self; + self.urlString = [decoder decodeObjectOfClass:NSString.class forKey:@"urlString"]; + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [super encodeWithCoder:coder]; + [coder encodeObject:self.urlString forKey:@"urlString"]; +} + ++ (BOOL)supportsSecureCoding { + return YES; +} #pragma - Open Response Lock Handling @@ -284,7 +292,7 @@ + (void) initialize { + (void) setWaitNeededForOpenResponseLock { @synchronized (self) { if (!openRequestWaitQueueIsSuspended) { - BNCLogDebugSDK(@"Suspended for openRequestWaitQueue."); + [[BranchLogger shared] logVerbose:@"Suspended for openRequestWaitQueue." error:nil]; openRequestWaitQueueIsSuspended = YES; dispatch_suspend(openRequestWaitQueue); } @@ -292,16 +300,16 @@ + (void) setWaitNeededForOpenResponseLock { } + (void) waitForOpenResponseLock { - BNCLogDebugSDK(@"Waiting for openRequestWaitQueue."); + [[BranchLogger shared] logVerbose:@"Waiting for openRequestWaitQueue." error:nil]; dispatch_sync(openRequestWaitQueue, ^ { - BNCLogDebugSDK(@"Finished waitForOpenResponseLock."); + [[BranchLogger shared] logVerbose:@"Finished waitForOpenResponseLock." error:nil]; }); } + (void) releaseOpenResponseLock { @synchronized (self) { if (openRequestWaitQueueIsSuspended) { - BNCLogDebugSDK(@"Resuming openRequestWaitQueue."); + [[BranchLogger shared] logVerbose:@"Resuming openRequestWaitQueue." error:nil]; openRequestWaitQueueIsSuspended = NO; dispatch_resume(openRequestWaitQueue); } diff --git a/BranchSDK/BranchPasteControl.m b/Sources/BranchSDK/BranchPasteControl.m similarity index 98% rename from BranchSDK/BranchPasteControl.m rename to Sources/BranchSDK/BranchPasteControl.m index 5877b4ee5..f70b26f3e 100644 --- a/BranchSDK/BranchPasteControl.m +++ b/Sources/BranchSDK/BranchPasteControl.m @@ -6,6 +6,7 @@ // Copyright © 2022 Branch, Inc. All rights reserved. // +#if !TARGET_OS_TV #import "BranchPasteControl.h" #import "Branch.h" @@ -50,3 +51,4 @@ - (BOOL)canPasteItemProviders:(NSArray *)itemProviders { } @end +#endif diff --git a/BranchSDK/BranchPluginSupport.m b/Sources/BranchSDK/BranchPluginSupport.m similarity index 77% rename from BranchSDK/BranchPluginSupport.m rename to Sources/BranchSDK/BranchPluginSupport.m index 36b710c8b..7b0af19d3 100644 --- a/BranchSDK/BranchPluginSupport.m +++ b/Sources/BranchSDK/BranchPluginSupport.m @@ -11,14 +11,13 @@ #import "BNCDeviceInfo.h" #import "BNCPreferenceHelper.h" #import "Branch.h" -#import "BNCLog.h" #import "BNCConfig.h" @implementation BranchPluginSupport + (BranchPluginSupport *)instance { - static BranchPluginSupport *pluginSupport; - static dispatch_once_t onceToken; + static BranchPluginSupport *pluginSupport = nil; + static dispatch_once_t onceToken = 0; dispatch_once(&onceToken, ^{ pluginSupport = [BranchPluginSupport new]; }); @@ -54,23 +53,9 @@ + (BranchPluginSupport *)instance { #pragma mark - Server URL methods -// With the change to support Apple's tracking domain feature, this API no longer works. See SDK-2118 -// Overrides base API URL -+ (void)setAPIUrl:(NSString *)url { - if([url hasPrefix:@"http://"] || [url hasPrefix:@"https://"] ){ - [[BNCPreferenceHelper sharedInstance] setBranchAPIURL:url]; - } else { - BNCLogWarning(@"Ignoring invalid custom API URL"); - } -} - // Overrides base CDN URL + (void)setCDNBaseUrl:(NSString *)url { - if([url hasPrefix:@"http://"] || [url hasPrefix:@"https://"] ){ - [[BNCPreferenceHelper sharedInstance] setPatternListURL:url]; - } else { - BNCLogWarning(@"Ignoring invalid custom CDN URL"); - } + [[BNCPreferenceHelper sharedInstance] setPatternListURL:url]; } @end diff --git a/BranchSDK/BranchQRCode.m b/Sources/BranchSDK/BranchQRCode.m similarity index 82% rename from BranchSDK/BranchQRCode.m rename to Sources/BranchSDK/BranchQRCode.m index 6000e6a1a..b88bfe068 100644 --- a/BranchSDK/BranchQRCode.m +++ b/Sources/BranchSDK/BranchQRCode.m @@ -13,7 +13,7 @@ #import "BranchConstants.h" #import "NSError+Branch.h" #import "UIViewController+Branch.h" -#import "BNCLog.h" +#import "BranchLogger.h" #import "BNCServerAPI.h" @interface BranchQRCode() @@ -35,11 +35,11 @@ - (instancetype) init { - (void) setMargin:(NSNumber *)margin { if (margin.intValue > 20) { margin = @(20); - BNCLogWarning(@"Margin was reduced to the maximum of 20."); + [[BranchLogger shared] logWarning:@"QR code margin was reduced to the maximum of 20." error:nil]; } if (margin.intValue < 1) { margin = @(1); - BNCLogWarning(@"Margin was increased to the minimum of 1."); + [[BranchLogger shared] logWarning:@"QR code margin was increased to the minimum of 1." error:nil]; } _margin = margin; } @@ -47,11 +47,11 @@ - (void) setMargin:(NSNumber *)margin { - (void) setWidth:(NSNumber *)width { if (width.intValue > 2000) { width = @(2000); - BNCLogWarning(@"Width was reduced to the maximum of 2000."); + [[BranchLogger shared] logWarning:@"QR code width was reduced to the maximum of 2000." error:nil]; } if (width.intValue < 300) { width = @(300); - BNCLogWarning(@"Width was increased to the minimum of 500."); + [[BranchLogger shared] logWarning:@"QR code width was increased to the minimum of 500." error:nil]; } _width = width; } @@ -73,7 +73,7 @@ - (void)getQRCodeAsData:(nullable BranchUniversalObject *)buo NSData *data=[NSData dataWithContentsOfURL:[NSURL URLWithString: self.centerLogo]]; UIImage *image=[UIImage imageWithData:data]; if (image == nil) { - BNCLogWarning(@"QR code center logo was an invalid URL string."); + [[BranchLogger shared] logWarning:@"QR code center logo was an invalid URL string." error:nil]; } else { settings[@"center_logo_url"] = self.centerLogo; } @@ -137,41 +137,41 @@ - (void)callQRCodeAPI:(nullable NSDictionary *)params NSData *postData = [NSJSONSerialization dataWithJSONObject:params options:0 error:&error]; [request setHTTPBody:postData]; - BNCLogDebug([NSString stringWithFormat:@"Network start operation %@.", request.URL.absoluteString]); - + [[BranchLogger shared] logDebug:[NSString stringWithFormat:@"Network start operation %@.", request.URL.absoluteString] error:nil]; NSDate *startDate = [NSDate date]; NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { if (error) { - BNCLogError([NSString stringWithFormat:@"QR Code Post Request Error: %@", [error localizedDescription]]); - completion(nil, error); + if ([NSError branchDNSBlockingError:error]) { + [[BranchLogger shared] logWarning:@"Possible DNS Ad Blocker" error:error]; + } else { + [[BranchLogger shared] logError:@"QR Code request failed" error:error]; + completion(nil, error); + } return; } NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response; if (httpResponse.statusCode == 200) { - - BNCLogDebug([NSString stringWithFormat:@"Network finish operation %@ %1.3fs. Status %ld.", - request.URL.absoluteString, - [[NSDate date] timeIntervalSinceDate:startDate], - (long)httpResponse.statusCode]); + [[BranchLogger shared] logDebug:[NSString stringWithFormat:@"Network finish operation %@ %1.3fs. Status %ld.", + request.URL.absoluteString, + [[NSDate date] timeIntervalSinceDate:startDate], + (long)httpResponse.statusCode] error:nil]; completion(data, nil); } else { NSDictionary *responseDictionary = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error]; - BNCLogError([NSString stringWithFormat:@"Network finish operation %@ %1.3fs. Status %ld error %@.\n%@.", - request.URL.absoluteString, - [[NSDate date] timeIntervalSinceDate:startDate], - (long)httpResponse.statusCode, - error, - responseDictionary]); - error = [NSError branchErrorWithCode: BNCBadRequestError localizedMessage: responseDictionary[@"message"]]; - + [[BranchLogger shared] logError:[NSString stringWithFormat:@"Network finish operation %@ %1.3fs. Status %ld error %@.\n%@.", + request.URL.absoluteString, + [[NSDate date] timeIntervalSinceDate:startDate], + (long)httpResponse.statusCode, + error, + responseDictionary] error:error]; completion(nil, error); } }]; @@ -208,7 +208,7 @@ - (void)showShareSheetWithQRCodeFromViewController:(nullable UIViewController *) } if (!presentingViewController) { - BNCLogError(@"No view controller is present to show the share sheet. Not showing sheet."); + [[BranchLogger shared] logError:@"No view controller is present to show the share sheet. Not showing sheet." error:nil]; return; } diff --git a/BranchSDK/BranchScene.m b/Sources/BranchSDK/BranchScene.m similarity index 85% rename from BranchSDK/BranchScene.m rename to Sources/BranchSDK/BranchScene.m index eca3d011a..cb176994e 100644 --- a/BranchSDK/BranchScene.m +++ b/Sources/BranchSDK/BranchScene.m @@ -8,13 +8,13 @@ #import "BranchScene.h" #import "Branch.h" -#import "BNCLog.h" +#import "BranchLogger.h" @implementation BranchScene + (BranchScene *)shared NS_EXTENSION_UNAVAILABLE("BranchScene does not support Extensions") { - static BranchScene *bscene; - static dispatch_once_t onceToken; + static BranchScene *bscene = nil; + static dispatch_once_t onceToken = 0; dispatch_once(&onceToken, ^{ bscene = [BranchScene new]; }); @@ -22,6 +22,8 @@ + (BranchScene *)shared NS_EXTENSION_UNAVAILABLE("BranchScene does not support E } - (void)initSessionWithLaunchOptions:(nullable NSDictionary *)options registerDeepLinkHandler:(void (^ _Nonnull)(NSDictionary * _Nullable params, NSError * _Nullable error, UIScene * _Nullable scene))callback NS_EXTENSION_UNAVAILABLE("BranchScene does not support Extensions") { + [[BranchLogger shared] logVerbose:@"BranchScene initSession" error:nil]; + [[Branch getInstance] initSceneSessionWithLaunchOptions:options isReferrable:YES explicitlyRequestedReferrable:NO automaticallyDisplayController:NO registerDeepLinkHandler:^(BNCInitSessionResponse * _Nullable initResponse, NSError * _Nullable error) { if (callback) { if (initResponse) { @@ -34,13 +36,17 @@ - (void)initSessionWithLaunchOptions:(nullable NSDictionary *)options registerDe } - (void)scene:(UIScene *)scene continueUserActivity:(NSUserActivity *)userActivity NS_EXTENSION_UNAVAILABLE("BranchScene does not support Extensions") { + [[BranchLogger shared] logVerbose:@"BranchScene continueUserActivity" error:nil]; + NSString *identifier = scene.session.persistentIdentifier; [[Branch getInstance] continueUserActivity:userActivity sceneIdentifier:identifier]; } - (void)scene:(UIScene *)scene openURLContexts:(NSSet *)URLContexts NS_EXTENSION_UNAVAILABLE("BranchScene does not support Extensions") { + [[BranchLogger shared] logVerbose:@"BranchScene openURLContexts" error:nil]; + if (URLContexts.count != 1) { - BNCLogWarning(@"Branch only supports a single URLContext"); + [[BranchLogger shared] logWarning:@"Branch only supports a single URLContext" error:nil]; } UIOpenURLContext *context = [URLContexts allObjects].firstObject; diff --git a/BranchSDK/BranchShareLink.m b/Sources/BranchSDK/BranchShareLink.m similarity index 89% rename from BranchSDK/BranchShareLink.m rename to Sources/BranchSDK/BranchShareLink.m index 6c5aca4af..690b8c57f 100644 --- a/BranchSDK/BranchShareLink.m +++ b/Sources/BranchSDK/BranchShareLink.m @@ -5,11 +5,12 @@ // Created by Edward Smith on 3/13/17. // Copyright © 2017 Branch Metrics. All rights reserved. // +#if !TARGET_OS_TV #import "BranchShareLink.h" #import "BranchConstants.h" #import "BranchActivityItemProvider.h" -#import "BNCLog.h" +#import "BranchLogger.h" #import "Branch.h" #import "BranchEvent.h" #import "UIViewController+Branch.h" @@ -103,11 +104,9 @@ - (void) shareDidComplete:(BOOL)completed activityError:(NSError*)error { if (completed && !error) { [[BranchEvent customEventWithName:BNCShareCompletedEvent contentItem:self.universalObject] logEvent]; } - if (self.completion) - self.completion(self.activityType, completed); - else - if (self.completionError) - self.completionError(self.activityType, completed, error); + if (self.completionError) { + self.completionError(self.activityType, completed, error); + } } - (NSArray*_Nonnull) activityItems { @@ -116,19 +115,11 @@ - (void) shareDidComplete:(BOOL)completed activityError:(NSError*)error { } // Make sure we can share - - if (!(self.universalObject.canonicalIdentifier || - self.universalObject.canonicalUrl || - self.universalObject.title)) { - BNCLogWarning(@"A canonicalIdentifier, canonicalURL, or title are required to uniquely" - " identify content. In order to not break the end user experience with sharing," - " Branch SDK will proceed to create a URL, but content analytics may not properly" - " include this URL."); + if (!(self.universalObject.canonicalIdentifier || self.universalObject.canonicalUrl || self.universalObject.title)) { + [[BranchLogger shared] logWarning:@"A canonicalIdentifier, canonicalURL, or title are required to uniquely identify content. In order to not break the end user experience with sharing, Branch SDK will proceed to create a URL, but content analytics may not properly include this URL." error:nil]; } - self.serverParameters = - [[self.universalObject getParamsForServerRequestWithAddedLinkProperties:self.linkProperties] - mutableCopy]; + self.serverParameters = [[self.universalObject getParamsForServerRequestWithAddedLinkProperties:self.linkProperties] mutableCopy]; if (self.linkProperties.matchDuration) { self.serverParameters[BRANCH_REQUEST_KEY_URL_DURATION] = @(self.linkProperties.matchDuration); } @@ -207,13 +198,12 @@ - (void) presentActivityViewControllerFromViewController:(UIViewController*_Null NSString *emailSubject = self.linkProperties.controlParams[BRANCH_LINK_DATA_KEY_EMAIL_SUBJECT]; if (emailSubject.length <= 0) emailSubject = self.emailSubject; if (emailSubject.length) { + // Key value coding to set email subject + // https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/KeyValueCoding/SearchImplementation.html#//apple_ref/doc/uid/20000955 @try { [shareViewController setValue:emailSubject forKey:@"subject"]; - } - @catch (NSException*) { - BNCLogWarning( - @"Unable to setValue 'emailSubject' forKey 'subject' on UIActivityViewController." - ); + } @catch (NSException *exception) { + [[BranchLogger shared] logWarning:[NSString stringWithFormat:@"Exception to setValue 'emailSubject' forKey 'subject' on UIActivityViewController: %@.", exception] error:nil]; } } @@ -228,7 +218,7 @@ - (void) presentActivityViewControllerFromViewController:(UIViewController*_Null } if (!presentingViewController) { - BNCLogError(@"No view controller is present to show the share sheet. Not showing sheet."); + [[BranchLogger shared] logError:@"No view controller is present to show the share sheet. Not showing sheet." error:nil]; return; } @@ -341,3 +331,4 @@ - (void)addLPLinkMetadata:(NSString *)title icon:(UIImage *)icon API_AVAILABLE(i } @end +#endif diff --git a/BranchSDK/BranchShortUrlRequest.m b/Sources/BranchSDK/BranchShortUrlRequest.m similarity index 100% rename from BranchSDK/BranchShortUrlRequest.m rename to Sources/BranchSDK/BranchShortUrlRequest.m diff --git a/BranchSDK/BranchShortUrlSyncRequest.m b/Sources/BranchSDK/BranchShortUrlSyncRequest.m similarity index 95% rename from BranchSDK/BranchShortUrlSyncRequest.m rename to Sources/BranchSDK/BranchShortUrlSyncRequest.m index 2526af572..3cbf8da64 100644 --- a/BranchSDK/BranchShortUrlSyncRequest.m +++ b/Sources/BranchSDK/BranchShortUrlSyncRequest.m @@ -11,7 +11,7 @@ #import "BNCEncodingUtils.h" #import "BranchConstants.h" #import "BNCConfig.h" -#import "BNCLog.h" +#import "BranchLogger.h" #import "BNCRequestFactory.h" #import "BNCServerAPI.h" @@ -62,8 +62,8 @@ - (BNCServerResponse *)makeRequest:(BNCServerInterface *)serverInterface key:(NS - (NSString *)processResponse:(BNCServerResponse *)response { if (![response.statusCode isEqualToNumber:@200]) { - BNCLogWarning([NSString stringWithFormat:@"Short link creation received HTTP status code %@. Using long link instead.", - response.statusCode]); + [[BranchLogger shared] logWarning:[NSString stringWithFormat:@"Short link creation received HTTP status code %@. Using long link instead.", + response.statusCode] error:nil]; NSString *failedUrl = nil; NSString *userUrl = [BNCPreferenceHelper sharedInstance].userUrl; if (userUrl) { diff --git a/BranchSDK/BranchSpotlightUrlRequest.m b/Sources/BranchSDK/BranchSpotlightUrlRequest.m similarity index 100% rename from BranchSDK/BranchSpotlightUrlRequest.m rename to Sources/BranchSDK/BranchSpotlightUrlRequest.m diff --git a/BranchSDK/BranchUniversalObject.m b/Sources/BranchSDK/BranchUniversalObject.m similarity index 72% rename from BranchSDK/BranchUniversalObject.m rename to Sources/BranchSDK/BranchUniversalObject.m index fb771747b..a8c805e89 100644 --- a/BranchSDK/BranchUniversalObject.m +++ b/Sources/BranchSDK/BranchUniversalObject.m @@ -9,10 +9,11 @@ #import "BranchUniversalObject.h" #import "NSError+Branch.h" #import "BranchConstants.h" -#import "BNCLog.h" +#import "BranchLogger.h" #import "BNCEncodingUtils.h" #import "Branch.h" #import "BranchEvent.h" +#import "NSMutableDictionary+Branch.h" #if !TARGET_OS_TV #import "BNCUserAgentCollector.h" @@ -74,68 +75,104 @@ - (NSDictionary*_Nonnull) dictionary { dictionary[key] = value; } - #define BNCFieldDefinesDictionaryFromSelf - #include "BNCFieldDefines.h" - - addString(contentSchema, $content_schema); - addDouble(quantity, $quantity); - addDecimal(price, $price); - addString(currency, $currency); - addString(sku, $sku); - addString(productName, $product_name); - addString(productBrand, $product_brand); - addString(productCategory, $product_category); - addString(productVariant, $product_variant); - addString(condition, $condition); - addDouble(ratingAverage, $rating_average); - addInteger(ratingCount, $rating_count); - addDouble(ratingMax, $rating_max); - addDouble(rating, $rating); - addString(addressStreet, $address_street); - addString(addressCity, $address_city); - addString(addressRegion, $address_region); - addString(addressCountry, $address_country); - addString(addressPostalCode,$address_postal_code); - addDouble(latitude, $latitude); - addDouble(longitude, $longitude); - addStringArray(imageCaptions,$image_captions); - - #include "BNCFieldDefines.h" - + [dictionary bnc_addString:self.contentSchema forKey:@"$content_schema"]; + [dictionary bnc_addDouble:self.quantity forKey:@"$quantity"]; + [dictionary bnc_addDecimal:self.price forKey:@"$price"]; + [dictionary bnc_addString:self.currency forKey:@"$currency"]; + [dictionary bnc_addString:self.sku forKey:@"$sku"]; + [dictionary bnc_addString:self.productName forKey:@"$product_name"]; + [dictionary bnc_addString:self.productBrand forKey:@"$product_brand"]; + [dictionary bnc_addString:self.productCategory forKey:@"$product_category"]; + [dictionary bnc_addString:self.productVariant forKey:@"$product_variant"]; + [dictionary bnc_addString:self.condition forKey:@"$condition"]; + [dictionary bnc_addDouble:self.ratingAverage forKey:@"$rating_average"]; + [dictionary bnc_addInteger:self.ratingCount forKey:@"$rating_count"]; + [dictionary bnc_addDouble:self.ratingMax forKey:@"$rating_max"]; + [dictionary bnc_addDouble:self.rating forKey:@"$rating"]; + [dictionary bnc_addString:self.addressStreet forKey:@"$address_street"]; + [dictionary bnc_addString:self.addressCity forKey:@"$address_city"]; + [dictionary bnc_addString:self.addressRegion forKey:@"$address_region"]; + [dictionary bnc_addString:self.addressCountry forKey:@"$address_country"]; + [dictionary bnc_addString:self.addressPostalCode forKey:@"$address_postal_code"]; + [dictionary bnc_addDouble:self.latitude forKey:@"$latitude"]; + [dictionary bnc_addDouble:self.longitude forKey:@"$longitude"]; + [dictionary bnc_addStringArray:self.imageCaptions forKey:@"$image_captions"]; + return dictionary; } + (BranchContentMetadata*_Nonnull) contentMetadataWithDictionary:(NSDictionary*_Nullable)dictionary { - BranchContentMetadata*object = [BranchContentMetadata new]; + BranchContentMetadata *object = [BranchContentMetadata new]; if (!dictionary) return object; + + // category is on NSMutableDictionary. If dictionary is already mutable, it just returns. Otherwise it does a shallow copy. + NSMutableDictionary *dict = [dictionary mutableCopy]; + + object.contentSchema = [dict bnc_getStringForKey:@"$content_schema"]; + object.quantity = [dict bnc_getDoubleForKey:@"$quantity"]; + object.price = [dict bnc_getDecimalForKey:@"$price"]; + object.currency = [dict bnc_getStringForKey:@"$currency"]; + object.sku = [dict bnc_getStringForKey:@"$sku"]; + object.productName = [dict bnc_getStringForKey:@"$product_name"]; + object.productBrand = [dict bnc_getStringForKey:@"$product_brand"]; + object.productCategory = [dict bnc_getStringForKey:@"$product_category"]; + object.productVariant = [dict bnc_getStringForKey:@"$product_variant"]; + object.condition = [dict bnc_getStringForKey:@"$condition"]; + object.ratingAverage = [dict bnc_getDoubleForKey:@"$rating_average"]; + object.ratingCount = [dict bnc_getIntForKey:@"$rating_count"]; + object.ratingMax = [dict bnc_getDoubleForKey:@"$rating_max"]; + object.rating = [dict bnc_getDoubleForKey:@"$rating"]; + object.addressStreet = [dict bnc_getStringForKey:@"$address_street"]; + object.addressCity = [dict bnc_getStringForKey:@"$address_city"]; + object.addressRegion = [dict bnc_getStringForKey:@"$address_region"]; + object.addressCountry = [dict bnc_getStringForKey:@"$address_country"]; + object.addressPostalCode = [dict bnc_getStringForKey:@"$address_postal_code"]; + object.latitude = [dict bnc_getDoubleForKey:@"$latitude"]; + object.longitude = [dict bnc_getDoubleForKey:@"$longitude"]; + object.imageCaptions = [dict bnc_getArrayForKey:@"$image_captions"]; + + NSSet *fieldsAdded = [NSSet setWithArray:@[ + @"$canonical_identifier", + @"$canonical_url", + @"$creation_timestamp", + @"$exp_date", + @"$keywords", + @"$locally_indexable", + @"$og_description", + @"$og_image_url", + @"$og_title", + @"$publicly_indexable", + @"$content_schema", + @"$quantity", + @"$price", + @"$currency", + @"$sku", + @"$product_name", + @"$product_brand", + @"$product_category", + @"$product_variant", + @"$condition", + @"$rating_average", + @"$rating_count", + @"$rating_max", + @"$rating", + @"$address_street", + @"$address_city", + @"$address_region", + @"$address_country", + @"$address_postal_code", + @"$latitude", + @"$longitude", + @"$image_captions", + @"$custom_fields", + ]]; - #define BNCFieldDefinesObjectFromDictionary - #include "BNCFieldDefines.h" - - addString(contentSchema, $content_schema); - addDouble(quantity, $quantity); - addDecimal(price, $price); - addString(currency, $currency); - addString(sku, $sku); - addString(productName, $product_name); - addString(productBrand, $product_brand); - addString(productCategory, $product_category); - addString(productVariant, $product_variant); - addString(condition, $condition); - addDouble(ratingAverage, $rating_average); - addInteger(ratingCount, $rating_count); - addDouble(ratingMax, $rating_max); - addDouble(rating, $rating); - addString(addressStreet, $address_street); - addString(addressCity, $address_city); - addString(addressRegion, $address_region); - addString(addressCountry, $address_country); - addString(addressPostalCode,$address_postal_code); - addDouble(latitude, $latitude); - addDouble(longitude, $longitude); - addStringArray(imageCaptions,$image_captions); - - #include "BNCFieldDefines.h" + // Add any extra fields to the content object.contentMetadata.customMetadata + for (NSString *key in dictionary.keyEnumerator) { + if (![fieldsAdded containsObject:key]) { + object.customMetadata[key] = dictionary[key]; + } + } return object; } @@ -294,7 +331,7 @@ - (void)registerViewWithCallback:(callbackWithParams)callback { if (!self.canonicalIdentifier && !self.title) { NSString *message = @"Could not register view."; NSError *error = [NSError branchErrorWithCode:BNCContentIdentifierError localizedMessage:message]; - BNCLogWarning([NSString stringWithFormat:@"%@", error]); + [[BranchLogger shared] logWarning:@"TODO: replace this error" error:error]; if (callback) callback([[NSDictionary alloc] init], error); return; } @@ -313,7 +350,8 @@ - (void)registerViewWithCallback:(callbackWithParams)callback { - (NSString *)getShortUrlWithLinkProperties:(BranchLinkProperties *)linkProperties { if (!self.canonicalIdentifier && !self.title) { - BNCLogWarning(@"A canonicalIdentifier or title are required to uniquely identify content, so could not generate a URL."); + [[BranchLogger shared] logWarning:@"A canonicalIdentifier or title are required to uniquely identify content, so could not generate a URL." error:nil]; + return nil; } @@ -331,7 +369,7 @@ - (void)getShortUrlWithLinkProperties:(BranchLinkProperties *)linkProperties and if (!self.canonicalIdentifier && !self.title) { NSString *message = @"Could not generate a URL."; NSError *error = [NSError branchErrorWithCode:BNCContentIdentifierError localizedMessage:message]; - BNCLogWarning([NSString stringWithFormat:@"%@", error]); + [[BranchLogger shared] logWarning:@"TODO: replace this error" error:error]; if (callback) callback([BNCPreferenceHelper sharedInstance].userUrl, error); return; } @@ -351,7 +389,7 @@ - (NSString *)getShortUrlWithLinkPropertiesAndIgnoreFirstClick:(BranchLinkProper if (!self.canonicalIdentifier && !self.title) { NSString *message = @"Could not generate a URL."; NSError *error = [NSError branchErrorWithCode:BNCContentIdentifierError localizedMessage:message]; - BNCLogWarning([NSString stringWithFormat:@"%@", error]); + [[BranchLogger shared] logWarning:@"TODO: replace this error" error:error]; return nil; } @@ -392,55 +430,26 @@ - (NSString *)getLongUrlWithChannel:(NSString *)channel #if !TARGET_OS_TV - (void)showShareSheetWithShareText:(NSString *)shareText - completion:(void (^ _Nullable)(NSString * _Nullable activityType, BOOL completed))completion { - [self showShareSheetWithLinkProperties:nil andShareText:shareText fromViewController:nil completion:completion]; + completion:(void (^ _Nullable)(NSString * _Nullable activityType, BOOL completed, NSError*_Nullable error))completion { + [self showShareSheetWithLinkProperties:nil andShareText:shareText fromViewController:nil completionWithError:completion]; } - (void)showShareSheetWithLinkProperties:(BranchLinkProperties *)linkProperties andShareText:(NSString *)shareText fromViewController:(UIViewController *)viewController - completion:(void (^ _Nullable)(NSString * _Nullable activityType, BOOL completed))completion { - [self showShareSheetWithLinkProperties:linkProperties andShareText:shareText - fromViewController:viewController anchor:nil completion:completion orCompletionWithError:nil]; -} - -- (void)showShareSheetWithLinkProperties:(BranchLinkProperties *)linkProperties - andShareText:(NSString *)shareText - fromViewController:(UIViewController *)viewController - completionWithError:(void (^ _Nullable)(NSString * _Nullable activityType, BOOL completed, NSError*_Nullable error))completion { - [self showShareSheetWithLinkProperties:linkProperties andShareText:shareText - fromViewController:viewController anchor:nil completion:nil orCompletionWithError:completion]; -} - -- (void)showShareSheetWithLinkProperties:(nullable BranchLinkProperties *)linkProperties - andShareText:(nullable NSString *)shareText - fromViewController:(nullable UIViewController *)viewController - anchor:(nullable id)anchor - completion:(void (^ _Nullable)(NSString * _Nullable activityType, BOOL completed))completion { - [self showShareSheetWithLinkProperties:linkProperties andShareText:shareText - fromViewController:viewController anchor:anchor completion:completion orCompletionWithError:nil]; -} - -- (void)showShareSheetWithLinkProperties:(nullable BranchLinkProperties *)linkProperties - andShareText:(nullable NSString *)shareText - fromViewController:(nullable UIViewController *)viewController - anchor:(nullable id)anchor completionWithError:(void (^ _Nullable)(NSString * _Nullable activityType, BOOL completed, NSError*_Nullable error))completion { - [self showShareSheetWithLinkProperties:linkProperties andShareText:shareText - fromViewController:viewController anchor:anchor completion:nil orCompletionWithError:completion]; + [self showShareSheetWithLinkProperties:linkProperties andShareText:shareText fromViewController:viewController anchor:nil completionWithError:completion]; } - (void)showShareSheetWithLinkProperties:(BranchLinkProperties *)linkProperties andShareText:(NSString *)shareText fromViewController:(UIViewController *)viewController anchor:(nullable id)anchorViewOrButtonItem - completion:(void (^ _Nullable)(NSString * _Nullable activityType, BOOL completed))completion - orCompletionWithError:(void (^ _Nullable)(NSString * _Nullable activityType, BOOL completed, NSError*_Nullable error))completionError { + completionWithError:(void (^ _Nullable)(NSString * _Nullable activityType, BOOL completed, NSError*_Nullable error))completion { BranchShareLink *shareLink = [[BranchShareLink alloc] initWithUniversalObject:self linkProperties:linkProperties]; shareLink.shareText = shareText; - shareLink.completion = completion; - shareLink.completionError = completionError; + shareLink.completionError = completion; [shareLink presentActivityViewControllerFromViewController:viewController anchor:anchorViewOrButtonItem]; } @@ -464,8 +473,7 @@ - (void)listOnSpotlightWithIdentifierCallback:(callbackWithUrlAndSpotlightIdenti BOOL publiclyIndexable; if (self.contentIndexMode == BranchContentIndexModePrivate) { publiclyIndexable = NO; - } - else { + } else { publiclyIndexable = YES; } @@ -500,17 +508,15 @@ - (void)listOnSpotlightWithLinkProperties:(BranchLinkProperties*_Nullable)linkpr }]; } -- (void) removeFromSpotlightWithCallback:(void (^_Nullable)(NSError * _Nullable error))completion{ +- (void)removeFromSpotlightWithCallback:(void (^_Nullable)(NSError * _Nullable error))completion { if (self.locallyIndex) { - [[Branch getInstance] removeSearchableItemWithBranchUniversalObject:self - callback:^(NSError *error) { - if (completion) { - completion(error); - } - }]; + [[Branch getInstance] removeSearchableItemWithBranchUniversalObject:self callback:^(NSError *error) { + if (completion) { + completion(error); + } + }]; } else { - NSError *error = [NSError branchErrorWithCode:BNCSpotlightPublicIndexError - localizedMessage:@"Publically indexed cannot be removed from Spotlight"]; + NSError *error = [NSError branchErrorWithCode:BNCSpotlightPublicIndexError localizedMessage:@"Publically indexed cannot be removed from Spotlight"]; if (completion) completion(error); } } @@ -537,6 +543,7 @@ - (NSDictionary *)getDictionaryWithCompleteLinkProperties:(BranchLinkProperties return [temp copy]; } + - (void)safeSetValue:(NSObject *)value forKey:(NSString *)key onDict:(NSMutableDictionary *)dict { if (value) { dict[key] = value; @@ -545,70 +552,24 @@ - (void)safeSetValue:(NSObject *)value forKey:(NSString *)key onDict:(NSMutableD + (BranchUniversalObject*_Nonnull) objectWithDictionary:(NSDictionary*_Null_unspecified)dictionary { BranchUniversalObject *object = [BranchUniversalObject new]; - - #define BNCFieldDefinesObjectFromDictionary - #include "BNCFieldDefines.h" - - addString(canonicalIdentifier, $canonical_identifier); - addString(canonicalUrl, $canonical_url); - addDate(creationDate, $creation_timestamp); - addDate(expirationDate, $exp_date); - addStringArray(keywords, $keywords); - addBoolean(locallyIndex, $locally_indexable); - addString(contentDescription, $og_description); - addString(imageUrl, $og_image_url); - addString(title, $og_title); - addBoolean(publiclyIndex, $publicly_indexable); - - #include "BNCFieldDefines.h" + + // category is on NSMutableDictionary. If dictionary is already mutable, it just returns. Otherwise it does a shallow copy. + NSMutableDictionary *dict = [dictionary mutableCopy]; + + object.canonicalIdentifier = [dict bnc_getStringForKey:@"$canonical_identifier"]; + object.canonicalUrl = [dict bnc_getStringForKey:@"$canonical_url"]; + object.creationDate = [dict bnc_getDateForKey:@"$creation_timestamp"]; + object.expirationDate = [dict bnc_getDateForKey:@"$exp_date"]; + object.keywords = [dict bnc_getArrayForKey:@"$keywords"]; + object.locallyIndex = [dict bnc_getBooleanForKey:@"$locally_indexable"]; + object.contentDescription = [dict bnc_getStringForKey:@"$og_description"]; + object.imageUrl = [dict bnc_getStringForKey:@"$og_image_url"]; + object.title = [dict bnc_getStringForKey:@"$og_title"]; + object.publiclyIndex = [dict bnc_getBooleanForKey:@"$publicly_indexable"]; BranchContentMetadata *data = [BranchContentMetadata contentMetadataWithDictionary:dictionary]; object.contentMetadata = data; - NSSet *fieldsAdded = [NSSet setWithArray:@[ - @"$canonical_identifier", - @"$canonical_url", - @"$creation_timestamp", - @"$exp_date", - @"$keywords", - @"$locally_indexable", - @"$og_description", - @"$og_image_url", - @"$og_title", - @"$publicly_indexable", - @"$content_schema", - @"$quantity", - @"$price", - @"$currency", - @"$sku", - @"$product_name", - @"$product_brand", - @"$product_category", - @"$product_variant", - @"$condition", - @"$rating_average", - @"$rating_count", - @"$rating_max", - @"$rating", - @"$address_street", - @"$address_city", - @"$address_region", - @"$address_country", - @"$address_postal_code", - @"$latitude", - @"$longitude", - @"$image_captions", - @"$custom_fields", - ]]; - - // Add any extra fields to the content object.contentMetadata.customMetadata - - for (NSString* key in dictionary.keyEnumerator) { - if (![fieldsAdded containsObject:key]) { - object.contentMetadata.customMetadata[key] = dictionary[key]; - } - } - return object; } @@ -618,22 +579,17 @@ - (NSDictionary*_Nonnull) dictionary { NSDictionary *contentDictionary = [self.contentMetadata dictionary]; if (contentDictionary.count) [dictionary addEntriesFromDictionary:contentDictionary]; - - #define BNCFieldDefinesDictionaryFromSelf - #include "BNCFieldDefines.h" - - addString(canonicalIdentifier, $canonical_identifier); - addString(canonicalUrl, $canonical_url); - addDate(creationDate, $creation_timestamp); - addDate(expirationDate, $exp_date); - addStringArray(keywords, $keywords); - addBoolean(locallyIndex, $locally_indexable); - addString(contentDescription, $og_description); - addString(imageUrl, $og_image_url); - addString(title, $og_title); - addBoolean(publiclyIndex, $publicly_indexable); - - #include "BNCFieldDefines.h" + + [dictionary bnc_addString:self.canonicalIdentifier forKey:@"$canonical_identifier"]; + [dictionary bnc_addString:self.canonicalUrl forKey:@"$canonical_url"]; + [dictionary bnc_addDate:self.creationDate forKey:@"$creation_timestamp"]; + [dictionary bnc_addDate:self.expirationDate forKey:@"$exp_date"]; + [dictionary bnc_addStringArray:self.keywords forKey:@"$keywords"]; + [dictionary bnc_addBoolean:self.locallyIndex forKey:@"$locally_indexable"]; + [dictionary bnc_addString:self.contentDescription forKey:@"$og_description"]; + [dictionary bnc_addString:self.imageUrl forKey:@"$og_image_url"]; + [dictionary bnc_addString:self.title forKey:@"$og_title"]; + [dictionary bnc_addBoolean:self.publiclyIndex forKey:@"$publicly_indexable"]; return dictionary; } diff --git a/BranchSDK/NSError+Branch.m b/Sources/BranchSDK/NSError+Branch.m similarity index 64% rename from BranchSDK/NSError+Branch.m rename to Sources/BranchSDK/NSError+Branch.m index 408a5a64b..5e06a6987 100644 --- a/BranchSDK/NSError+Branch.m +++ b/Sources/BranchSDK/NSError+Branch.m @@ -21,9 +21,9 @@ + (NSString *)bncErrorDomain { } // Legacy error messages -+ (NSString *) messageForCode:(BNCErrorCode)code { - static NSMutableDictionary *messages; - static dispatch_once_t onceToken; ++ (NSString *)messageForCode:(BNCErrorCode)code { + static NSMutableDictionary *messages = nil; + static dispatch_once_t onceToken = 0; dispatch_once(&onceToken, ^{ messages = [NSMutableDictionary new]; [messages setObject:@"The Branch user session has not been initialized." forKey:@(BNCInitError)]; @@ -49,7 +49,7 @@ + (NSString *) messageForCode:(BNCErrorCode)code { return errorMessage; } -+ (NSError *) branchErrorWithCode:(BNCErrorCode)errorCode error:(NSError*)error localizedMessage:(NSString*_Nullable)message { ++ (NSError *)branchErrorWithCode:(BNCErrorCode)errorCode error:(NSError *)error localizedMessage:(NSString * _Nullable)message { NSMutableDictionary *userInfo = [NSMutableDictionary new]; NSString *localizedString = [self messageForCode:errorCode]; @@ -75,12 +75,44 @@ + (NSError *) branchErrorWithCode:(BNCErrorCode)errorCode { return [NSError branchErrorWithCode:errorCode error:nil localizedMessage:nil]; } -+ (NSError *) branchErrorWithCode:(BNCErrorCode)errorCode error:(NSError *_Nullable)error { ++ (NSError *) branchErrorWithCode:(BNCErrorCode)errorCode error:(NSError * _Nullable)error { return [NSError branchErrorWithCode:errorCode error:error localizedMessage:nil]; } -+ (NSError *) branchErrorWithCode:(BNCErrorCode)errorCode localizedMessage:(NSString *_Nullable)message { ++ (NSError *) branchErrorWithCode:(BNCErrorCode)errorCode localizedMessage:(NSString * _Nullable)message { return [NSError branchErrorWithCode:errorCode error:nil localizedMessage:message]; } ++ (BOOL)branchDNSBlockingError:(NSError *)error { + if (error) { + NSError *underlyingError = error.userInfo[@"NSUnderlyingError"]; + if (underlyingError) { + + /** + Check if an NSError was likely caused by a DNS sinkhole, such as Pi-hole. + The OS level logs will show that the IP address that failed is all 0's, however App level logs will not contain that information. + + `Domain=kCFErrorDomainCFNetwork Code=-1000` - Connection failed due to a malformed URL. A bit misleading since Ad blockers DNS resolve the URL as 0.0.0.0. + https://developer.apple.com/documentation/cfnetwork/cfnetworkerrors/kcfurlerrorbadurl?language=objc + + `_kCFStreamErrorDomainKey=1` Error domain is a POSIX error. + https://opensource.apple.com/source/CF/CF-550.13/CFStream.h.auto.html + + `_kCFStreamErrorCodeKey=22` POSIX error is invalid argument. In this case the IP address is 0.0.0.0, which is invalid. + https://opensource.apple.com/source/xnu/xnu-792/bsd/sys/errno.h.auto.html + */ + BOOL isCFErrorDomainCFNetwork = [((NSString *)kCFErrorDomainCFNetwork) isEqualToString:underlyingError.domain]; + BOOL isCodeMalFormedURL = [@(-1000) isEqual:@(underlyingError.code)]; + + BOOL isErrorDomainPosix = [@(1) isEqual:error.userInfo[@"_kCFStreamErrorDomainKey"]]; + BOOL isPosixInvalidArgument = [@(22) isEqual:error.userInfo[@"_kCFStreamErrorCodeKey"]]; + + if (isCFErrorDomainCFNetwork && isCodeMalFormedURL && isErrorDomainPosix && isPosixInvalidArgument) { + return YES; + } + } + } + return NO; +} + @end diff --git a/Sources/BranchSDK/NSMutableDictionary+Branch.m b/Sources/BranchSDK/NSMutableDictionary+Branch.m new file mode 100644 index 000000000..3f6d2ccea --- /dev/null +++ b/Sources/BranchSDK/NSMutableDictionary+Branch.m @@ -0,0 +1,205 @@ +// +// NSMutableDictionary+Branch.m +// Branch +// +// Created by Edward Smith on 1/11/17. +// Copyright © 2017 Branch Metrics. All rights reserved. +// + + +#import "NSMutableDictionary+Branch.h" + + +@implementation NSMutableDictionary (Branch) + +- (void)bnc_safeSetObject:(id)anObject forKey:(id)aKey { + if (anObject && aKey) { + [self setObject:anObject forKey:aKey]; + } +} + +- (void)bnc_safeAddEntriesFromDictionary:(NSDictionary,id> *)otherDictionary { + if ([otherDictionary isKindOfClass:[NSDictionary class]]) { + // This is a one layer deep copy + NSDictionary *deepCopy = [[NSDictionary alloc] initWithDictionary:otherDictionary copyItems:YES]; + [self addEntriesFromDictionary:deepCopy]; + } +} + +#pragma mark BNCFieldDefinesDictionaryFromSelf replacement methods + +- (void)bnc_addString:(NSString *)string forKey:(NSString *)key { + if (string && string.length && key) { + [self setObject:string forKey:key]; + } +} + +- (void)bnc_addDate:(NSDate *)date forKey:(NSString *)key { + if (date && key) { + NSTimeInterval t = date.timeIntervalSince1970; + NSNumber *tmp = [NSNumber numberWithLongLong:(long long)(t*1000.0)]; + [self setObject:tmp forKey:key]; + } +} + +- (void)bnc_addDouble:(double)number forKey:(NSString *)key { + if (number != 0.0 && key) { + NSNumber *tmp = [NSNumber numberWithDouble:number]; + [self setObject:tmp forKey:key]; + } +} + +// omits false/NO +- (void)bnc_addBoolean:(BOOL)boolean forKey:(NSString *)key { + if (boolean && key) { + NSNumber *tmp = [NSNumber numberWithBool:boolean]; + [self setObject:tmp forKey:key]; + } +} + +- (void)bnc_addDecimal:(NSDecimalNumber *)decimal forKey:(NSString *)key { + if (decimal && key) { + [self setObject:decimal forKey:key]; + } +} + +// omits 0 +- (void)bnc_addInteger:(NSInteger)integer forKey:(NSString *)key { + if (integer != 0) { + NSNumber *tmp = [NSNumber numberWithInteger:integer]; + [self setObject:tmp forKey:key]; + } +} + +// omits empty dictionaries +- (void)bnc_addDictionary:(NSDictionary *)dict forKey:(NSString *)key { + if (dict.count) { + [self setObject:dict forKey:key]; + } +} + +// omits empty string array +- (void)bnc_addStringArray:(NSArray *)array forKey:(NSString *)key { + if (array.count) { + [self setObject:array forKey:key]; + } +} + +#pragma mark BNCFieldDefinesObjectFromDictionary replacement methods + +// checks for NSNumber or NSString representations of an int +- (int)bnc_getIntForKey:(NSString *)key { + int returnValue = 0; + + id tmp = [self objectForKey:key]; + if ([tmp isKindOfClass:[NSNumber class]]) { + NSNumber *number = (NSNumber *)tmp; + returnValue = [number intValue]; + } else if ([tmp isKindOfClass:[NSString class]]) { + NSString *numberAsString = (NSString *)tmp; + returnValue = [numberAsString intValue]; + } + + return returnValue; +} + +// checks for NSNumber or NSString representations of a double +- (double)bnc_getDoubleForKey:(NSString *)key { + double returnValue = 0; + + id tmp = [self objectForKey:key]; + if ([tmp isKindOfClass:[NSNumber class]]) { + NSNumber *number = (NSNumber *)tmp; + returnValue = [number doubleValue]; + } else if ([tmp isKindOfClass:[NSString class]]) { + NSString *numberAsString = (NSString *)tmp; + returnValue = [numberAsString doubleValue]; + } + + return returnValue; +} + +- (NSString *)bnc_getStringForKey:(NSString *)key { + NSString *returnValue = nil; + + id tmp = [self objectForKey:key]; + if ([tmp isKindOfClass:[NSString class]]) { + returnValue = (NSString *)tmp; + } + + return returnValue; +} + +// checks for NSNumber or NSString representations of the date +- (NSDate *)bnc_getDateForKey:(NSString *)key { + NSDate *returnValue = nil; + NSTimeInterval timeInterval = [self bnc_getDoubleForKey:key]; + if (timeInterval > 0) { + returnValue = [NSDate dateWithTimeIntervalSince1970:timeInterval/1000.0]; + } + return returnValue; +} + +// checks for NSNumber or NSString representations of the decimal +- (NSDecimalNumber *)bnc_getDecimalForKey:(NSString *)key { + NSDecimalNumber *returnValue = nil; + + id tmp = [self objectForKey:key]; + if ([tmp isKindOfClass:[NSNumber class]]) { + NSNumber *number = (NSNumber *)tmp; + + // previous implementation converts the NSNumber to a string then to a NSDecimalNumber. lets maintain that behavior + returnValue = [NSDecimalNumber decimalNumberWithString:[number description]]; + } else if ([tmp isKindOfClass:[NSString class]]) { + NSString *numberAsString = (NSString *)tmp; + returnValue = [NSDecimalNumber decimalNumberWithString:numberAsString]; + } + + return returnValue; +} + +// checks for NSArray or NSString, +- (NSMutableArray *)bnc_getArrayForKey:(NSString *)key { + NSMutableArray *returnValue = nil; + + id tmp = [self objectForKey:key]; + if ([tmp isKindOfClass:[NSArray class]]) { + returnValue = [NSMutableArray new]; + + NSArray *array = (NSArray *)tmp; + for (id item in array) { + if ([item isKindOfClass:[NSString class]]) { + [returnValue addObject:item]; + } + } + + } else if ([tmp isKindOfClass:[NSString class]]) { + returnValue = [NSMutableArray arrayWithObject:tmp]; + } else { + returnValue = [NSMutableArray new]; + } + + return returnValue; +} + +// checks for NSNumber or NSString representations of the boolean +- (BOOL)bnc_getBooleanForKey:(NSString *)key { + BOOL returnValue = NO; + + id tmp = [self objectForKey:key]; + if ([tmp isKindOfClass:[NSNumber class]]) { + NSNumber *number = (NSNumber *)tmp; + returnValue = [number boolValue]; + } else if ([tmp isKindOfClass:[NSString class]]) { + NSString *numberAsString = (NSString *)tmp; + returnValue = [numberAsString boolValue]; + } + + return returnValue; +} + +@end + +__attribute__((constructor)) void BNCForceNSMutableDictionaryCategoryToLoad(void) { + // Does nothing. But will force the linker to include this category. +} diff --git a/BranchSDK/NSString+Branch.m b/Sources/BranchSDK/NSString+Branch.m similarity index 100% rename from BranchSDK/NSString+Branch.m rename to Sources/BranchSDK/NSString+Branch.m diff --git a/BranchSDK/BNCAppGroupsData.h b/Sources/BranchSDK/Private/BNCAppGroupsData.h similarity index 100% rename from BranchSDK/BNCAppGroupsData.h rename to Sources/BranchSDK/Private/BNCAppGroupsData.h diff --git a/BranchSDK/BNCAppleReceipt.h b/Sources/BranchSDK/Private/BNCAppleReceipt.h similarity index 100% rename from BranchSDK/BNCAppleReceipt.h rename to Sources/BranchSDK/Private/BNCAppleReceipt.h diff --git a/BranchSDK/BNCApplication.h b/Sources/BranchSDK/Private/BNCApplication.h similarity index 100% rename from BranchSDK/BNCApplication.h rename to Sources/BranchSDK/Private/BNCApplication.h diff --git a/BranchSDK/BNCCallbackMap.h b/Sources/BranchSDK/Private/BNCCallbackMap.h similarity index 100% rename from BranchSDK/BNCCallbackMap.h rename to Sources/BranchSDK/Private/BNCCallbackMap.h diff --git a/BranchSDK/BNCConfig.h b/Sources/BranchSDK/Private/BNCConfig.h similarity index 100% rename from BranchSDK/BNCConfig.h rename to Sources/BranchSDK/Private/BNCConfig.h diff --git a/BranchSDK/BNCContentDiscoveryManager.h b/Sources/BranchSDK/Private/BNCContentDiscoveryManager.h similarity index 99% rename from BranchSDK/BNCContentDiscoveryManager.h rename to Sources/BranchSDK/Private/BNCContentDiscoveryManager.h index ac696ca4d..02752fbd4 100644 --- a/BranchSDK/BNCContentDiscoveryManager.h +++ b/Sources/BranchSDK/Private/BNCContentDiscoveryManager.h @@ -6,6 +6,8 @@ // Copyright © 2015 Branch Metrics. All rights reserved. // +#if !TARGET_OS_TV + #if __has_feature(modules) @import Foundation; #else @@ -60,3 +62,4 @@ spotlightCallback:(callbackWithUrlAndSpotlightIdentifier)spotlightCallback; @end +#endif diff --git a/BranchSDK/BNCCrashlyticsWrapper.h b/Sources/BranchSDK/Private/BNCCrashlyticsWrapper.h similarity index 100% rename from BranchSDK/BNCCrashlyticsWrapper.h rename to Sources/BranchSDK/Private/BNCCrashlyticsWrapper.h diff --git a/BranchSDK/BNCDeepLinkViewControllerInstance.h b/Sources/BranchSDK/Private/BNCDeepLinkViewControllerInstance.h similarity index 100% rename from BranchSDK/BNCDeepLinkViewControllerInstance.h rename to Sources/BranchSDK/Private/BNCDeepLinkViewControllerInstance.h diff --git a/BranchSDK/BNCDeviceInfo.h b/Sources/BranchSDK/Private/BNCDeviceInfo.h similarity index 100% rename from BranchSDK/BNCDeviceInfo.h rename to Sources/BranchSDK/Private/BNCDeviceInfo.h diff --git a/BranchSDK/BNCDeviceSystem.h b/Sources/BranchSDK/Private/BNCDeviceSystem.h similarity index 100% rename from BranchSDK/BNCDeviceSystem.h rename to Sources/BranchSDK/Private/BNCDeviceSystem.h diff --git a/BranchSDK/BNCEncodingUtils.h b/Sources/BranchSDK/Private/BNCEncodingUtils.h similarity index 96% rename from BranchSDK/BNCEncodingUtils.h rename to Sources/BranchSDK/Private/BNCEncodingUtils.h index 037f43caf..97879167f 100644 --- a/BranchSDK/BNCEncodingUtils.h +++ b/Sources/BranchSDK/Private/BNCEncodingUtils.h @@ -64,4 +64,7 @@ extern NSString* BNCWireFormatFromString(NSString *string); + (NSArray*) queryItems:(NSURL*)URL; +// For JSON logging ++ (NSString *)prettyPrintJSON:(NSDictionary *)json; + @end diff --git a/BranchSDK/BNCEventUtils.h b/Sources/BranchSDK/Private/BNCEventUtils.h similarity index 100% rename from BranchSDK/BNCEventUtils.h rename to Sources/BranchSDK/Private/BNCEventUtils.h diff --git a/BranchSDK/BNCJSONUtility.h b/Sources/BranchSDK/Private/BNCJSONUtility.h similarity index 100% rename from BranchSDK/BNCJSONUtility.h rename to Sources/BranchSDK/Private/BNCJSONUtility.h diff --git a/BranchSDK/BNCKeyChain.h b/Sources/BranchSDK/Private/BNCKeyChain.h similarity index 93% rename from BranchSDK/BNCKeyChain.h rename to Sources/BranchSDK/Private/BNCKeyChain.h index 6d7d1e03a..b898287ab 100644 --- a/BranchSDK/BNCKeyChain.h +++ b/Sources/BranchSDK/Private/BNCKeyChain.h @@ -53,7 +53,9 @@ key:(NSString * _Nonnull)key cloudAccessGroup:(NSString * _Nullable)accessGroup; -/// The default security access group for the app. -+ (NSString*_Nullable) securityAccessGroup; +/** + The security access group string is prefixed with the Apple Developer Team ID + */ ++ (NSString * _Nullable) securityAccessGroup; @end diff --git a/BranchSDK/BNCNetworkInterface.h b/Sources/BranchSDK/Private/BNCNetworkInterface.h similarity index 100% rename from BranchSDK/BNCNetworkInterface.h rename to Sources/BranchSDK/Private/BNCNetworkInterface.h diff --git a/BranchSDK/BNCNetworkService.h b/Sources/BranchSDK/Private/BNCNetworkService.h similarity index 100% rename from BranchSDK/BNCNetworkService.h rename to Sources/BranchSDK/Private/BNCNetworkService.h diff --git a/BranchSDK/BNCPartnerParameters.h b/Sources/BranchSDK/Private/BNCPartnerParameters.h similarity index 100% rename from BranchSDK/BNCPartnerParameters.h rename to Sources/BranchSDK/Private/BNCPartnerParameters.h diff --git a/BranchSDK/BNCPasteboard.h b/Sources/BranchSDK/Private/BNCPasteboard.h similarity index 100% rename from BranchSDK/BNCPasteboard.h rename to Sources/BranchSDK/Private/BNCPasteboard.h diff --git a/BranchSDK/BNCQRCodeCache.h b/Sources/BranchSDK/Private/BNCQRCodeCache.h similarity index 100% rename from BranchSDK/BNCQRCodeCache.h rename to Sources/BranchSDK/Private/BNCQRCodeCache.h diff --git a/BranchSDK/BNCReachability.h b/Sources/BranchSDK/Private/BNCReachability.h similarity index 100% rename from BranchSDK/BNCReachability.h rename to Sources/BranchSDK/Private/BNCReachability.h diff --git a/BranchSDK/BNCReferringURLUtility.h b/Sources/BranchSDK/Private/BNCReferringURLUtility.h similarity index 100% rename from BranchSDK/BNCReferringURLUtility.h rename to Sources/BranchSDK/Private/BNCReferringURLUtility.h diff --git a/BranchSDK/BNCRequestFactory.h b/Sources/BranchSDK/Private/BNCRequestFactory.h similarity index 86% rename from BranchSDK/BNCRequestFactory.h rename to Sources/BranchSDK/Private/BNCRequestFactory.h index 6e33f480a..0732aee16 100644 --- a/BranchSDK/BNCRequestFactory.h +++ b/Sources/BranchSDK/Private/BNCRequestFactory.h @@ -23,8 +23,8 @@ NS_ASSUME_NONNULL_BEGIN - (instancetype)initWithBranchKey:(NSString *)key NS_DESIGNATED_INITIALIZER; - (instancetype)init NS_UNAVAILABLE; -- (NSDictionary *)dataForInstall; -- (NSDictionary *)dataForOpen; +- (NSDictionary *)dataForInstallWithURLString:(nullable NSString *)urlString; +- (NSDictionary *)dataForOpenWithURLString:(nullable NSString *)urlString; // Event data is passed in - (NSDictionary *)dataForEventWithEventDictionary:(NSMutableDictionary *)dictionary; diff --git a/BranchSDK/BNCSKAdNetwork.h b/Sources/BranchSDK/Private/BNCSKAdNetwork.h similarity index 100% rename from BranchSDK/BNCSKAdNetwork.h rename to Sources/BranchSDK/Private/BNCSKAdNetwork.h diff --git a/BranchSDK/BNCServerAPI.h b/Sources/BranchSDK/Private/BNCServerAPI.h similarity index 92% rename from BranchSDK/BNCServerAPI.h rename to Sources/BranchSDK/Private/BNCServerAPI.h index 6fc218e65..c44c80577 100644 --- a/BranchSDK/BNCServerAPI.h +++ b/Sources/BranchSDK/Private/BNCServerAPI.h @@ -33,6 +33,8 @@ NS_ASSUME_NONNULL_BEGIN // Used to enable unit tests without regard for ATT authorization status @property (nonatomic, assign, readwrite) BOOL automaticallyEnableTrackingDomain; +@property (nonatomic, copy, readwrite, nullable) NSString *customAPIURL; + @end NS_ASSUME_NONNULL_END diff --git a/BranchSDK/BNCSpotlightService.h b/Sources/BranchSDK/Private/BNCSpotlightService.h similarity index 98% rename from BranchSDK/BNCSpotlightService.h rename to Sources/BranchSDK/Private/BNCSpotlightService.h index be3cac351..17180eef6 100644 --- a/BranchSDK/BNCSpotlightService.h +++ b/Sources/BranchSDK/Private/BNCSpotlightService.h @@ -6,6 +6,8 @@ // Copyright © 2017 Branch Metrics. All rights reserved. // +#if !TARGET_OS_TV + #if __has_feature(modules) @import Foundation; #else @@ -36,3 +38,4 @@ - (void)removeAllBranchSearchableItemsWithCallback:(void (^_Nullable)(NSError * _Nullable error))completion; @end +#endif diff --git a/BranchSDK/BNCSystemObserver.h b/Sources/BranchSDK/Private/BNCSystemObserver.h similarity index 100% rename from BranchSDK/BNCSystemObserver.h rename to Sources/BranchSDK/Private/BNCSystemObserver.h diff --git a/BranchSDK/BNCURLFilter.h b/Sources/BranchSDK/Private/BNCURLFilter.h similarity index 55% rename from BranchSDK/BNCURLFilter.h rename to Sources/BranchSDK/Private/BNCURLFilter.h index 17850ea7d..97bd2c1ad 100644 --- a/BranchSDK/BNCURLFilter.h +++ b/Sources/BranchSDK/Private/BNCURLFilter.h @@ -7,35 +7,38 @@ @date February 14, 2018 @copyright Copyright © 2018 Branch. All rights reserved. */ - -#if __has_feature(modules) -@import Foundation; -#else #import -#endif + +NS_ASSUME_NONNULL_BEGIN @interface BNCURLFilter : NSObject /** @brief Checks if a given URL should be ignored. - + @param url The URL to be checked. @return Returns true if the provided URL should be ignored. -*/ -- (BOOL) shouldIgnoreURL:(NSURL*_Nullable)url; + */ +- (BOOL)shouldIgnoreURL:(NSURL *)url; /** @brief Returns the pattern that matches a URL, if any. - + @param url The URL to be checked. @return Returns the pattern matching the URL or `nil` if no patterns match. -*/ -- (NSString*_Nullable) patternMatchingURL:(NSURL*_Nullable)url; + */ +- (nullable NSString *)patternMatchingURL:(NSURL *)url; + +// Sets a list of ignored URL regex patterns +// Used for custom URL filtering and testing +- (void)useCustomPatternList:(NSArray *)patternList; -/// Refreshes the list of ignored URLs from the server. -- (void) updatePatternListWithCompletion:(void (^_Nullable) (NSError*_Nullable error, NSArray*_Nullable list))completion; +// Loads the saved list of ignored URL regex patterns +- (void)useSavedPatternList; + +// Refreshes the list of ignored URL regex patterns from the server +- (void)updatePatternListFromServerWithCompletion:(void (^_Nullable) (void))completion; -/// Is YES if the listed has already been updated from the server. -@property (assign, readonly, nonatomic) BOOL hasUpdatedPatternList; -@property (strong, nonatomic) NSArray*_Nullable patternList; @end + +NS_ASSUME_NONNULL_END diff --git a/BranchSDK/BNCUrlQueryParameter.h b/Sources/BranchSDK/Private/BNCUrlQueryParameter.h similarity index 100% rename from BranchSDK/BNCUrlQueryParameter.h rename to Sources/BranchSDK/Private/BNCUrlQueryParameter.h diff --git a/BranchSDK/BNCUserAgentCollector.h b/Sources/BranchSDK/Private/BNCUserAgentCollector.h similarity index 96% rename from BranchSDK/BNCUserAgentCollector.h rename to Sources/BranchSDK/Private/BNCUserAgentCollector.h index a4eac8eb2..434d70d5c 100644 --- a/BranchSDK/BNCUserAgentCollector.h +++ b/Sources/BranchSDK/Private/BNCUserAgentCollector.h @@ -8,6 +8,7 @@ // Copyright © 2019 Branch, Inc. All rights reserved. // +#if !TARGET_OS_TV #if __has_feature(modules) @import Foundation; #else @@ -28,3 +29,4 @@ NS_ASSUME_NONNULL_BEGIN @end NS_ASSUME_NONNULL_END +#endif diff --git a/BranchSDK/Branch+Validator.h b/Sources/BranchSDK/Private/Branch+Validator.h similarity index 100% rename from BranchSDK/Branch+Validator.h rename to Sources/BranchSDK/Private/Branch+Validator.h diff --git a/BranchSDK/BranchConstants.h b/Sources/BranchSDK/Private/BranchConstants.h similarity index 97% rename from BranchSDK/BranchConstants.h rename to Sources/BranchSDK/Private/BranchConstants.h index 013622446..da64586c4 100644 --- a/BranchSDK/BranchConstants.h +++ b/Sources/BranchSDK/Private/BranchConstants.h @@ -163,3 +163,7 @@ extern NSString * const BRANCH_REQUEST_KEY_SKAN_POSTBACK_INDEX; extern NSString * const BRANCH_REQUEST_KEY_VALUE_POSTBACK_SEQUENCE_INDEX_0; extern NSString * const BRANCH_REQUEST_KEY_VALUE_POSTBACK_SEQUENCE_INDEX_1; extern NSString * const BRANCH_REQUEST_KEY_VALUE_POSTBACK_SEQUENCE_INDEX_2; + +extern NSString * const BRANCH_REQUEST_KEY_DMA_EEA; +extern NSString * const BRANCH_REQUEST_KEY_DMA_AD_PEROSALIZATION; +extern NSString * const BRANCH_REQUEST_KEY_DMA_AD_USER_DATA; diff --git a/BranchSDK/BranchContentDiscoverer.h b/Sources/BranchSDK/Private/BranchContentDiscoverer.h similarity index 100% rename from BranchSDK/BranchContentDiscoverer.h rename to Sources/BranchSDK/Private/BranchContentDiscoverer.h diff --git a/BranchSDK/BranchContentDiscoveryManifest.h b/Sources/BranchSDK/Private/BranchContentDiscoveryManifest.h similarity index 100% rename from BranchSDK/BranchContentDiscoveryManifest.h rename to Sources/BranchSDK/Private/BranchContentDiscoveryManifest.h diff --git a/BranchSDK/BranchContentPathProperties.h b/Sources/BranchSDK/Private/BranchContentPathProperties.h similarity index 100% rename from BranchSDK/BranchContentPathProperties.h rename to Sources/BranchSDK/Private/BranchContentPathProperties.h diff --git a/BranchSDK/BranchInstallRequest.h b/Sources/BranchSDK/Private/BranchInstallRequest.h similarity index 100% rename from BranchSDK/BranchInstallRequest.h rename to Sources/BranchSDK/Private/BranchInstallRequest.h diff --git a/BranchSDK/BranchJsonConfig.h b/Sources/BranchSDK/Private/BranchJsonConfig.h similarity index 92% rename from BranchSDK/BranchJsonConfig.h rename to Sources/BranchSDK/Private/BranchJsonConfig.h index 1a6737e32..425d589d0 100644 --- a/BranchSDK/BranchJsonConfig.h +++ b/Sources/BranchSDK/Private/BranchJsonConfig.h @@ -16,6 +16,7 @@ extern NSString * _Nonnull const BranchJsonConfigUseTestInstanceOption; extern NSString * _Nonnull const BranchJsonConfigDeferInitForPluginRuntimeOption; extern NSString * _Nonnull const BranchJsonConfigEnableLogging; extern NSString * _Nonnull const BranchJsonConfigCheckPasteboardOnInstall; +extern NSString * _Nonnull const BranchJsonConfigAPIUrl; @interface BranchJsonConfig : NSObject @@ -29,6 +30,7 @@ extern NSString * _Nonnull const BranchJsonConfigCheckPasteboardOnInstall; @property (nonatomic, readonly, assign) BOOL deferInitForPluginRuntime; @property (nonatomic, readonly, assign) BOOL enableLogging; @property (nonatomic, readonly, assign) BOOL checkPasteboardOnInstall; +@property (nonatomic, readonly, nullable, copy) NSString *apiUrl; - (nullable id)objectForKey:(NSString * _Nonnull)key; - (nullable id)objectForKeyedSubscript:(NSString * _Nonnull)key; diff --git a/BranchSDK/BranchLATDRequest.h b/Sources/BranchSDK/Private/BranchLATDRequest.h similarity index 100% rename from BranchSDK/BranchLATDRequest.h rename to Sources/BranchSDK/Private/BranchLATDRequest.h diff --git a/BranchSDK/BranchOpenRequest.h b/Sources/BranchSDK/Private/BranchOpenRequest.h similarity index 83% rename from BranchSDK/BranchOpenRequest.h rename to Sources/BranchSDK/Private/BranchOpenRequest.h index 316ae3d42..5e347a178 100644 --- a/BranchSDK/BranchOpenRequest.h +++ b/Sources/BranchSDK/Private/BranchOpenRequest.h @@ -11,6 +11,9 @@ @interface BranchOpenRequest : BNCServerRequest +// URL that triggered this install or open event +@property (nonatomic, copy, readwrite) NSString *urlString; + @property (nonatomic, copy) callbackWithStatus callback; + (void) waitForOpenResponseLock; diff --git a/BranchSDK/BranchShortUrlRequest.h b/Sources/BranchSDK/Private/BranchShortUrlRequest.h similarity index 100% rename from BranchSDK/BranchShortUrlRequest.h rename to Sources/BranchSDK/Private/BranchShortUrlRequest.h diff --git a/BranchSDK/BranchShortUrlSyncRequest.h b/Sources/BranchSDK/Private/BranchShortUrlSyncRequest.h similarity index 100% rename from BranchSDK/BranchShortUrlSyncRequest.h rename to Sources/BranchSDK/Private/BranchShortUrlSyncRequest.h diff --git a/BranchSDK/BranchSpotlightUrlRequest.h b/Sources/BranchSDK/Private/BranchSpotlightUrlRequest.h similarity index 100% rename from BranchSDK/BranchSpotlightUrlRequest.h rename to Sources/BranchSDK/Private/BranchSpotlightUrlRequest.h diff --git a/BranchSDK/NSError+Branch.h b/Sources/BranchSDK/Private/NSError+Branch.h similarity index 93% rename from BranchSDK/NSError+Branch.h rename to Sources/BranchSDK/Private/NSError+Branch.h index 32f756955..07e36c969 100644 --- a/BranchSDK/NSError+Branch.h +++ b/Sources/BranchSDK/Private/NSError+Branch.h @@ -35,7 +35,6 @@ typedef NS_ENUM(NSInteger, BNCErrorCode) { BNCHighestError }; -// This should be renamed. It's actually a category and not a class. @interface NSError (Branch) + (NSString *)bncErrorDomain; @@ -44,6 +43,9 @@ typedef NS_ENUM(NSInteger, BNCErrorCode) { + (NSError *) branchErrorWithCode:(BNCErrorCode)errorCode error:(NSError *_Nullable)error; + (NSError *) branchErrorWithCode:(BNCErrorCode)errorCode localizedMessage:(NSString *_Nullable)message; +// Checks if an NSError looks like a DNS blocking error ++ (BOOL)branchDNSBlockingError:(NSError *)error; + @end NS_ASSUME_NONNULL_END diff --git a/Sources/BranchSDK/Private/NSMutableDictionary+Branch.h b/Sources/BranchSDK/Private/NSMutableDictionary+Branch.h new file mode 100644 index 000000000..963d70d42 --- /dev/null +++ b/Sources/BranchSDK/Private/NSMutableDictionary+Branch.h @@ -0,0 +1,57 @@ +// +// NSMutableDictionary+Branch.h +// Branch +// +// Created by Edward Smith on 1/11/17. +// Copyright © 2017 Branch Metrics. All rights reserved. +// + +#if __has_feature(modules) +@import Foundation; +#else +#import +#endif + +void BNCForceNSMutableDictionaryCategoryToLoad(void) __attribute__((constructor)); + +@interface NSMutableDictionary (Branch) + +// Replacement methods for BNCFieldDefinesDictionaryFromSelf + +- (void) bnc_safeSetObject:(id)anObject forKey:(id)aKey; +- (void) bnc_safeAddEntriesFromDictionary:(NSDictionary,id> *)otherDictionary; + +- (void)bnc_addString:(NSString *)string forKey:(NSString *)key; + +- (void)bnc_addDate:(NSDate *)date forKey:(NSString *)key; + +- (void)bnc_addDouble:(double)number forKey:(NSString *)key; + +- (void)bnc_addBoolean:(BOOL)boolean forKey:(NSString *)key; + +- (void)bnc_addDecimal:(NSDecimalNumber *)decimal forKey:(NSString *)key; + +- (void)bnc_addInteger:(NSInteger)integer forKey:(NSString *)key; + +- (void)bnc_addDictionary:(NSDictionary *)dict forKey:(NSString *)key; + +- (void)bnc_addStringArray:(NSArray *)array forKey:(NSString *)key; + +// Replacement methods for BNCFieldDefinesObjectFromDictionary +// These are not 1 to 1, as the previous C defines had access to the calling object + +- (int)bnc_getIntForKey:(NSString *)key; + +- (double)bnc_getDoubleForKey:(NSString *)key; + +- (NSString *)bnc_getStringForKey:(NSString *)key; + +- (NSDate *)bnc_getDateForKey:(NSString *)key; + +- (NSDecimalNumber *)bnc_getDecimalForKey:(NSString *)key; + +- (NSMutableArray *)bnc_getArrayForKey:(NSString *)key; + +- (BOOL)bnc_getBooleanForKey:(NSString *)key; + +@end diff --git a/BranchSDK/NSString+Branch.h b/Sources/BranchSDK/Private/NSString+Branch.h similarity index 91% rename from BranchSDK/NSString+Branch.h rename to Sources/BranchSDK/Private/NSString+Branch.h index 369053f67..9c5a0e085 100644 --- a/BranchSDK/NSString+Branch.h +++ b/Sources/BranchSDK/Private/NSString+Branch.h @@ -20,7 +20,7 @@ /// ignored for purposes of the compare. /// ///@return YES if string (ignoring any masked characters) is equal to the receiver. -- (BOOL) bnc_isEqualToMaskedString:(NSString*_Nullable)string; +- (BOOL)bnc_isEqualToMaskedString:(NSString * _Nullable)string; @end diff --git a/BranchSDK/UIViewController+Branch.h b/Sources/BranchSDK/Private/UIViewController+Branch.h similarity index 100% rename from BranchSDK/UIViewController+Branch.h rename to Sources/BranchSDK/Private/UIViewController+Branch.h diff --git a/BranchSDK/BNCCallbacks.h b/Sources/BranchSDK/Public/BNCCallbacks.h similarity index 100% rename from BranchSDK/BNCCallbacks.h rename to Sources/BranchSDK/Public/BNCCallbacks.h diff --git a/BranchSDK/BNCCurrency.h b/Sources/BranchSDK/Public/BNCCurrency.h similarity index 100% rename from BranchSDK/BNCCurrency.h rename to Sources/BranchSDK/Public/BNCCurrency.h diff --git a/BranchSDK/BNCInitSessionResponse.h b/Sources/BranchSDK/Public/BNCInitSessionResponse.h similarity index 100% rename from BranchSDK/BNCInitSessionResponse.h rename to Sources/BranchSDK/Public/BNCInitSessionResponse.h diff --git a/BranchSDK/BNCLinkCache.h b/Sources/BranchSDK/Public/BNCLinkCache.h similarity index 100% rename from BranchSDK/BNCLinkCache.h rename to Sources/BranchSDK/Public/BNCLinkCache.h diff --git a/BranchSDK/BNCLinkData.h b/Sources/BranchSDK/Public/BNCLinkData.h similarity index 100% rename from BranchSDK/BNCLinkData.h rename to Sources/BranchSDK/Public/BNCLinkData.h diff --git a/BranchSDK/BNCNetworkServiceProtocol.h b/Sources/BranchSDK/Public/BNCNetworkServiceProtocol.h similarity index 100% rename from BranchSDK/BNCNetworkServiceProtocol.h rename to Sources/BranchSDK/Public/BNCNetworkServiceProtocol.h diff --git a/BranchSDK/BNCPreferenceHelper.h b/Sources/BranchSDK/Public/BNCPreferenceHelper.h similarity index 94% rename from BranchSDK/BNCPreferenceHelper.h rename to Sources/BranchSDK/Public/BNCPreferenceHelper.h index 8f771db42..8c0fba2d0 100644 --- a/BranchSDK/BNCPreferenceHelper.h +++ b/Sources/BranchSDK/Public/BNCPreferenceHelper.h @@ -51,7 +51,6 @@ NSURL* /* _Nonnull */ BNCURLForBranchDirectory(void); @property (copy, nonatomic) NSString *lastSystemBuildVersion; @property (copy, nonatomic) NSString *browserUserAgentString; @property (copy, nonatomic) NSString *referringURL; -@property (copy, nonatomic) NSString *branchAPIURL; @property (assign, nonatomic) BOOL limitFacebookTracking; @property (strong, nonatomic) NSDate *previousAppBuildDate; @property (assign, nonatomic, readwrite) BOOL disableAdNetworkCallouts; @@ -73,12 +72,15 @@ NSURL* /* _Nonnull */ BNCURLForBranchDirectory(void); @property (strong, nonatomic) NSDate *firstAppLaunchTime; @property (assign, nonatomic) BOOL invokeRegisterApp; +@property (assign, nonatomic) BOOL eeaRegion; +@property (assign, nonatomic) BOOL adPersonalizationConsent; +@property (assign, nonatomic) BOOL adUserDataUsageConsent; + - (void) clearTrackingInformation; + (BNCPreferenceHelper *)sharedInstance; -- (void)setBranchAPIURL:(NSString*)branchAPIURL; -- (void)setPatternListURL:(NSString*)cdnURL; +- (void)setPatternListURL:(NSString *)url; - (void)setRequestMetadataKey:(NSString *)key value:(NSObject *)value; - (NSMutableDictionary *)requestMetadataDictionary; @@ -97,5 +99,6 @@ NSURL* /* _Nonnull */ BNCURLForBranchDirectory(void); - (NSMutableString*) sanitizedMutableBaseURL:(NSString*)baseUrl; - (void) synchronize; // Flushes preference queue to persistence. + (void) clearAll; +- (BOOL) eeaRegionInitialized; @end diff --git a/BranchSDK/BNCProductCategory.h b/Sources/BranchSDK/Public/BNCProductCategory.h similarity index 100% rename from BranchSDK/BNCProductCategory.h rename to Sources/BranchSDK/Public/BNCProductCategory.h diff --git a/BranchSDK/BNCServerInterface.h b/Sources/BranchSDK/Public/BNCServerInterface.h similarity index 100% rename from BranchSDK/BNCServerInterface.h rename to Sources/BranchSDK/Public/BNCServerInterface.h diff --git a/BranchSDK/BNCServerRequest.h b/Sources/BranchSDK/Public/BNCServerRequest.h similarity index 100% rename from BranchSDK/BNCServerRequest.h rename to Sources/BranchSDK/Public/BNCServerRequest.h diff --git a/BranchSDK/BNCServerRequestQueue.h b/Sources/BranchSDK/Public/BNCServerRequestQueue.h similarity index 87% rename from BranchSDK/BNCServerRequestQueue.h rename to Sources/BranchSDK/Public/BNCServerRequestQueue.h index 62f468426..535034112 100755 --- a/BranchSDK/BNCServerRequestQueue.h +++ b/Sources/BranchSDK/Public/BNCServerRequestQueue.h @@ -22,8 +22,8 @@ - (NSInteger)queueDepth; - (BOOL)containsInstallOrOpen; -- (BOOL)removeInstallOrOpen; -- (BranchOpenRequest *)moveInstallOrOpenToFront:(NSInteger)networkCount; + +- (BranchOpenRequest *)findExistingInstallOrOpen; - (void)persistEventually; - (void)persistImmediately; diff --git a/BranchSDK/BNCServerResponse.h b/Sources/BranchSDK/Public/BNCServerResponse.h similarity index 100% rename from BranchSDK/BNCServerResponse.h rename to Sources/BranchSDK/Public/BNCServerResponse.h diff --git a/BranchSDK/Branch.h b/Sources/BranchSDK/Public/Branch.h similarity index 96% rename from BranchSDK/Branch.h rename to Sources/BranchSDK/Public/Branch.h index 820376a8d..64afdaa30 100644 --- a/BranchSDK/Branch.h +++ b/Sources/BranchSDK/Public/Branch.h @@ -39,6 +39,7 @@ #import "BNCServerInterface.h" #import "BNCServerRequestQueue.h" +#import "BranchLogger.h" // Not used by Branch singleton public API //#import "BranchEvent.h" //#import "BranchScene.h" @@ -46,7 +47,6 @@ //#import "BranchQRCode.h" //#import "BNCConfig.h" //#import "NSError+Branch.h" -//#import "BNCLog.h" //#import "BranchConstants.h" //#import "UIViewController+Branch.h" @@ -564,9 +564,14 @@ extern NSString * __nonnull const BNCSpotlightFeature; ///-------------------- /** - Enable debug messages to NSLog. + Enable debug messages to os_log. */ -- (void)enableLogging; ++ (void)enableLogging; ++ (void)enableLoggingAtLevel:(BranchLogLevel)logLevel withCallback:(nullable BranchLogCallback)callback; + +// The new logging system is independent of the Branch singleton and can be called earlier. +- (void)enableLogging __attribute__((deprecated(("This API is deprecated. Please use the static version.")))); +- (void)enableLoggingAtLevel:(BranchLogLevel)logLevel withCallback:(nullable BranchLogCallback)callback __attribute__((deprecated(("This API is deprecated. Please use the static version.")))); /** Send requests to EU endpoints. @@ -576,13 +581,10 @@ extern NSString * __nonnull const BNCSpotlightFeature; - (void)useEUEndpoints; /** - setDebug is deprecated and all functionality has been disabled. - - If you wish to enable logging, please invoke enableLogging. - - If you wish to simulate installs, please see add a Test Device (https://help.branch.io/using-branch/docs/adding-test-devices) then reset your test device's data (https://help.branch.io/using-branch/docs/adding-test-devices#section-resetting-your-test-device-data). - */ -- (void)setDebug __attribute__((deprecated(("setDebug is replaced by enableLogging and test devices. https://help.branch.io/using-branch/docs/adding-test-devices")))); +Sets a custom base URL for all calls to the Branch API. +@param url Base URL that the Branch API will use. +*/ ++ (void)setAPIUrl:(NSString *)url; /** @brief Use the `validateSDKIntegration` method as a debugging aid to assure that you've @@ -644,7 +646,7 @@ extern NSString * __nonnull const BNCSpotlightFeature; These are ICU standard regular expressions. */ -@property (copy, nullable) NSArray/*_Nullable*/* urlPatternsToIgnore; +- (void)setUrlPatternsToIgnore:(NSArray *)urlsToIgnore; /** Checks the pasteboard (clipboard) for a Branch Link on App Install. @@ -741,30 +743,6 @@ extern NSString * __nonnull const BNCSpotlightFeature; */ - (void)disableAdNetworkCallouts:(BOOL)disableCallouts; -/** - Specify that Branch should NOT use an invisible SFSafariViewController to attempt cookie-based matching upon install. - If you call this method, we will fall back to using our pool of cookie-IDFA pairs for matching. - */ -- (void)disableCookieBasedMatching __attribute__((deprecated(("Feature removed. Did not work on iOS 11+")))); - -/** - TL;DR: If you're using a version of the Facebook SDK that prevents application:didFinishLaunchingWithOptions: from - returning YES/true when a Universal Link is clicked, you should enable this option. - - Long explanation: in application:didFinishLaunchingWithOptions: you should choose one of the following: - - 1. Always `return YES;`, and do *not* invoke `[[Branch getInstance] accountForFacebookSDKPreventingAppLaunch];` - 2. Allow the Facebook SDK to determine whether `application:didFinishLaunchingWithOptions:` returns `YES` or `NO`, - and invoke `[[Branch getInstance] accountForFacebookSDKPreventingAppLaunch];` - - The reason for this second option is that the Facebook SDK will return `NO` if a Universal Link opens the app - but that UL is not a Facebook UL. Some developers prefer not to modify - `application:didFinishLaunchingWithOptions:` to always return `YES` and should use this method instead. - */ -- (void)accountForFacebookSDKPreventingAppLaunch __attribute__((deprecated(("Please ensure application:didFinishLaunchingWithOptions: always returns YES/true instead of using this method. It will be removed in a future release.")))); - -- (void)suppressWarningLogs __attribute__((deprecated(("suppressWarningLogs is deprecated and all functionality has been disabled. If you wish to turn off all logging, please invoke BNCLogSetDisplayLevel(BNCLogLevelNone).")))); - /** For use by other Branch SDKs @@ -790,16 +768,6 @@ extern NSString * __nonnull const BNCSpotlightFeature; */ - (void)setRequestMetadataKey:(NSString *)key value:(nullable id)value; -- (void)enableDelayedInit __attribute__((deprecated(("No longer valid with new init process")))); - -- (void)disableDelayedInit __attribute__((deprecated(("No longer valid with new init process")))); - -- (nullable NSURL *)getUrlForOnboardingWithRedirectUrl:(nullable NSString *)redirectUrl __attribute__((deprecated(("Feature removed. Did not work on iOS 11+"))));; - -- (void)resumeInit __attribute__((deprecated(("Feature removed. Did not work on iOS 11+")))); - -- (void)setInstallRequestDelay:(NSInteger)installRequestDelay __attribute__((deprecated(("No longer valid with new init process")))); - /** Disables the Branch SDK from tracking the user. This is useful for GDPR privacy compliance. @@ -834,6 +802,16 @@ extern NSString * __nonnull const BNCSpotlightFeature; */ + (void) setReferrerGbraidValidityWindow:(NSTimeInterval) validityWindow; +/* + + Sets the value of parameters required by Google Conversion APIs for DMA Compliance in EEA region. + + @param eeaRegion -(BOOL) If European regulations, including the DMA, apply to this user and conversion. + @param adPersonalizationConsent - (BOOL) If End user has granted/denied ads personalization consent. + @param adUserDataUsageConsent - (BOOL) If User has granted/denied consent for 3P transmission of user level data for ads + */ ++ (void) setDMAParamsForEEA:(BOOL) eeaRegion AdPersonalizationConsent:(BOOL) adPersonalizationConsent AdUserDataUsageConsent:(BOOL) adUserDataUsageConsent; + #pragma mark - Session Item methods ///-------------------- diff --git a/BranchSDK/BranchActivityItemProvider.h b/Sources/BranchSDK/Public/BranchActivityItemProvider.h similarity index 98% rename from BranchSDK/BranchActivityItemProvider.h rename to Sources/BranchSDK/Public/BranchActivityItemProvider.h index 9a9068e15..f025779da 100644 --- a/BranchSDK/BranchActivityItemProvider.h +++ b/Sources/BranchSDK/Public/BranchActivityItemProvider.h @@ -6,6 +6,8 @@ // Copyright (c) 2015 Branch Metrics. All rights reserved. // +#if !TARGET_OS_TV + #if __has_feature(modules) @import Foundation; @import UIKit; @@ -40,3 +42,4 @@ + (NSString *)humanReadableChannelWithActivityType:(NSString *)activityString; @end +#endif diff --git a/BranchSDK/BranchCSSearchableItemAttributeSet.h b/Sources/BranchSDK/Public/BranchCSSearchableItemAttributeSet.h similarity index 97% rename from BranchSDK/BranchCSSearchableItemAttributeSet.h rename to Sources/BranchSDK/Public/BranchCSSearchableItemAttributeSet.h index 6e898f1be..65d127a18 100644 --- a/BranchSDK/BranchCSSearchableItemAttributeSet.h +++ b/Sources/BranchSDK/Public/BranchCSSearchableItemAttributeSet.h @@ -5,6 +5,7 @@ // Created by Derrick Staten on 9/8/15. // Copyright © 2015 Branch Metrics. All rights reserved. // +#if !TARGET_OS_TV #if __has_feature(modules) @import Foundation; @@ -39,3 +40,4 @@ NS_ASSUME_NONNULL_BEGIN @end NS_ASSUME_NONNULL_END +#endif diff --git a/BranchSDK/BranchDeepLinkingController.h b/Sources/BranchSDK/Public/BranchDeepLinkingController.h similarity index 100% rename from BranchSDK/BranchDeepLinkingController.h rename to Sources/BranchSDK/Public/BranchDeepLinkingController.h diff --git a/BranchSDK/BranchDelegate.h b/Sources/BranchSDK/Public/BranchDelegate.h similarity index 100% rename from BranchSDK/BranchDelegate.h rename to Sources/BranchSDK/Public/BranchDelegate.h diff --git a/BranchSDK/BranchEvent.h b/Sources/BranchSDK/Public/BranchEvent.h similarity index 100% rename from BranchSDK/BranchEvent.h rename to Sources/BranchSDK/Public/BranchEvent.h diff --git a/BranchSDK/BranchLastAttributedTouchData.h b/Sources/BranchSDK/Public/BranchLastAttributedTouchData.h similarity index 100% rename from BranchSDK/BranchLastAttributedTouchData.h rename to Sources/BranchSDK/Public/BranchLastAttributedTouchData.h diff --git a/BranchSDK/BranchLinkProperties.h b/Sources/BranchSDK/Public/BranchLinkProperties.h similarity index 100% rename from BranchSDK/BranchLinkProperties.h rename to Sources/BranchSDK/Public/BranchLinkProperties.h diff --git a/Sources/BranchSDK/Public/BranchLogger.h b/Sources/BranchSDK/Public/BranchLogger.h new file mode 100644 index 000000000..d0354b387 --- /dev/null +++ b/Sources/BranchSDK/Public/BranchLogger.h @@ -0,0 +1,47 @@ +// +// BranchLogger.h +// Branch +// +// Created by Nipun Singh on 2/1/24. +// Copyright © 2024 Branch, Inc. All rights reserved. +// + +#import + +typedef NS_ENUM(NSUInteger, BranchLogLevel) { + BranchLogLevelVerbose, // development + BranchLogLevelDebug, // validation and troubleshooting + BranchLogLevelWarning, // potential errors and attempts at recovery. SDK may be in a bad state. + BranchLogLevelError, // severe errors. SDK is probably in a bad state. +}; + +typedef void(^BranchLogCallback)(NSString * _Nonnull message, BranchLogLevel logLevel, NSError * _Nullable error); + +NS_ASSUME_NONNULL_BEGIN + +@interface BranchLogger : NSObject + +@property (nonatomic, assign) BOOL loggingEnabled; +@property (nonatomic, assign) BOOL includeCallerDetails; +@property (nonatomic, copy, nullable) BranchLogCallback logCallback; +@property (nonatomic, assign) BranchLogLevel logLevelThreshold; + ++ (instancetype _Nonnull)shared; + +// For expensive Log messages, check if it's even worth building the log message +- (BOOL)shouldLog:(BranchLogLevel)level; + +// Caller details are relatively expensive, option to disable if the cost is too high. +- (void)disableCallerDetails; + +- (void)logError:(NSString * _Nonnull)message error:(NSError * _Nullable)error; +- (void)logWarning:(NSString * _Nonnull)message error:(NSError * _Nullable)error; +- (void)logDebug:(NSString * _Nonnull)message error:(NSError * _Nullable)error; +- (void)logVerbose:(NSString * _Nonnull)message error:(NSError * _Nullable)error; + +// default Branch log format ++ (NSString *)formatMessage:(NSString *)message logLevel:(BranchLogLevel)logLevel error:(NSError *)error; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BranchSDK/BranchPasteControl.h b/Sources/BranchSDK/Public/BranchPasteControl.h similarity index 96% rename from BranchSDK/BranchPasteControl.h rename to Sources/BranchSDK/Public/BranchPasteControl.h index e02654765..2a5737f8e 100644 --- a/BranchSDK/BranchPasteControl.h +++ b/Sources/BranchSDK/Public/BranchPasteControl.h @@ -6,6 +6,7 @@ // Copyright © 2022 Branch, Inc. All rights reserved. // +#if !TARGET_OS_TV #import NS_ASSUME_NONNULL_BEGIN @@ -20,3 +21,4 @@ API_AVAILABLE(ios(16.0), macCatalyst(16.0)) @end NS_ASSUME_NONNULL_END +#endif diff --git a/BranchSDK/BranchPluginSupport.h b/Sources/BranchSDK/Public/BranchPluginSupport.h similarity index 76% rename from BranchSDK/BranchPluginSupport.h rename to Sources/BranchSDK/Public/BranchPluginSupport.h index d2f4cfe20..e344dcc8b 100644 --- a/BranchSDK/BranchPluginSupport.h +++ b/Sources/BranchSDK/Public/BranchPluginSupport.h @@ -14,12 +14,6 @@ NS_ASSUME_NONNULL_BEGIN + (BranchPluginSupport *)instance; -/** -Sets a custom base URL for all calls to the Branch API. -@param url Base URL that the Branch API will use. -*/ -+ (void)setAPIUrl:(NSString *)url; - /** Sets a custom CDN base URL. @param url Base URL for CDN endpoints. diff --git a/BranchSDK/BranchQRCode.h b/Sources/BranchSDK/Public/BranchQRCode.h similarity index 100% rename from BranchSDK/BranchQRCode.h rename to Sources/BranchSDK/Public/BranchQRCode.h diff --git a/Sources/BranchSDK/Public/BranchSDK.h b/Sources/BranchSDK/Public/BranchSDK.h new file mode 100644 index 000000000..843bcf8ae --- /dev/null +++ b/Sources/BranchSDK/Public/BranchSDK.h @@ -0,0 +1,64 @@ +// +// BranchSDK.h +// BranchSDK +// +// Created by Ernest Cho on 7/29/22. +// + +#import + +//! Project version number for BranchSDK. +FOUNDATION_EXPORT double BranchSDKVersionNumber; + +//! Project version string for BranchSDK. +FOUNDATION_EXPORT const unsigned char BranchSDKVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import +#import "Branch.h" +#import "BranchPluginSupport.h" + +#import "BranchScene.h" +#import "BranchDelegate.h" + +#import "BranchEvent.h" +#import "BranchLinkProperties.h" +#import "BranchUniversalObject.h" +#import "BranchQRCode.h" + +#import "BranchLastAttributedTouchData.h" + +#import "BranchDeepLinkingController.h" +#import "BranchLogger.h" + +#if !TARGET_OS_TV +// tvOS does not support these features +#import "BranchShareLink.h" +#import "BranchCSSearchableItemAttributeSet.h" +#import "BranchActivityItemProvider.h" + +#import "BranchPasteControl.h" +#endif + +// Used by Branch.h for debug and testing APIs. Need to move these. +#import "BNCInitSessionResponse.h" +#import "BNCCallbacks.h" +#import "BNCLinkCache.h" +#import "BNCPreferenceHelper.h" +#import "BNCServerInterface.h" +#import "BNCServerRequestQueue.h" + +// Cascading public headers... + +// BranchUniversalObject uses constants defined in BNCCurrency.h and BNCProductCategory.h +#import "BNCCurrency.h" +#import "BNCProductCategory.h" + +#import "BNCServerRequest.h" +// BNCServerRequest includes BNCServerInterface.h +//#import "BNCServerInterface.h" +// BNCServerInterface.h includes BNCServerResponse.h and BNCPreferenceHelper.h +#import "BNCServerResponse.h" +//#import "BNCPreferenceHelper.h" + +// BNCLinkCache.h uses BNCLinkData.h +#import "BNCLinkData.h" diff --git a/BranchSDK/BranchScene.h b/Sources/BranchSDK/Public/BranchScene.h similarity index 100% rename from BranchSDK/BranchScene.h rename to Sources/BranchSDK/Public/BranchScene.h diff --git a/BranchSDK/BranchShareLink.h b/Sources/BranchSDK/Public/BranchShareLink.h similarity index 98% rename from BranchSDK/BranchShareLink.h rename to Sources/BranchSDK/Public/BranchShareLink.h index 0e5070172..e121c7678 100644 --- a/BranchSDK/BranchShareLink.h +++ b/Sources/BranchSDK/Public/BranchShareLink.h @@ -6,6 +6,8 @@ // Copyright © 2017 Branch Metrics. All rights reserved. // +#if !TARGET_OS_TV + #import "BranchUniversalObject.h" #import @class BranchShareLink; @@ -125,7 +127,6 @@ Presents a UIActivityViewController that shares the Branch link. ///The delegate. See 'BranchShareLinkDelegate' above for a description. @property (nonatomic, weak) id_Nullable delegate; -@property void (^ _Nullable completion)(NSString * _Nullable activityType, BOOL completed); @property void (^ _Nullable completionError)(NSString * _Nullable activityType, BOOL completed, NSError*_Nullable error); /** @@ -138,3 +139,4 @@ Creates and attaches an LPLinkMetadata using the provided title and icon. This m - (void) addLPLinkMetadata:(NSString *_Nullable)title icon:(UIImage *_Nullable)icon API_AVAILABLE(ios(13.0), macCatalyst(13.1)); @end +#endif diff --git a/BranchSDK/BranchUniversalObject.h b/Sources/BranchSDK/Public/BranchUniversalObject.h similarity index 92% rename from BranchSDK/BranchUniversalObject.h rename to Sources/BranchSDK/Public/BranchUniversalObject.h index 75e5d8a27..de57a98eb 100644 --- a/BranchSDK/BranchUniversalObject.h +++ b/Sources/BranchSDK/Public/BranchUniversalObject.h @@ -185,34 +185,19 @@ FOUNDATION_EXPORT BranchCondition _Nonnull BranchConditionRefurbished; #if !TARGET_OS_TV - (void)showShareSheetWithShareText:(nullable NSString *)shareText - completion:(void (^ _Nullable)(NSString * _Nullable activityType, BOOL completed))completion; + completion:(void (^ _Nullable)(NSString * _Nullable activityType, BOOL completed, NSError*_Nullable error))completion; -- (void)showShareSheetWithLinkProperties:(nullable BranchLinkProperties *)linkProperties - andShareText:(nullable NSString *)shareText - fromViewController:(nullable UIViewController *)viewController - completion:(void (^ _Nullable)(NSString * _Nullable activityType, BOOL completed))completion; - -/// Returns with activityError as well - (void)showShareSheetWithLinkProperties:(nullable BranchLinkProperties *)linkProperties andShareText:(nullable NSString *)shareText fromViewController:(nullable UIViewController *)viewController completionWithError:(void (^ _Nullable)(NSString * _Nullable activityType, BOOL completed, NSError*_Nullable error))completion; -// iPad -- (void)showShareSheetWithLinkProperties:(nullable BranchLinkProperties *)linkProperties - andShareText:(nullable NSString *)shareText - fromViewController:(nullable UIViewController *)viewController - anchor:(nullable UIBarButtonItem *)anchor - completion:(void (^ _Nullable)(NSString * _Nullable activityType, BOOL completed))completion; - -// Returns with activityError as well - (void)showShareSheetWithLinkProperties:(nullable BranchLinkProperties *)linkProperties andShareText:(nullable NSString *)shareText fromViewController:(nullable UIViewController *)viewController anchor:(nullable UIBarButtonItem *)anchor completionWithError:(void (^ _Nullable)(NSString * _Nullable activityType, BOOL completed, NSError*_Nullable error))completion; - /// @name List items on Spotlight diff --git a/BranchSDK/UIViewController+Branch.m b/Sources/BranchSDK/UIViewController+Branch.m similarity index 100% rename from BranchSDK/UIViewController+Branch.m rename to Sources/BranchSDK/UIViewController+Branch.m diff --git a/Sources/Resources/BranchSDK.h b/Sources/Resources/BranchSDK.h new file mode 100644 index 000000000..650da56bf --- /dev/null +++ b/Sources/Resources/BranchSDK.h @@ -0,0 +1,64 @@ +// +// BranchSDK.h +// BranchSDK +// +// Created by Ernest Cho on 7/29/22. +// + +#import + +//! Project version number for BranchSDK. +FOUNDATION_EXPORT double BranchSDKVersionNumber; + +//! Project version string for BranchSDK. +FOUNDATION_EXPORT const unsigned char BranchSDKVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import +#import +#import + +#import +#import + +#import +#import +#import +#import + +#import + +#import +#import + +#if !TARGET_OS_TV +// tvOS does not support these features +#import +#import +#import + +#import +#endif + +// Used by Branch.h for debug and testing APIs. Need to move these. +#import +#import +#import +#import +#import +#import + +// Cascading public headers... + +// BranchUniversalObject uses constants defined in BNCCurrency.h and BNCProductCategory.h +#import +#import + +#import +// BNCServerRequest includes BNCServerInterface.h +//#import "BNCServerInterface.h" +// BNCServerInterface.h includes BNCServerResponse.h and BNCPreferenceHelper.h +#import +//#import "BNCPreferenceHelper.h" + +// BNCLinkCache.h uses BNCLinkData.h +#import diff --git a/Sources/Resources/BranchSDK.modulemap b/Sources/Resources/BranchSDK.modulemap new file mode 100644 index 000000000..5c1e8e301 --- /dev/null +++ b/Sources/Resources/BranchSDK.modulemap @@ -0,0 +1,5 @@ +framework module BranchSDK { + umbrella header "BranchSDK.h" + export * + module * { export * } +} \ No newline at end of file diff --git a/BranchSDK/PrivacyInfo.xcprivacy b/Sources/Resources/PrivacyInfo.xcprivacy similarity index 95% rename from BranchSDK/PrivacyInfo.xcprivacy rename to Sources/Resources/PrivacyInfo.xcprivacy index 1c0043760..3593fc9cd 100644 --- a/BranchSDK/PrivacyInfo.xcprivacy +++ b/Sources/Resources/PrivacyInfo.xcprivacy @@ -6,7 +6,8 @@ NSPrivacyTrackingDomains - https://api-safetrack.branch.io + api-safetrack.branch.io + api-safetrack-eu.branch.io NSPrivacyCollectedDataTypes diff --git a/fastlane/Fastfile b/fastlane/Fastfile index d7fce0fa8..6b9f7fda6 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -6,7 +6,7 @@ fastlane_version "2.69.0" lane :prepare_pods do # This helps optimize CI with caching by testing whether a pod install is necessary # from cocoapods_helper - pod_install_if_required '../Branch-TestBed' + # pod_install_if_required '../Branch-TestBed' # Can also turn on verbose output and disable repo update # pod_install_if_required '../Branch-TestBed', verbose: true, repo_update: false end @@ -19,7 +19,7 @@ lane :unit_tests do cobertura_xml: true, output_directory: "./fastlane/test_output", proj: "./Branch-TestBed/Branch-TestBed.xcodeproj", - workspace: "./Branch-TestBed/Branch-TestBed.xcworkspace", + #workspace: "./Branch-TestBed/Branch-TestBed.xcworkspace", scheme: "Branch-TestBed-CI" ) end diff --git a/fastlane/Scanfile b/fastlane/Scanfile index 83b068d38..11cd4873f 100644 --- a/fastlane/Scanfile +++ b/fastlane/Scanfile @@ -1,4 +1,4 @@ -workspace 'Branch-TestBed/Branch-TestBed.xcworkspace' +project 'Branch-TestBed/Branch-TestBed.xcodeproj' device 'iPhone 12' output_types 'junit,html' code_coverage true diff --git a/scripts/version.sh b/scripts/version.sh index e6e94ff8a..5ff89af15 100755 --- a/scripts/version.sh +++ b/scripts/version.sh @@ -30,7 +30,7 @@ Options: USAGE } -version=2.2.1 +version=3.4.3 prev_version="$version" if (( $# == 0 )); then @@ -101,13 +101,13 @@ fi if [[ $update ]]; then # Update the SDK version: - sed -i '' -e "/BNC_SDK_VERSION/ {s/\".*\"/\"$version\"/; }" ../BranchSDK/BNCConfig.m + sed -i '' -e "/BNC_SDK_VERSION/ {s/\".*\"/\"$version\"/; }" ../Sources/BranchSDK/BNCConfig.m # Update the Podspec version: sed -i '' -e "/^[[:space:]]*s\.version/ {s/\".*\"/\"$version\"/; }" ../BranchSDK.podspec # Update framework version - sed -ie 's/MARKETING_VERSION = '"$prev_version"'/MARKETING_VERSION = '"$version"'/g' ../BranchSDK.xcodeproj/project.pbxproj + sed -i '' -e 's/MARKETING_VERSION = '"$prev_version"'/MARKETING_VERSION = '"$version"'/g' ../BranchSDK.xcodeproj/project.pbxproj fi