iOS
文章平均质量分 57
风海铜锣
个人公众号:风海铜锣
展开
-
iOS AudioUnit笔记
AudioUnit 组件实体的创建函数是。传入 AudioComponent 并输出 AudioComponentInstance,返回错误码。AudioComponent 需要通过函数 AudioComponentFindNext 来获得。原创 2023-05-02 21:36:36 · 234 阅读 · 0 评论 -
记一次iOS审核被拒条例4.1和2.3.7的通关经历
本次过审是更新包的过程中遇到的。上一次被拒经历可以戳这里。这次更新前,产品已经顺利更新了好几次了。在这一次提交后,产品的 in review 阶段持续了五个小时以上,当时就猜测应该可能会被拒,果然如我预料。先说说产品的背景,产品是一个游戏。在发布第一版时,因为被拒绝。后来经过和苹果沟通后,顺利过包。之后几个版本升级非常顺利,几乎是次日就通过。最新一版的改动,除了引入新语言之外,对产品的标题和副标题做了小幅度修改。目前看,我认为引起苹果警惕的因素应该是产品的标题和副标题修改,这部分大家可以引起注意。原创 2022-11-19 08:22:47 · 2138 阅读 · 0 评论 -
探讨苹果商店那些“变身包”究竟是怎么上架的
不少开发者的产品慢慢有了流量后,都难免会遇到被抄袭的问题,面对市面上出现的仿造品,应该怎么应对好?仿造是难以避免的,也是界定起来比较困难的,产品和产品之间出现类似是再正常不过了,这里说的被抄袭,指的更多的是一笔一画的抄自己的作品,核心改动微乎其微的“复刻”。另一种情况是名称侵权,即别人在标题或者副标题“冒用”你的产品名进行蹭流量,而这个产品名本身你是有专利的,这也是一种侵权。原创 2022-11-17 15:48:07 · 2422 阅读 · 0 评论 -
当苹果开发者发现自己的产品被抄袭时,该怎么做?
不少开发者的产品慢慢有了流量后,都难免会遇到被抄袭的问题,面对市面上出现的仿造品,应该怎么应对好?仿造是难以避免的,也是界定起来比较困难的,产品和产品之间出现类似是再正常不过了,这里说的被抄袭,指的更多的是一笔一画的抄自己的作品,核心改动微乎其微的“复刻”。另一种情况是名称侵权,即别人在标题或者副标题“冒用”你的产品名进行蹭流量,而这个产品名本身你是有专利的,这也是一种侵权。原创 2022-11-13 08:31:11 · 488 阅读 · 0 评论 -
苹果开发者容易招致调查的若干行为
最近越来越多的开发者遭遇了苹果审核万恶的 other 调查。可以看出苹果的调查触发频率是越来越高了。且很难找出规律。有时候是机器审核出app异常导致的调查,有时候是批量集中时间段的大规模调查。如果是遭遇了大规模调查,那几乎大部分开发者都很难幸免,这不是你的错,是苹果的机制就是如此。但是也存在一些开发者自己操作不当导致。下边就列举一下容易触发调查的几个开发者行为。鉴于现如今苹果产品审核日趋严格,很多开发者没有意识到一些不当行为带来的风险,还沿用过去所谓的“互联网思路“,想通过短快平的方式不断迭代产品来制胜,这原创 2022-06-22 20:50:29 · 427 阅读 · 0 评论 -
那些“无良包”为什么能上架?
注意,“无良包”仅仅是一个别称,代表主观违规且业务不那么正当的产品,并不含感情色彩。开发者的幸存者偏差很多开发者交流的时候都会有这么一句抱怨。我的产品明明已经照着苹果/谷歌的意思改了,为什么还被打回。那为什么那些明显违规的产品反而在苹果上活的好好的?这种抱怨非常有代表性,基本上这个现象不是个例,而是大多数开发者的共识。其实这是典型的幸存者偏差。你看到了贼吃肉,而挨打退场的贼你是永远看不到了。我们和“无良包”的上包率差距并不太大事实上,不管谁宣称自己有多强大的上包方案。目前看来苹果审核的.原创 2022-04-16 10:49:47 · 261 阅读 · 0 评论 -
Swift指针的应用
Swift与指针由于Swift本身是一门较为现代的语言,支持很多高级特性,所以对于程序员来说,大部分时候不需要用到指针这种更“底层”的特性。而Swift语言的设计者也在尽可能希望开发者能尽量少的使用指针。但是,“慎用”不代表“不能用”,更不代表“没用”。相反,指针非常有用,在某些场景下还是必不可少的特性。尤其是开发工作和系统底层特性、内存处理、高性能需求息息相关时。所以,Swift通过在施加某种限制的前提下为开发者暴露了指针的使用接口,本篇文章重点介绍Swift使用指针的相关类型、函数,以及在实践应用原创 2021-11-15 21:31:42 · 2049 阅读 · 0 评论 -
iOS的CoreData技术详解
为什么写这篇文章最近因为新项目想用到数据持久化,本来这是很简单的事情,复杂数据一般直接SQLite就可以解决了。但是一直以来使用SQLite确实存在要自己设计数据库,处理逻辑编码,还有调试方面的种种繁琐问题。所以考虑使用iOS的Core Data方案。上网查了一堆资料后,发现很多代码都已经是陈旧的了。甚至苹果官方文档提供的代码样例都未必是最新的Swift版本。于是萌生了自己写一篇文章来整理一遍思路的想法。尽可能让新人快速的上手,不但要知道其然,还要知道其设计的所以然,这样用起来才更得心应手。什么是C原创 2021-09-25 11:34:34 · 381 阅读 · 0 评论 -
2021新版XCode下SwiftUI的App生命周期监控新方案
早期在使用UIKit框架开发App时,我们通过UIDelegate来获得生命周期回调,具体如下:extension AppDelegate: UIApplicationDelegate { func applicationDidBecomeActive(_ application: UIApplication) { // code here }}后来换用SwiftUI框架,我们通过SceneDelegate回调来处理生命周期逻辑:class SceneDelegat原创 2021-07-14 10:25:59 · 485 阅读 · 0 评论 -
关于SwiftUI手动返回NavigationLink的方法
在SwiftUI中我们使用NavigationView框架来处理页面导航。import SwiftUIstruct DestinationView: View { var body: some View { Text("Destination View") }}struct ContentView: View { var body: some View { NavigationView { NavigationLin原创 2021-07-13 21:58:56 · 2093 阅读 · 0 评论 -
详解NSLocale.preferredLanguages的含义
NSLocale.preferredLanguages的应用在我们开发iOS程序时,经常有“使用当前应用设置的语言进行差异化操作”的需求。比如当你开发一个浏览器,需要根据用户设置的语言,给用户推送不同语言的网页文章时。这时候就需要用到NSLocale.preferredLanguages。一般情况下,应用开发者只需要区分中英文就可以完成基本需求了,比如如下代码:if NSLocale.preferredLanguages[0].hasPrefix("en") {// 分支逻辑}而如果原创 2021-07-12 15:36:27 · 1707 阅读 · 0 评论 -
M1处理器的苹果设备开发引入友盟等第三方库在模拟器上的编译链接错误问题
问题描述链接错误提示函如下:ld: in UMComBaseEvent.o, building for iOS Simulator, but linking in object file built for iOS, file ‘UMCommon’ for architecture arm64.个人分析出现这种情况,原因应该友盟编译的库提供了两套指令集的二进制数据,一套是给真机编译的,一个是给模拟器编译的,而给模拟器编译的指令集是x86指令集(以前的Mac用的)。而新的苹果开发设备用的处理器是原创 2021-07-09 14:41:07 · 1051 阅读 · 0 评论 -
用Swift的FileHandle进行文件写入
在项目中我们经常有针对二进制或者文本文件进行局部读写、追加数据等需求。在C语言里用fopen系列函数就能解决。而在Swift语言里可以通过FileHandle来处理。下面通过代码示例来讲解下FileHandle的用法。首先先定义一个文件路径,作为测试文件let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] + "test.txt"接下来判断文件是否存在,不存在就创建。原创 2021-07-07 17:01:29 · 1844 阅读 · 0 评论 -
Swift的String类型与cString转换操作
String类型虽然强大,但是对处理已知文本是ascii字符的操作很不友好。所以有时候有必要将它转换为cString进行操作。以下就是代码示例。首先定义一个String类型。let string = "hello, world"接下来,我们把它转换成cString,重新赋值。let cString = string.cString(using: .utf8)!因为我们知道转换必定能成功,所以这里用了“!”,常规情况编码请注意做好nil防护。我们截取字符串的前五个字符。let slic原创 2021-07-07 15:59:24 · 792 阅读 · 0 评论 -
2021年遭遇苹果审核2.3.1的开发过审经历
攻略前情摘要关注我公众号的朋友,想必看过我上一篇发过的文章:2021年注册新iOS开发者账号和上包经历记录 。以下记录即是对这一文章的续集。在今年注册了新的开发者账号,并且审核一次通过后,万万没想到我要经历为期13天和2.3.1作斗争的经历。期间几度摸不着北,查阅了网上国内国外几十篇别的网友发的相关心得,并和各路网友交流,尝试了种种办法,最后总算艰难突破。所以觉得有必要水一篇文章记录一下经过。首先介绍一下产品的基本情况。产品类型:工具、浏览器版本迭代:第二版功能更新:追加视频嗅探和下载功能,原创 2021-07-06 09:34:59 · 3519 阅读 · 0 评论 -
关于系统分享功能在iPad的崩溃问题
举例以下Swift代码class ShareManager { static func share() { let items: [Any] = ["https://www.baidu.com"] let activity = UIActivityViewController(activityItems: items, applicationActivities: nil) UIApplication.shared.windows[0].rootVi原创 2021-07-05 10:09:55 · 949 阅读 · 0 评论 -
Swift的UIImage裁剪,缩放等代码实现
上代码:import Foundationimport UIKitextension UIImage { func crop(_ rect: CGRect) -> UIImage? { var newRect = rect newRect.origin.x *= scale newRect.origin.y *= scale newRect.size.width *= scale newRect.siz原创 2021-06-30 21:36:13 · 2267 阅读 · 0 评论 -
SwiftUI中Spacer部分无法响应点击问题
追加热区设置即可。原创 2021-06-13 15:11:28 · 1115 阅读 · 3 评论 -
iOS原生提供的文件分享功能
用 UIActivityViewController 。原创 2021-06-01 16:07:23 · 1034 阅读 · 0 评论 -
iOS开发中的时间字符串格式化
关键类是DateFormatter。示例代码:func formatTime() -> String { let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy/MM/dd HH:mm:ss" return dateFormatter.string(from: Date())}其中格式化字符的含义:yyyy: 年份MM: 月份dd: 日期HH: 小时mm: 分钟ss: 秒原创 2021-05-27 10:52:39 · 570 阅读 · 1 评论 -
WKWebView清除缓存
需要引入框架import WebKitlet recordType = WKWebsiteDataStore.allWebsiteDataTypes()WKWebsiteDataStore.default().fetchDataRecords(ofTypes: recordType) { records in WKWebsiteDataStore.default().removeData(ofTypes: recordType, for: records) { }}...原创 2021-05-01 16:03:51 · 903 阅读 · 0 评论 -
iOS系统原生提供的输入确认框
let controller = UIAlertController(title: "标题", message: "消息", preferredStyle: .alert)controller.addTextField { textField in textField.placeholder = "输入信息"}controller.addAction(UIAlertAction(title: "确认", style: .default, handler: { _ in guard le原创 2021-04-29 20:36:16 · 291 阅读 · 0 评论