Skip to content

Fix TestFlight DemoApp upload#70

Merged
laevandus merged 2 commits into
developfrom
fix/test-flight-upload
Jun 11, 2026
Merged

Fix TestFlight DemoApp upload#70
laevandus merged 2 commits into
developfrom
fix/test-flight-upload

Conversation

@laevandus

@laevandus laevandus commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Add the iPad-specific supported orientations required for iPad multitasking to the DemoApp plist.
  • Mark the demo app command suggestion models as Sendable so the Swift 6 DemoApp build used for verification succeeds.

Linear: https://linear.app/stream/issue/IOS-1752

Summary by CodeRabbit

  • New Features
    • Added full interface orientation support for iPad, including portrait and landscape display modes.

Declare iPad multitasking orientations in the demo app plist and unblock the Swift 6 demo build used to verify the processed bundle.
@laevandus laevandus requested a review from a team as a code owner June 11, 2026 09:34
@coderabbitai

coderabbitai Bot commented Jun 11, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@laevandus, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 51 minutes and 59 seconds. Learn how PR review limits work.

Your organization has run out of usage credits. Purchase more credits in the billing tab to continue.

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 21e00c03-861d-4e1e-8333-e22a6c48faef

📥 Commits

Reviewing files that changed from the base of the PR and between 8888bfe and 97dd4ca.

📒 Files selected for processing (1)
  • DemoApp/FeedsView/Mentions/CommandsHandler.swift
📝 Walkthrough

Walkthrough

Public types in the mentions module are updated to conform to Sendable for Swift concurrency safety. iPad interface orientation support is added to the app configuration.

Changes

Swift Concurrency and Platform Support

Layer / File(s) Summary
Mention types Swift concurrency conformance
DemoApp/FeedsView/Mentions/CommandsHandler.swift, DemoApp/FeedsView/Mentions/TypingSuggester.swift
ComposerCommand conforms to Sendable, CommandDisplayInfo conforms to @unchecked Sendable, and TypingSuggestion conforms to Sendable.
iPad interface orientation support
DemoApp/Info.plist
UISupportedInterfaceOrientations~ipad key is added with portrait, portrait upside down, and both landscape orientations.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

Poem

A rabbit hops through types with care,
Sendable now, safe everywhere,
iPad spins in landscape wide—
Mentions thread-safe, orientations unified! 🐰✨

🚥 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 'Fix TestFlight DemoApp upload' is directly related to the main objectives: fixing TestFlight upload by adding iPad orientations to Info.plist and marking models as Sendable for Swift 6 compatibility.
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 unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/test-flight-upload

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 and usage tips.


/// Model for the composer's commands.
public struct ComposerCommand {
public struct ComposerCommand: Sendable {

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Latest Xcode changes I forgot to fix in the demo app

@laevandus laevandus enabled auto-merge (squash) June 11, 2026 09:40

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
DemoApp/Info.plist (1)

42-48: ⚠️ Potential issue | 🟠 Major

Avoid blanket ATS bypass (NSAllowsArbitraryLoads=true) in DemoApp/Info.plist

  • NSAllowsArbitraryLoads=true disables App Transport Security for all domains; there are no hardcoded http:// URLs in DemoApp/ source/config (only the plist DTD doctype references).
  • If HTTP is only needed for local development, set NSAllowsArbitraryLoads to false and keep NSAllowsLocalNetworking=true, or scope exceptions via NSExceptionDomains for specific hosts.
🤖 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 `@DemoApp/Info.plist` around lines 42 - 48, The Info.plist currently enables a
blanket ATS bypass via the NSAppTransportSecurity > NSAllowsArbitraryLoads key;
change NSAllowsArbitraryLoads to false (or remove it) and retain
NSAllowsLocalNetworking as true for local dev, or instead add a scoped
NSExceptionDomains dictionary with per-host exceptions for any specific HTTP
hosts you need; update the NSAppTransportSecurity section to reflect
NSAllowsArbitraryLoads=false and/or add NSExceptionDomains entries rather than
leaving NSAllowsArbitraryLoads=true.

Source: Coding guidelines

🧹 Nitpick comments (1)
DemoApp/FeedsView/Mentions/CommandsHandler.swift (1)

127-143: 💤 Low value

@unchecked Sendable with UIImage is acceptable here but carries concurrency risk.

CommandDisplayInfo uses @unchecked Sendable because UIImage does not conform to Sendable. While UIImage is generally safe for read-only access across threads (all properties are let), it's not fully thread-safe for all operations.

This is acceptable for a demo app with likely static icon assets, but be aware that if UIImage instances are accessed concurrently for certain operations, undefined behavior could occur.

🤖 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 `@DemoApp/FeedsView/Mentions/CommandsHandler.swift` around lines 127 - 143,
CommandDisplayInfo currently marks the struct as `@unchecked` Sendable while
storing a UIImage (icon), which is not Sendable; change the API to use a
thread-safe representation instead of UIImage (e.g., store an asset identifier
String like iconName or raw image Data/CGImage that is Sendable) and remove
`@unchecked` Sendable; update the stored property (icon -> iconName or iconData),
the initializer signature in CommandDisplayInfo, and any call sites that
construct CommandDisplayInfo to pass the new thread-safe representation and
resolve UIImage usage at the UI boundary only.
🤖 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.

Outside diff comments:
In `@DemoApp/Info.plist`:
- Around line 42-48: The Info.plist currently enables a blanket ATS bypass via
the NSAppTransportSecurity > NSAllowsArbitraryLoads key; change
NSAllowsArbitraryLoads to false (or remove it) and retain
NSAllowsLocalNetworking as true for local dev, or instead add a scoped
NSExceptionDomains dictionary with per-host exceptions for any specific HTTP
hosts you need; update the NSAppTransportSecurity section to reflect
NSAllowsArbitraryLoads=false and/or add NSExceptionDomains entries rather than
leaving NSAllowsArbitraryLoads=true.

---

Nitpick comments:
In `@DemoApp/FeedsView/Mentions/CommandsHandler.swift`:
- Around line 127-143: CommandDisplayInfo currently marks the struct as
`@unchecked` Sendable while storing a UIImage (icon), which is not Sendable;
change the API to use a thread-safe representation instead of UIImage (e.g.,
store an asset identifier String like iconName or raw image Data/CGImage that is
Sendable) and remove `@unchecked` Sendable; update the stored property (icon ->
iconName or iconData), the initializer signature in CommandDisplayInfo, and any
call sites that construct CommandDisplayInfo to pass the new thread-safe
representation and resolve UIImage usage at the UI boundary only.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 8f39ba5f-b33d-411f-a4bd-033e15481709

📥 Commits

Reviewing files that changed from the base of the PR and between fd8f0ef and 8888bfe.

📒 Files selected for processing (3)
  • DemoApp/FeedsView/Mentions/CommandsHandler.swift
  • DemoApp/FeedsView/Mentions/TypingSuggester.swift
  • DemoApp/Info.plist

@laevandus laevandus merged commit 13cda8a into develop Jun 11, 2026
10 checks passed
@laevandus laevandus deleted the fix/test-flight-upload branch June 11, 2026 10:01
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.

2 participants