Skip to content

Conversation

@graycreate
Copy link
Member

Summary

  • Fixed the Missing Compliance issue in TestFlight that was blocking automatic distribution
  • Configured the release pipeline to automatically bypass export compliance checks
  • Ensured builds can be automatically published to internal TestFlight track

Changes Made

  1. Info.plist: Added ITSAppUsesNonExemptEncryption=false to declare the app only uses exempt encryption
  2. Fastlane Configuration:
    • Added comprehensive export compliance parameters to upload_to_testflight
    • Enhanced build_ipa with export compliance in IPA metadata
    • Updated distribute_beta lane with compliance flags
    • Added explicit parameters for export compliance exemption

Why This Works

V2er only uses standard HTTPS/SSL/TLS encryption for API communications, which is specifically exempt from export compliance documentation requirements. By declaring this in both the app bundle and during the upload process, TestFlight will:

  • Skip the manual compliance questionnaire
  • Automatically process builds without compliance review
  • Allow immediate distribution to internal testers

Testing

After merging this PR:

  1. The next release triggered by version bump will automatically upload to TestFlight
  2. No manual intervention will be required for export compliance
  3. Internal testers will receive the build immediately after processing

Note

When asked in App Store Connect about encryption, always select: "None of the algorithms mentioned above" since we only use standard exempt encryption.

Closes the Missing Compliance issue in TestFlight.

…ce issue

Added ITSAppUsesNonExemptEncryption=false to Info.plist to declare that the app only uses exempt encryption (HTTPS/SSL/TLS for network connections).

This resolves the Missing Compliance warning in TestFlight without requiring export compliance documentation.
…ases

- Added ITSAppUsesNonExemptEncryption=false to Info.plist
- Enhanced Fastlane configuration with explicit export compliance parameters
- Added export compliance flags to build_ipa, distribute_beta, and beta lanes
- Configured IPA export options to include compliance metadata

This ensures the release pipeline can automatically publish to TestFlight internal track without manual export compliance intervention. The app only uses standard HTTPS/SSL/TLS encryption which is exempt from export compliance documentation.
Copilot AI review requested due to automatic review settings October 18, 2025 12:25
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull Request Overview

Automates export compliance handling to unblock automatic TestFlight distribution by declaring exempt encryption in both build metadata and upload lanes.

  • Adds ITSAppUsesNonExemptEncryption=false to Info.plist.
  • Extends Fastlane lanes with multiple export compliance flags for build and distribution.
  • Updates TestFlight upload and distribution parameters to bypass manual compliance review.

Reviewed Changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 10 comments.

File Description
fastlane/Fastfile Adds multiple export compliance parameters to build_app and upload/distribution lanes.
V2er/Info.plist Declares non-use of non-exempt encryption via ITSAppUsesNonExemptEncryption key.

},
teamID: ENV["TEAM_ID"]
teamID: ENV["TEAM_ID"],
ITSAppUsesNonExemptEncryption: false, # Add export compliance to IPA
Copy link

Copilot AI Oct 18, 2025

Choose a reason for hiding this comment

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

ITSAppUsesNonExemptEncryption is an Info.plist key and not a valid export option for the export_options hash; it will be ignored here. Remove it from export_options (line 46) and rely on the Info.plist addition instead.

Suggested change
ITSAppUsesNonExemptEncryption: false, # Add export compliance to IPA

Copilot uses AI. Check for mistakes.
skip_submission: true, # Skip beta review for internal testing
distribute_external: false, # Internal testing only (not public beta)
wait_for_uploaded_build: true,
groups: ["Github Actions Internal"], # Auto-distribute to Github Actions Internal group
Copy link

Copilot AI Oct 18, 2025

Choose a reason for hiding this comment

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

Correct capitalization of 'Github' to 'GitHub' to match the proper brand name.

Copilot uses AI. Check for mistakes.
export_compliance_is_exempt: true # Exempt from export compliance
)

UI.success("✅ Successfully distributed build to internal testers (Github Actions Internal)!")
Copy link

Copilot AI Oct 18, 2025

Choose a reason for hiding this comment

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

Correct capitalization of 'Github' to 'GitHub' to match the proper brand name.

Copilot uses AI. Check for mistakes.
groups: ["Github Actions Internal"], # Auto-distribute to Github Actions Internal group
notify_external_testers: false, # No external notifications
uses_non_exempt_encryption: false # Mark as no encryption to skip export compliance review
uses_non_exempt_encryption: false, # Mark as no encryption to skip export compliance review
Copy link

Copilot AI Oct 18, 2025

Choose a reason for hiding this comment

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

The comment says 'no encryption' but the app uses standard TLS (exempt encryption). Update the comment to 'Only exempt (standard TLS) encryption used' for accuracy.

Suggested change
uses_non_exempt_encryption: false, # Mark as no encryption to skip export compliance review
uses_non_exempt_encryption: false, # Only exempt (standard TLS) encryption used

Copilot uses AI. Check for mistakes.
Comment on lines +92 to +94
uses_non_exempt_encryption: false, # Mark as no encryption to skip export compliance review
export_compliance_uses_encryption: false, # Explicitly state no encryption
export_compliance_is_exempt: true # Exempt from export compliance
Copy link

Copilot AI Oct 18, 2025

Choose a reason for hiding this comment

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

[nitpick] Export compliance flags are duplicated across lanes; centralize them (e.g., helper method or shared hash) to reduce drift and simplify updates. Additionally, consider only the minimal necessary keys (uses_non_exempt_encryption plus, if applicable, export_compliance_is_exempt) to avoid noise.

Copilot uses AI. Check for mistakes.
Comment on lines +189 to +196
uses_non_exempt_encryption: false, # Mark as no encryption to skip export compliance review
export_compliance_uses_encryption: false, # Explicitly state no encryption for export compliance
export_compliance_platform: 'ios', # Specify platform for export compliance
export_compliance_compliance_required: false, # No additional compliance documentation required
export_compliance_app_type: nil, # Not applicable since we don't use encryption
export_compliance_encryption_updated: false, # No encryption changes
export_compliance_contains_third_party_cryptography: false, # No third-party cryptography
export_compliance_is_exempt: true # Exempt from export compliance
Copy link

Copilot AI Oct 18, 2025

Choose a reason for hiding this comment

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

[nitpick] Export compliance flags are duplicated across lanes; centralize them (e.g., helper method or shared hash) to reduce drift and simplify updates. Additionally, consider only the minimal necessary keys (uses_non_exempt_encryption plus, if applicable, export_compliance_is_exempt) to avoid noise.

Copilot uses AI. Check for mistakes.
uses_non_exempt_encryption: false # Mark as no encryption to skip export compliance review
uses_non_exempt_encryption: false, # Mark as no encryption to skip export compliance review
export_compliance_uses_encryption: false, # Explicitly state no encryption
export_compliance_is_exempt: true # Exempt from export compliance
Copy link

Copilot AI Oct 18, 2025

Choose a reason for hiding this comment

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

[nitpick] Setting export_compliance_is_exempt true while also declaring uses_non_exempt_encryption false and export_compliance_uses_encryption false is redundant; exemption only matters if encryption is used but exempt. Remove export_compliance_is_exempt when uses_encryption is false to prevent contradictory metadata.

Suggested change
export_compliance_is_exempt: true # Exempt from export compliance

Copilot uses AI. Check for mistakes.
distribute_only: false, # Upload and distribute in one action
changelog: changelog_content, # Use changelog from CHANGELOG.md
uses_non_exempt_encryption: false # Mark as no encryption to skip export compliance review
uses_non_exempt_encryption: false, # Mark as no encryption to skip export compliance review
Copy link

Copilot AI Oct 18, 2025

Choose a reason for hiding this comment

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

[nitpick] Setting export_compliance_is_exempt true while also declaring uses_non_exempt_encryption false and export_compliance_uses_encryption false is redundant; exemption only matters if encryption is used but exempt. Remove export_compliance_is_exempt when uses_encryption is false to prevent contradictory metadata.

Copilot uses AI. Check for mistakes.
export_compliance_app_type: nil, # Not applicable since we don't use encryption
export_compliance_encryption_updated: false, # No encryption changes
export_compliance_contains_third_party_cryptography: false, # No third-party cryptography
export_compliance_is_exempt: true # Exempt from export compliance
Copy link

Copilot AI Oct 18, 2025

Choose a reason for hiding this comment

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

[nitpick] Setting export_compliance_is_exempt true while also declaring uses_non_exempt_encryption false and export_compliance_uses_encryption false is redundant; exemption only matters if encryption is used but exempt. Remove export_compliance_is_exempt when uses_encryption is false to prevent contradictory metadata.

Suggested change
export_compliance_is_exempt: true # Exempt from export compliance

Copilot uses AI. Check for mistakes.
export_compliance_uses_encryption: false, # Explicitly state no encryption for export compliance
export_compliance_platform: 'ios', # Specify platform for export compliance
export_compliance_compliance_required: false, # No additional compliance documentation required
export_compliance_app_type: nil, # Not applicable since we don't use encryption
Copy link

Copilot AI Oct 18, 2025

Choose a reason for hiding this comment

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

[nitpick] Passing export_compliance_app_type: nil adds an unnecessary key; omit the parameter entirely when not applicable to produce cleaner metadata.

Suggested change
export_compliance_app_type: nil, # Not applicable since we don't use encryption

Copilot uses AI. Check for mistakes.
@github-actions
Copy link

Code Coverage Report ❌

Current coverage: 0%

@graycreate graycreate merged commit de9d84d into main Oct 18, 2025
6 checks passed
@graycreate graycreate deleted the bugfix/testflight-compliance-issue branch October 18, 2025 12:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants