Skip to content

feat(swift-example-app): rebrand to "Dash Developer Pro" for TestFlight#3952

Open
llbartekll wants to merge 4 commits into
v3.1-devfrom
feat/dash-developer-pro-branding
Open

feat(swift-example-app): rebrand to "Dash Developer Pro" for TestFlight#3952
llbartekll wants to merge 4 commits into
v3.1-devfrom
feat/dash-developer-pro-branding

Conversation

@llbartekll

@llbartekll llbartekll commented Jun 22, 2026

Copy link
Copy Markdown
Contributor

Issue being fixed or feature implemented

We want to ship the iOS example app to TestFlight as a standalone product, Dash Developer Pro, rather than the internal-looking "SwiftExampleApp". This requires a user-visible app name and a distinct bundle identifier so Xcode can register it as its own app record in App Store Connect.

What was done?

  • Added CFBundleDisplayName = "Dash Developer Pro" to Info.plist so the home-screen / TestFlight name is the product name (previously the label fell through to PRODUCT_NAME → "SwiftExampleApp").
  • Changed the app target's PRODUCT_BUNDLE_IDENTIFIER from org.dashfoundation.SwiftExampleApp to org.dashfoundation.DashDeveloperPro (both Debug and Release configurations). Test target bundle identifiers are intentionally left unchanged — they reference the host app by product name, not bundle ID, so tests still build.
  • Updated local dev tooling that hardcoded the old bundle ID so it keeps working after the rename:
    • packages/swift-sdk/get_logs.sh (default BUNDLE_ID + usage comment) — used via simctl get_app_container, straight swap.
    • .claude/skills/simulator-control/SKILL.md setup BUNDLE. The install/launch block previously derived the .app filename from the bundle ID (${BUNDLE##*.}.app); since only the bundle ID changed (not PRODUCT_NAME), it now finds the artifact by the literal SwiftExampleApp.app and launches by the new bundle ID.

Note: this is scoped to branding only. ATS hardening (the NSAllowsArbitraryLoads flag, tracked in #3714) and network-default cleanup are out of scope here — fine for TestFlight, but should be addressed before any public App Store review.

How Has This Been Tested?

  • Archived the app in Xcode for a physical device and confirmed the App Store Connect upload dialog picks up bundle id org.dashfoundation.DashDeveloperPro.
  • Verified the rebuilt DashSDKFFI.xcframework includes the ios-arm64 device slice so the archive links (previously simulator-only).
  • Verified the uploaded archive embeds the app icon (CFBundleIconName = AppIcon, compiled rendition present in Assets.car).
  • Confirmed no remaining references to the old bundle id across *.sh / *.md / *.swift / *.yml / *.json.

Breaking Changes

None for the SDK. The bundle identifier change means the app installs as a new app rather than upgrading an existing org.dashfoundation.SwiftExampleApp install.

Checklist:

  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have added or updated relevant unit/integration/functional/e2e tests
  • I have added "!" to the title and described breaking changes in the corresponding section if my code contains any
  • I have made corresponding changes to the documentation if needed

For repository code-owners and collaborators only

  • I have assigned this pull request to a milestone

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Chores
    • Updated the Swift example application branding, renaming the display name to Dash Developer Pro and refreshing associated identifiers throughout the project.

@coderabbitai

coderabbitai Bot commented Jun 22, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

The Swift example app is renamed from "SwiftExampleApp" to "Dash Developer Pro". The PRODUCT_BUNDLE_IDENTIFIER is updated from org.dashfoundation.SwiftExampleApp to org.dashfoundation.DashDeveloperPro in both Debug and Release build configurations. The CFBundleDisplayName is set to Dash Developer Pro in Info.plist. Supporting automation scripts are updated to reference the new bundle identifier.

Changes

Swift Example App Rename

Layer / File(s) Summary
Build configuration and app identity
packages/swift-sdk/SwiftExampleApp/SwiftExampleApp.xcodeproj/project.pbxproj, packages/swift-sdk/SwiftExampleApp/Info.plist
PRODUCT_BUNDLE_IDENTIFIER changed to org.dashfoundation.DashDeveloperPro in Debug and Release configurations; CFBundleDisplayName key added with value Dash Developer Pro.
Automation and script updates
.claude/skills/simulator-control/SKILL.md, packages/swift-sdk/get_logs.sh
Simulator control skill and get_logs.sh script updated to use the new bundle identifier org.dashfoundation.DashDeveloperPro; simulator control skill also changes .app discovery to locate SwiftExampleApp.app by product name from DerivedData instead of deriving the path from bundle id.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

Poem

🐇 A bundle once plain, now with flair it does shine,
DashDeveloperPro — what a name so fine!
Two configs, one plist, and scripts all align,
The automation tools now sing the same line.
Hop hop, little app, wear your new name with pride! 🌟

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'feat(swift-example-app): rebrand to "Dash Developer Pro" for TestFlight' accurately and concisely describes the primary change: rebranding the Swift example app with a new display name and bundle identifier to enable TestFlight deployment.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/dash-developer-pro-branding

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@packages/swift-sdk/SwiftExampleApp/SwiftExampleApp.xcodeproj/project.pbxproj`:
- Line 447: Two downstream scripts still reference the old bundle identifier
org.dashfoundation.SwiftExampleApp which will break with the new bundle
identifier org.dashfoundation.DashDeveloperPro. Update the SKILL.md file in
.claude/skills/simulator-control/ by replacing the old bundle ID in all
simulator control commands (look for BUNDLE=org.dashfoundation.SwiftExampleApp).
Also update packages/swift-sdk/get_logs.sh by replacing the old bundle ID with
the new one on lines 26 and 31 where the bundle identifier is used as the
default for log collection.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 599430b9-4f2e-44c5-946a-e33e281ab3e7

📥 Commits

Reviewing files that changed from the base of the PR and between 9a93387 and 58a45eb.

📒 Files selected for processing (2)
  • packages/swift-sdk/SwiftExampleApp/Info.plist
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp.xcodeproj/project.pbxproj

ZocoLini
ZocoLini previously approved these changes Jun 22, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.claude/skills/simulator-control/SKILL.md:
- Around line 281-285: The find command in the APP variable assignment uses head
-1 which non-deterministically selects the first result rather than the most
recent one, and there is no guard to detect when no app is found. Replace the
piping to head -1 with a method to select the most recently modified file (such
as sorting by modification time in descending order and taking the first
result), and add a validation check immediately after the APP assignment that
exits with an error message if the APP variable is empty.

In `@packages/swift-sdk/SwiftExampleApp/Info.plist`:
- Around line 27-35: The ITSAppUsesNonExemptEncryption key in Info.plist is
currently set to false, but SwiftExampleApp actively implements non-exempt
encryption through Orchard zero-knowledge proof operations in functions like
shieldedIdentityCreateFromPool, shieldedShield, shieldedFundFromAssetLock,
seedShieldedPoolNotes, and startShieldedSync. Change the
ITSAppUsesNonExemptEncryption value from false to true to correctly declare the
app's use of non-exempt encryption, and ensure the required export-compliance
documentation is filed with Apple before submission.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: c631f25d-668d-4721-a7d8-708ddda2ecd2

📥 Commits

Reviewing files that changed from the base of the PR and between 58a45eb and fd6b3dc.

📒 Files selected for processing (3)
  • .claude/skills/simulator-control/SKILL.md
  • packages/swift-sdk/SwiftExampleApp/Info.plist
  • packages/swift-sdk/get_logs.sh

Comment thread .claude/skills/simulator-control/SKILL.md
Comment thread packages/swift-sdk/SwiftExampleApp/Info.plist Outdated
@llbartekll llbartekll force-pushed the feat/dash-developer-pro-branding branch from fd6b3dc to 0e5704e Compare June 22, 2026 17:51
@thepastaclaw

thepastaclaw commented Jun 23, 2026

Copy link
Copy Markdown
Collaborator

✅ Review complete (commit dc3ae6e)

ZocoLini
ZocoLini previously approved these changes Jun 23, 2026
llbartekll and others added 2 commits June 23, 2026 02:50
Set the home-screen display name (CFBundleDisplayName) to "Dash
Developer Pro" and change the app bundle identifier to
org.dashfoundation.DashDeveloperPro so the example app can ship as a
standalone product on TestFlight / App Store Connect. Test target
bundle identifiers are left unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Update the simulator-control skill and get_logs.sh to use
org.dashfoundation.DashDeveloperPro so simctl launch/terminate and log
collection keep working after the rebrand. The artifact-finding step
still looks for SwiftExampleApp.app since PRODUCT_NAME is unchanged —
only the bundle identifier moved.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@ZocoLini ZocoLini force-pushed the feat/dash-developer-pro-branding branch from b0ef04d to 18a8fd6 Compare June 23, 2026 09:50
@llbartekll llbartekll force-pushed the feat/dash-developer-pro-branding branch from 18a8fd6 to 0811ee9 Compare June 23, 2026 09:55
Restore .claude/skills/simulator-control/SKILL.md to its base state so
it no longer appears in this PR's diff. Keep the PR scoped to the app
(Info.plist, project.pbxproj) plus get_logs.sh. The skill still
references the old bundle id and can be updated separately if needed.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
ZocoLini
ZocoLini previously approved these changes Jun 23, 2026
…pdate

Bring back the .claude/skills/simulator-control/SKILL.md change so the
skill points at org.dashfoundation.DashDeveloperPro (the install block
still finds SwiftExampleApp.app since PRODUCT_NAME is unchanged). Keeps
the skill working after the rename.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

♻️ Duplicate comments (1)
.claude/skills/simulator-control/SKILL.md (1)

281-284: 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

Restore deterministic app selection.

head -1 can still pick an older SwiftExampleApp.app, so this step may install stale bits or fail unpredictably when multiple DerivedData builds exist. Please keep the newest-artifact selection and empty-match guard from the earlier fix.

🔧 Suggested fix
 BUNDLE=org.dashfoundation.DashDeveloperPro
 # The .app on disk is named after PRODUCT_NAME (still "SwiftExampleApp"), which
-# differs from the bundle id — find by the product name, launch by the bundle id.
-APP=$(find ~/Library/Developer/Xcode/DerivedData -name "SwiftExampleApp.app" -path "*Debug-iphonesimulator*" -not -path "*Index.noindex*" 2>/dev/null | head -1)
+# differs from the bundle id — find by the product name, then pick the newest build artifact.
+APP=$(find ~/Library/Developer/Xcode/DerivedData -name "SwiftExampleApp.app" -path "*Debug-iphonesimulator*" -not -path "*Index.noindex*" -print0 2>/dev/null \
+  | xargs -0 ls -td 2>/dev/null | head -1)
+[ -z "$APP" ] && { echo "SwiftExampleApp.app not found in DerivedData"; exit 1; }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/skills/simulator-control/SKILL.md around lines 281 - 284, The APP
variable assignment in the find command uses head -1 which picks the first
result alphabetically rather than the most recent build, causing stale artifacts
to be selected. Replace the head -1 pipe with logic that sorts the results by
modification time (newest first) and selects the most recent
SwiftExampleApp.app. Additionally, add an empty-match guard to handle the case
where no matching app is found in DerivedData, ensuring the script fails
gracefully instead of proceeding with an empty or undefined APP variable.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Duplicate comments:
In @.claude/skills/simulator-control/SKILL.md:
- Around line 281-284: The APP variable assignment in the find command uses head
-1 which picks the first result alphabetically rather than the most recent
build, causing stale artifacts to be selected. Replace the head -1 pipe with
logic that sorts the results by modification time (newest first) and selects the
most recent SwiftExampleApp.app. Additionally, add an empty-match guard to
handle the case where no matching app is found in DerivedData, ensuring the
script fails gracefully instead of proceeding with an empty or undefined APP
variable.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: ce61817d-168d-498d-82d7-70a7dc414422

📥 Commits

Reviewing files that changed from the base of the PR and between fd6b3dc and 0811ee9.

📒 Files selected for processing (4)
  • .claude/skills/simulator-control/SKILL.md
  • packages/swift-sdk/SwiftExampleApp/Info.plist
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp.xcodeproj/project.pbxproj
  • packages/swift-sdk/get_logs.sh
✅ Files skipped from review due to trivial changes (2)
  • packages/swift-sdk/get_logs.sh
  • packages/swift-sdk/SwiftExampleApp/Info.plist
🚧 Files skipped from review as they are similar to previous changes (1)
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp.xcodeproj/project.pbxproj

@thepastaclaw thepastaclaw left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

Branding-only PR rebranding SwiftExampleApp to Dash Developer Pro. Both agents converge on one valid finding: a developer tooling script (Scripts/swift_sdk_internal_logs) was missed by the author's extension-scoped search and still references the old bundle id, causing it to silently no-op after this rename — the exact failure mode the PR fixed in get_logs.sh and the simulator-control SKILL.

🔴 1 blocking

1 additional finding(s) omitted (not in diff).

🤖 Prompt for all review comments with AI agents
These findings are from an automated code review. Verify each finding against the current code and only fix it if needed.

In `packages/swift-sdk/SwiftExampleApp/Scripts/swift_sdk_internal_logs`:
- [BLOCKING] packages/swift-sdk/SwiftExampleApp/Scripts/swift_sdk_internal_logs:41: swift_sdk_internal_logs still writes to the old bundle id
  The app target now builds as `org.dashfoundation.DashDeveloperPro`, but this helper still sets `bundle_id="org.dashfoundation.SwiftExampleApp"` and runs `xcrun simctl spawn ... defaults write "$bundle_id" SwiftSDKLogLevel ...`. Since `LoggingPreferences.loadPreset()` reads from `UserDefaults.standard` inside the rebranded app, the script will report success while the relaunched app continues reading the new bundle's defaults and ignores the override — the same failure mode the PR fixed for `get_logs.sh` and the simulator-control SKILL. This file has no extension and was missed by the author's `*.sh`/`*.md`/`*.swift`/`*.yml`/`*.json` search, which is why it slipped through. Verified by grep: this is the only remaining non-test reference to the old bundle id in the tree.

@thepastaclaw thepastaclaw left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

Small rebranding PR. Carried-forward prior finding is STILL VALID at dc3ae6e and both new agents converged on the same issue: the dev helper swift_sdk_internal_logs still hardcodes the old bundle id, so SwiftSDKLogLevel writes will silently target an unused defaults domain after the rename. No other in-scope issues found.

🟡 1 suggestion(s)

1 additional finding(s) omitted (not in diff).

🤖 Prompt for all review comments with AI agents
These findings are from an automated code review. Verify each finding against the current code and only fix it if needed.

In `packages/swift-sdk/SwiftExampleApp/Scripts/swift_sdk_internal_logs`:
- [SUGGESTION] packages/swift-sdk/SwiftExampleApp/Scripts/swift_sdk_internal_logs:41: Dev log-level toggle still writes to the old bundle id
  After this PR the installed app's UserDefaults domain becomes `org.dashfoundation.DashDeveloperPro`, but this helper still sets `bundle_id="org.dashfoundation.SwiftExampleApp"` and writes `SwiftSDKLogLevel` to that domain via `simctl spawn ... defaults write`. `LoggingPreferences.loadPreset()` reads `UserDefaults.standard` from inside the rebranded app, so the script will report success while the high/medium/low toggle silently no-ops. The PR description claims no remaining references to the old bundle id across `*.sh`/`*.md`/`*.swift`/`*.yml`/`*.json`; this file has no extension, which likely hid it from the suffix-based grep. The sibling `get_logs.sh` was updated in the same PR — this script appears to have been missed.

@thepastaclaw thepastaclaw left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

Correction to the prior dc3ae6e review: the carried-forward prior finding is STILL VALID and remains blocking, as it was in the b0ef04d review. The SwiftExampleApp target is rebranded to org.dashfoundation.DashDeveloperPro, but swift_sdk_internal_logs still writes SwiftSDKLogLevel to org.dashfoundation.SwiftExampleApp, so the helper silently configures the wrong defaults domain. No new latest-delta findings were found beyond this carried-forward blocker.

🔴 1 blocking

1 additional finding(s) omitted (not in diff).

🤖 Prompt for all review comments with AI agents
These findings are from an automated code review. Verify each finding against the current code and only fix it if needed.

In `packages/swift-sdk/SwiftExampleApp/Scripts/swift_sdk_internal_logs`:
- [BLOCKING] packages/swift-sdk/SwiftExampleApp/Scripts/swift_sdk_internal_logs:41-45: swift_sdk_internal_logs still writes to the old bundle id
  The carried-forward b0ef04d2 finding is STILL VALID on dc3ae6e9. The app target now builds as `org.dashfoundation.DashDeveloperPro`, but this helper still sets `bundle_id="org.dashfoundation.SwiftExampleApp"` and writes `SwiftSDKLogLevel` to that defaults domain via `simctl spawn ... defaults write`. `LoggingPreferences.loadPreset()` reads `UserDefaults.standard` from inside the rebranded app, so the script reports success while the relaunched app keeps reading the new bundle defaults and ignores the override. This is the same failure mode the PR fixed for `get_logs.sh`, and this no-extension helper was missed by the suffix-based grep described in the PR body.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants