When discussing cross-platform development, it's easy to get stuck on framework choices, such as Flutter, React Native, or uni-app. But when the project actually starts, problems usually arise later, such as:
- How to handle iOS signing
- How to package without a Mac
- How to upload IPA
Cross-Platform Frameworks Are Just an Entry Point
First, establish a foundation: cross-platform frameworks solve UI and business logic reuse, not iOS publishing
Common choices:
| Framework | Runtime Method |
|---|---|
| Flutter | Dart compilation |
| React Native | JS Bridge |
| uni-app | WebView / Native |
Whichever you choose, eventually an iOS project (or a project that can build for iOS) will be generated
Example (Flutter)
flutter build ios
Example (uni-app)
- Use HBuilderX cloud packaging to generate an iOS package
Building Cross-Platform ≠ No Need for Xcode
Even when using cross-platform frameworks, building for iOS still requires:
- Certificates
- Provisioning profiles
For Flutter:
flutter build ipa
Under the hood, Xcode is still invoked.
If the signing configuration is incorrect, it will fail directly.
Signing Preparation: A Key Watershed for Cross-Platform Projects
This is where many projects get stuck.
On macOS, you can use Xcode's automatic management, but in cross-platform environments (Windows / Linux), you need to prepare manually.
You can use AppUploader to generate signing files.
Operation Steps
1. Create a Certificate
- Open AppUploader
- Enter Certificate Management
- Click Add
- Select distribution
- Set name and password
- Download
.p12
2. Create a Provisioning Profile
- Enter Provisioning Profile Management
- Create a new App Store type
- Select Bundle ID
- Bind certificate
- Download
.mobileprovision
3. Import into Build Environment
- macOS → Import into Keychain
- CI → Script import
Multiple Ways to Build IPA
Cross-platform projects can choose different build methods:
Method 1: Local Mac Build
Suitable for:
- Having a Mac device
- Debugging phase
Method 2: Cloud Build
For example:
- HBuilderX cloud packaging
- CI (Mac Runner)
Method 3: Automated Build (Fastlane)
build_app(
export_method: "app-store"
)
The build result is always:
-
.ipafile
Uploading IPA Can Break Free from macOS Dependency
The upload step can be completely independent.
On Windows or Linux, you can upload directly.
Uploading with AppUploader
Steps:
- Open the Submit Upload page
- Enter Apple ID
- Set app-specific password
- Select IPA file
- Choose upload channel (1 or 2)
- Click Upload
If you encounter:
- Upload stuck
- Progress not moving
You can switch channels and upload again.
Review and Publishing: No Difference for Cross-Platform Projects
After upload:
My Apps → Select App → TestFlight → Build → Submit for Review
Prepare:
- App screenshots
- Privacy policy
- Test account
A Common Overlooked Issue in Cross-Platform Development
When modifying the Bundle ID:
- The provisioning profile does not update automatically
Symptom:
- Build succeeds
- No build after upload
Solution:
- Recreate the provisioning profile
- Ensure Bundle ID consistency
Cross-platform development solves the problem of writing code once, but the publishing process still follows iOS rules. You can separate signing, building, and uploading. Cross-platform projects are no more complex than native ones when it comes to iOS submission.




Top comments (0)