如果 ios app 是 ai 类的产品,比如 文生图类,基于 gpt-image1 模型,那么上架国内能通过吗?是否需要算法备案?先谢过了!
]]>审核不通过原因:内购价为 9.99 ,但是 app 显示 19.99 。
(不知道哪来的 9.99 ???)
于是我回复说,内购价一直是 19.99 ,并且附上了 appstoreconnect 的内购页面定价截图。
今天审核回复我了:还是内购价与 app 显示对不上,要求继续改。
这下死局了,求助各位大佬,碰到这样的情况,我应该怎么办?来来回回已经拖了一周了
]]>填写了 生产环境服务器 URL
和 沙盒环境服务器 URL
两个回调地址
生产环境服务器 URL: https://prod.xxx.com/iapNotify
沙盒环境服务器 URL: https://test.xxx.com/iapNotify
在开发过程中,测试同事使用 TestFlight 安装了最新版本的 app
当客户端完成支付时,沙盒环境服务器 URL
会收到苹果服务器通知,一个是 JWT 字符串
把signedPayload
解出来是下面这样的:
{ "notificationType": "ONE_TIME_CHARGE", "notificationUUID": "d03b3bae-a63c-4fd3-ad4f-69e52fb966fd", "data": { "appAppleId": 6751180999, "bundleId": "xx.yy.zz", "bundleVersion": "62", "environment": "Sandbox", "signedTransactionInfo": "eyJhbG..." }, "version": "2.0", "signedDate": 1759197475796 }
再把signedTransactionInfo
解出来是这样的:
{ "transactionId": "2000001023950888", "originalTransactionId": "2000001023950888", "bundleId": "xx.yy.zz", "productId": "xx.yy.zz.product_01", "purchaseDate": 1759197470000, "originalPurchaseDate": 1759197470000, "quantity": 1, "type": "Consumable", "appAccountToken": "856bb959-ae22-4711-2005-af69286aceed", "inAppOwnershipType": "PURCHASED", "signedDate": 1759197475796, "environment": "Sandbox", "transactionReason": "PURCHASE", "storefront": "CHN", "storefrontId": "143465", "price": 6000, "currency": "CNY", "appTransactionId": "704888381761368888" }
appAccountToken 是我们的订单唯一标识
问题:
1.怎么确认这个订单已完成支付
是只要有这个回调就认为是支付成功了吗?
2.如果订单退款是怎么处理
沙盒环境好像不能测试内购的退款流程,如果上线了退款时,也会有这种服务器通知吗
3.现在要提审 app ,更换了生产环境接口 https://prod.xxx.com ,在 TestFlight 里更新到最新版
支付完成后,App Store 的服务器通知还是会请求到 沙盒环境服务器 https://test.xxx.com ,这样订单标识就对不上了。那 App Store 的审核人员审核内购时会审核不通过吧。
首次对接 iOS 内购,问题有点多,希望各位大佬赐教
]]>“违反 1.1.6 。内购价格为 19.99 ,但是之前通过的内购价格为 9.99”
简直见了鬼了,我内购价格从第一版开始从来没变过,一直是 19.99 ,不知道哪来的 9.99 。而且现在 appstoreconnect 页面里看,内购价格也是 19.99 。
最奇怪的来了,这不是这个版本的第一个 build 。我先上传了版本 build 10 ,让他们审核,通过了。但是我发现有个 bug ,于是撤掉了,新上传了 build 11 ,然后他们就审核出这个问题了。
请问一下有经验的大佬,这种情况怎么办?我已经回复了审核,但是 2 天了还没反应...
]]>绝望😞
]]>其实 Apple 在收到用户的退款申请后,会发送 3 次 CONSUMPTION_REQUEST 的通知给我们开发者,根据开发者提供的 CONSUMPTION INFO (例如:用户的累计消费金额,累计退款金额,开发者的退款偏好等)进行综合决策。因此开发者只要及时的、正确地回复 Apple 的 CONSUMPTION_REQUEST ,就能帮助 Apple“公平”地决策,有效降低恶意退款的比例。
当前市面上有些平台已经实现了 CONSUMPTION_REQUEST 的自动答复系统,例如 RevenueCat ( https://www.revenuecat.com/)等,但是有一个显著的缺点,就是需要开发者把 AuthKey 和 In-App Purchase Key 等上传到云端。相当于开发者需要把 AppStore Connect 的连接和查询的权利,全部交给三方服务( RevenueCat 等)。这对一些安全敏感的开发者(包括企业开发者)来说,是完全不可接受的。
为了解决这个问题,我开源了一款管理 Apple Notificaiton 的系统,支持一键部署到 Supabase 中,并用 Valut 保管 Apple 的密钥,同时可以自动答复 CONSUMPTION_REQUEST ,并且展示答复的 Consumption Info 中的详细信息和含义。这样,开发者就可以轻松、及时地处理 Apple 发来的退款征询意见。在保证 AuthKey 和 In-App Purchase Key 安全性的同时,大大降低退款的订单数(对于消耗品,尤其有效)。
项目地址: https://github.com/argus-sight/refund-swatter-lite
开发者朋友们,大家试试吧,有问题可以联系 rockrong89@gmail.com
]]>现在想做收费的 app,如果产生了收益,请问如何合理合法的将收益汇入?小红书上说可以使用空中云汇,但是没太开明白是怎么操作。
另外大佬们有没有建议,是申请外区的 Apple ID 和 Google Play 好还是国区的更方便?主要纠结的就是申请时的难度和收款时的难度。
是否有必要弄一个海外公司来做?(业务不大)
]]>这次我根据大家反馈更新了一些呼声较高的功能,欢迎继续试用并留言交流!
🧠 新增 OCR 功能:可识别扫描版 PDF 或图像中的文字,支持复制、搜索
📊 优化表格提取:结构识别更准确,复制到 Excel 保留原格式效果更好
✍️ 批注工具增强:高亮、下划线、便签等操作体验更流畅
想要提取财报、表格、报告数据的用户
需要轻量标注、做读书笔记的阅读者
目前版本是 **macOS **,后续会推出 iPad/iOS 版本(开发中)。
有兴趣合作的技术大佬欢迎加入(联系方式: 微信 zongmumask)。
也欢迎大家加入 QQ 群继续体验和反馈,互加交流技术和产品方向 🙌
有大手子指导一下么?非常感谢!
P.S. 已经提了 issue 暂时还没人管…
]]>第一步
第二部
填完后直接提示处理中,还是不能登陆
我的帐号不会是没了吧😭
]]>这次来简单汇报下新版本的一些更新进展:
✅ 本次新增功能:
• 🖨️ 新增打印功能:支持高质量分页打印(非截图渲染)
• 🌗 白夜模式切换:支持浅色 / 深色界面切换(黑底白字更护眼)
• 📖 双页 / 单页阅读模式:阅读体验更灵活
• 🔍 新增缩放选项:适应整页 / 页面宽度,一键切换
🔧 项目背景
• 我是独立开发者,使用 Swift + PDFium 构建了这款 PDF 阅读器,目标是打造一款 跨平台、价格亲民、功能聚焦的 PDF 工具
• PDFium 的跨平台特性也为我后续支持 Windows 和 Android 奠定了基础
• 当前版本支持注释、表格提取(针对可编辑 PDF )、基础阅读体验优化,后续计划增加更多 PDF 功能。
[App Store 下载地址] 👇👇👇👇:
Rainbow PDF(免费)
欢迎大家加入微信群继续体验和反馈,也欢迎互加交流技术和产品方向 🙌
开发过程中我选择了 PDFium 作为渲染引擎,主要是为了未来的跨平台计划(包括 Windows 和 Android ),这样可以最大限度复用底层代码,降低维护成本。同时在 macOS 上用 Swift 实现了 UI 部分,整体开发体验也不错。
这款阅读器目前支持:
未来我会继续更新,逐步加入编辑功能,比如修改文字、插入段落、重新排版等。也计划提供同步和多平台版本,打造一个价格亲民但实用的 PDF 工具,适合个人和小团队使用。
开发过程中也遇到了不少挑战,要深入理解 PDF 文件结构,研究 PDFium 的源码实现,才能实现稳定而准确的表格提取算法。像表格单元格的定位、线框判断、内容顺序识别等,都需要结合文本、图形和布局信息进行分析。这部分是整个项目中最耗时、但也最有价值的部分。
现在 App 已经上线,欢迎 mac 用户试用,也欢迎交流开发经验、踩坑记录、或产品反馈~
App Store: Rainbow PDF
]]>其实是 Cloudflare 这个菩萨太香了,几乎 0 成本服务器费用,尤其我们要多做项目,这样从成功率更容易成功,所以成本对我们很重要。万一哪个项目火了,我们可以再去宠幸那个项目。
最近使用 Cloudflare Page 部署项目,遇到部署问题,代价很大。交的学费就是,白白浪费 1 天或几天的时间,到最后还是解决不了这个部署问题,真的很抓狂。接下来我会告诉下唯一的、反直觉、速效的方案。
其实方案很简单,就是项目做一些改动,尤其大的,要 Cloudflare page 部署一次,如果是线上产品,那就直接非主分支部署,这样只会部署到 preview 分支,不会影响到线上的业务。
这样如果遇到部署的问题,解决当下的改动或最近的小改动就行了。
不这样做的代价可能就是以半天的时间为单位浪费,可能还解决不了问题,你说抓不抓狂。而我遇到了两次这样的大问题,这一次更是浪费是时间和钱财,我会告诉你具体的情况。
我这次是等项目完成之后,想一步 deploy 到 Cloudflare 成功,结果处理了一天都没解决。各种问 AI ,结果 3 分钟,加上 cursor 刚更新,新的调用计费政策,cursor o3 就耗光了一个月的额度,损失几十刀。时间和金钱都浪费了。
下面两张图是 cursor 的 o3 调用和扣费,当时就把 o3 model 禁了,用不起用不起。
最后我只能沿着 git 提交记录排查,结果最近一次成功部署在 35 次提交之前,很绝望。直接原因是引入了 shadcn-nuxt 这个库,非官方库,某种原因就是部署不了。
那只能从那个 git 提交点开始改动了,这是最笨又快速方法。毕竟这么多提交记录,变量太大了,AI 也懵逼了,我浪费了时间和 AI 费用,结果问题还是没有解决。
我上次遇到类似的问题,是部署 nextjs 项目到 Cloudflare page ,哎,结果这次是 nuxt vue 项目,我以为不一样,结果一样折磨我一天时间,最后只能回到之前的 git 提交点,一步一步几十个提交记录,再手工去搬运。
这是我遇到的 Cloudflare 的两次部署问题,耗费了大量代价:时间和金钱成本,总结出的解决方案,希望可以帮到大家避坑,谢谢~
也分享记录在了 X: https://x.com/meigesir/status/1923186773833707947
]]>Guideline 4.3(a) - Design - Spam
We noticed your app shares a similar binary, metadata, and/or concept as apps > submitted to the App Store by other developers, with only minor differences.
Submitting similar or repackaged apps is a form of spam that creates clutter and makes it difficult for users to discover new apps.
纯 react native 开发,用到的 native 能力使用的 npm 下载较高的的依赖库(二十多个),自己写的 native 代码很少基本没有。
万能的 v 友们,有没有什么好的解决办法?/抱拳
]]>正当我准备开始快速迭代大干一场的时候。。最近提交的一个更新,突然被驳回了。审核发现了一个问题,于是赶紧修复重新提交,接着又被拒绝,审核开始询问我为什么要获取辅助功能权限,因为这个辅助功能是这款 app 的核心玩法,我于是解释了一遍发过去。然后漫长的等待就开始了。。
一连等了 5 天没有任何回应。我想试试加急,但是提交加急审核居然报错了,说什么没有收到我的提交,出错了。然后我不死心的我又按照提示发邮件联系,苹果支持人员很快给我回复了邮件,只是礼貌的表示继续等待,还需要时间。。。
又等了 2 天,还是没反应,期间我又优化了很多功能,于是决定撤回重新提交。重新提交后又进入了 In Review 状态,然后就没有然后了。。。又等了 5 天。。我又尝试给苹果审核发邮件,这次我把所有和苹果审核来往的信息和邮件都给到 gpt ,让他帮我起草一份申述邮件。果然比我写的好很多,有理有据,还很动情。很快苹果审核给我回复了邮件,可能他们也感受到我的急躁。这次回邮件还特地安慰我,不要着急,我们保证你的应用没有被遗忘,只是需要时间审核,请继续等待。。更贴心的是他们知道我来自中国,提醒我可以用中文和他们交流。所以如果你是中国地区的开发者,完全可以用中文和他们交流。
继续等待。。期间我搜索了下,发现有很多类似案例 ,有等待超过 1 个月的,简直就是鬼故事。。我有点灰心。甚至跑去淘宝想看看有没有类似付费服务,翻了下还真有,要价 100 ,说可以加急审核,要求我提供苹果开发者账号密码。。。提供账号我有点不能接受。。于是作罢继续等待。
终于在又等待了 3 天后。。我收到了过审的邮件。。简直泪目。😭。把这段经历记录下来,我知道写的有点啰嗦,但是如果有同样新手遇到类似的经历,可以参考下。只要我们把东西做好,然后就是相信苹果,耐心等待吧。
写了这么多,如果你看到最后,请允许我介绍下我这款 app 吧。
🌵仙人掌 AI 助手, 支持选中文字快速翻译和总结。
]]>我之前开发的 App 数据都是放在 iCloud 的,但体验非常差。
所以近期想把数据从 iCloud 的方案切成纯云数据库的方案(短期不需要后台并发队列之类逻辑,但后期可能需要)
基于这个诉求,请问最简单可行的方案是什么呢?
]]>❯ xcrun --sdk ios --show-sdk-version 2025-05-02 14:42:44.267 xcodebuild[40697:13592334] [MT] DVTSDK: Skipped SDK /Applications/Xcode16.2.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS16.0.sdk; its version (16.0) is below required minimum (18.2) for the iphoneos platform. 2025-05-02 14:42:44.430 xcodebuild[40697:13592334] Writing error result bundle to /var/folders/pr/vrpq9jvn4jgff8c5jmlm12mm0000gp/T/ResultBundle_2025-02-05_14-42-0044.xcresult xcodebuild: error: SDK "ios" cannot be located. 2025-05-02 14:42:45.664 xcodebuild[40699:13592356] [MT] DVTSDK: Skipped SDK /Applications/Xcode16.2.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS16.0.sdk; its version (16.0) is below required minimum (18.2) for the iphoneos platform. 2025-05-02 14:42:45.837 xcodebuild[40699:13592356] Writing error result bundle to /var/folders/pr/vrpq9jvn4jgff8c5jmlm12mm0000gp/T/ResultBundle_2025-02-05_14-42-0045.xcresult xcodebuild: error: SDK "ios" cannot be located. xcrun: error: Failed to open property list '/Users/hbb/source/repos/rn/AwesomeProject/ios/SDKSettings.plist' 2025-05-02 14:42:47.075 xcodebuild[40700:13592367] [MT] DVTSDK: Skipped SDK /Applications/Xcode16.2.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS16.0.sdk; its version (16.0) is below required minimum (18.2) for the iphoneos platform. 2025-05-02 14:42:47.241 xcodebuild[40700:13592367] Writing error result bundle to /var/folders/pr/vrpq9jvn4jgff8c5jmlm12mm0000gp/T/ResultBundle_2025-02-05_14-42-0047.xcresult xcodebuild: error: SDK "ios" cannot be located. xcrun: error: unable to lookup item 'SDKVersion' in SDK 'ios'
各位佬都怎么设备 开发环境的,如果要支持旧环境的话, 不然要装旧的操作系统吧
]]>在 MacMini 和 MacBook 之间来回犹豫
V 友们给个建议 1 、移动办公的需求不多,办公室还是家里都有 32 寸的显示器 2 、app 会需要调用麦克风,摄像头,MacBook 设备自带的有,但是我现在也有罗技的摄像头,插在 MacMini 上估计开发也可以
总预计资金 9000 元以内,感觉用上国补和学生可以买个 MacBook M4 16G+256G 的 但是同样的价钱 MacMini 能上更好的配置,而且硬盘还可以资金换,不用和 MacBook 一样去专业换 SDD 。
想看看群友推荐选哪个? 17 年以前用 Intel 的 CPU 开发过 iOS 后来没写了
]]>出于个人兴趣爱好想学。
虽然现在 AI 写代码写 App 比较快,但总感觉 AI 生成的项目结构和思路不会规范,所以想找开源项目大致了解一下开发思路。
]]>import SwiftUI import Kingfisher struct WorksDateView: View { let columns: [GridItem] = [ GridItem(.flexible(), spacing: 8), GridItem(.flexible(), spacing: 8), GridItem(.flexible(), spacing: 8) ] var data: [DateWorksModel] var body: some View { ScrollView { LazyVGrid(columns: columns, spacing: 16) { ForEach(data) { item in Section { ForEach(item.works) { work in NavigationLink(destination: WorkDetailView(workId: work.id)) { WorksDateCell( workImageCover: work.imageCover, workId: work.id, actressName: work.actressName, actressAvatar: work.actressAvatar ) } .buttonStyle(PlainButtonStyle()) } } header: { Text(item.releaseDate) .font(.title) .fontWeight(.bold) .frame(maxWidth: .infinity, alignment: .leading) .padding(.top, 8) } } } .padding(.horizontal) } } } struct WorksDateCell: View { var workImageCover: String = "https://fakeimg.pl/320x504/fe9a2b/000" var workId: String = "xxx" var actressName: String = "xxx" var actressAvatar: String = "https://fakeimg.pl/60x60/ff425a/100" var avatarSize: CGFloat = 30.0 var body: some View { VStack(alignment: .leading) { KFImage(URL(string: workImageCover)) .placeholder { ProgressView() } .resizable() .scaledToFit() .clipShape(RoundedRectangle(cornerRadius: 8, style: .continuous)) HStack { KFImage(URL(string: actressAvatar)) .placeholder { ProgressView() } .resizable() .scaledToFill() .frame(width: avatarSize, height: avatarSize) .clipShape(Circle()) VStack(alignment: .leading) { Text(workId) .fontWeight(.medium) .font(.subheadline) Text(actressName) .foregroundStyle(.secondary) .font(.caption) .lineLimit(1) } } } } }
实现的是一个日期的下面,展示这个日期内所有发布的 works ,如:
2024 年 10 月 10 日
work1, work2, work3
work4, work5, work6
2024 年 9 月 10 日
work5, work6, work7
work8, work9, work10
work 都是按照 LazyVGrid 布局的
我真机调试的时候,很明显的发现滚动到一定位置然后往回滚的时候,会出现卡顿,滚一段距离必定卡一下,是必现的,不知道原因在哪里
]]>解析 bplist 文件
本人研究医学图像 AI 的,现在有个需求,就是把医生在 Osirix (一个医生看影像的软件)上圈出来的 ROI ( region of interest ,就是一个闭合的多边形,将目标区域,比如肿瘤,围起来)转出来存成 json/xml 等 readable 的格式。
由于 Osirix 批量导出的时候导出的是它自己的一个格式,里面存的是一堆 bytes ,类似于这种
b'bplist00\xd4 后面很长
说白了这东西里面存的就是 ROI 上的每个点的坐标,以及医生标注的 ROI 的名字(比如恶性肿瘤,良性肿瘤)。
大概问了下 chatGPT ,说这是 bplist
的格式(我的理解大概是 Google protobuf 类似的东西,不过是 apple 的)。
目前我们尝试了两种方案去解析 Osirix 导出的文件:
逆向工程。我们尝试了逆向工程,通过标注一些特定坐标的标注,然后观察 Osirix 导出的文件格式,大概写了个解析的代码。问题是这个逆向并不完美,总有些 case 会出现无法解析的问题。这个成功率大概有个 92%。
直接用 python 的 bplist
解析库。这个错误率更高,成功率大概只有 20%。很多 case 都无法解析。
然后我今天突然发现 Osirix 居然有个开源版本Horos,并且有 ROI 导出的相关功能。
如果有了怎么编码 ROI 的源码,按理说就能开发一个完美的工具来逆向了。问题是这个开源项目比较大,难以定位相关代码。我大概用 bplist/roi/NSKeyedArchiver 等关键词搜了下,没找到。
有没有大哥比较熟悉 bplist 的,或者比较懂 MacOS 开发的,可以指点下如何快速定位源代码里相关代码的?
]]>Swift & SwiftUI
但是感觉学习曲线挺陡峭的,照着 B 站的视频敲了个简单的 Demo 还是什么都不清楚,学的很混乱🤪
要是能像前端一样有 MDN
、 现代 Javascript 教程
这样的文档就好了
最近有个人申请了我 app 名字的商标,他联系到我让我改一下应用的名字,还说不改的话会向苹果投诉。
但我不想改,如果对方真向苹果投诉的话,苹果会依据上架的前后(我先上架 app ,他后申请商标)来驳回他的申请吗?还是会强制让我改名?
一个小应用,当初也没想着会有这回事。名字也不是很大众的名字,对方不是个大公司。
]]>