fix(ios): complete iap user interface (#13639)

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

- New Features
- In-app purchases fully integrated for Pro and AI plans with restore,
live product loading, and StoreKit test configuration.

- Improvements
- Refreshed paywall: intro animation, delayed close button, smoother
horizontal paging, page dots interaction, per-item reveal animations,
and purchase-state UI (disabled/checked when owned).

- Changes
- "Believer" plan and related screens removed; Pro simplified to Monthly
and Annual offerings.

- Chores
- iOS project and build settings updated for newer toolchain and
StoreKit support.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
This commit is contained in:
Lakr
2025-09-25 12:50:12 +08:00
committed by GitHub
parent 3c9d17c983
commit 7a90e1551c
31 changed files with 697 additions and 347 deletions

View File

@@ -74,4 +74,29 @@ class AFFiNEViewController: CAPBridgeViewController {
super.viewDidDisappear(animated)
intelligentsButtonTimer?.invalidate()
}
#if DEBUG
override func motionEnded(_ motion: UIEvent.EventSubtype, with event: UIEvent?) {
if motion == .motionShake {
showDebugMenu()
}
}
#endif
}
#if DEBUG
import AffinePaywall
extension AFFiNEViewController {
@objc private func showDebugMenu() {
let alert = UIAlertController(title: "Debug Menu", message: nil, preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "Show Paywall - Pro", style: .default) { _ in
Paywall.presentWall(toController: self, type: "Pro")
})
alert.addAction(UIAlertAction(title: "Show Paywall - AI", style: .default) { _ in
Paywall.presentWall(toController: self, type: "AI")
})
alert.addAction(UIAlertAction(title: "Cancel", style: .cancel))
present(alert, animated: true)
}
}
#endif

View File

@@ -0,0 +1,144 @@
{
"appPolicies" : {
"eula" : "",
"policies" : [
{
"locale" : "en_US",
"policyText" : "",
"policyURL" : ""
}
]
},
"identifier" : "B8962ABD",
"nonRenewingSubscriptions" : [
],
"products" : [
],
"settings" : {
"_applicationInternalID" : "6736937980",
"_askToBuyEnabled" : false,
"_billingGracePeriodEnabled" : false,
"_billingIssuesEnabled" : false,
"_developerTeamID" : "73YMMDVT2M",
"_disableDialogs" : false,
"_failTransactionsEnabled" : false,
"_lastSynchronizedDate" : 780406221.25107503,
"_locale" : "en_US",
"_renewalBillingIssuesEnabled" : false,
"_storefront" : "USA",
"_storeKitErrors" : [
],
"_timeRate" : 0
},
"subscriptionGroups" : [
{
"id" : "21781265",
"localizations" : [
],
"name" : "AI",
"subscriptions" : [
{
"adHocOffers" : [
],
"codeOffers" : [
],
"displayPrice" : "106.99",
"familyShareable" : false,
"groupNumber" : 1,
"internalID" : "6752564901",
"introductoryOffer" : null,
"localizations" : [
{
"description" : "AFFiNE AI Yearly Subscription",
"displayName" : "AFFiNE AI Yearly",
"locale" : "en_US"
}
],
"productID" : "app.affine.pro.ai.Annual",
"recurringSubscriptionPeriod" : "P1Y",
"referenceName" : "AI Yearly Subscription",
"subscriptionGroupID" : "21781265",
"type" : "RecurringSubscription",
"winbackOffers" : [
]
}
]
},
{
"id" : "21781263",
"localizations" : [
],
"name" : "Pro",
"subscriptions" : [
{
"adHocOffers" : [
],
"codeOffers" : [
],
"displayPrice" : "7.99",
"familyShareable" : false,
"groupNumber" : 1,
"internalID" : "6752564392",
"introductoryOffer" : null,
"localizations" : [
{
"description" : "AFFiNE Pro Monthly Subscription",
"displayName" : "AFFiNE Pro Monthly",
"locale" : "en_US"
}
],
"productID" : "app.affine.pro.Monthly",
"recurringSubscriptionPeriod" : "P1M",
"referenceName" : "Pro Monthly Subscription",
"subscriptionGroupID" : "21781263",
"type" : "RecurringSubscription",
"winbackOffers" : [
]
},
{
"adHocOffers" : [
],
"codeOffers" : [
],
"displayPrice" : "81.0",
"familyShareable" : false,
"groupNumber" : 2,
"internalID" : "6752564335",
"introductoryOffer" : null,
"localizations" : [
{
"description" : "AFFiNE Pro Yearly Subscription",
"displayName" : "AFFiNE Pro Yearly",
"locale" : "en_US"
}
],
"productID" : "app.affine.pro.Annual",
"recurringSubscriptionPeriod" : "P1Y",
"referenceName" : "Pro Yearly Subscription",
"subscriptionGroupID" : "21781263",
"type" : "RecurringSubscription",
"winbackOffers" : [
]
}
]
}
],
"version" : {
"major" : 4,
"minor" : 0
}
}