ios
文章平均质量分 60
饭小粒
蓝牙&Android&iOS&EN
展开
-
iOS 解决pods-frameworks.sh:permission denied问题
直接进到 Pods-frameworks.sh所在的目录 然后执行 chmod 777 Pods-frameworks.sh 给这个文件增加读写执行权限。链接:https://www.jianshu.com/p/36e875e42896。商业转载请联系作者获得授权,非商业转载请注明出处。作者:brave_wu。转载 2023-04-03 21:39:58 · 905 阅读 · 0 评论 -
Swift高仿iOS网易云音乐Moya+RxSwift+Kingfisher+MVC+MVVM
这是一个使用Swift(还有OC版本)语言,从0开发一个iOS平台,接近企业级的项目(我的云音乐),包含了基础内容,高级内容,项目封装,项目重构等知识;主要是使用系统功能,流行的第三方框架,第三方服务,完成接近企业级商业级项目。2022年7月开发完成的,所以全部都是最新的,平均每3年会重新制作,现在已经是第三版了。转载 2023-03-29 18:57:41 · 1311 阅读 · 1 评论 -
Git 常见报错处理
git clone 过程中报下面的错误是git默认使用的通信协议出现了问题,可以通过将默认通信协议修改为http/1.1来解决该问题设置后在根目录.gitconfig文件查看是否生效。转载 2023-03-28 15:24:00 · 2591 阅读 · 3 评论 -
iOS Swift UITableView 和 UICollectionView 默认选中
UICollectionViewCell 没有像 UITableViewCell的 setSelected(_ selected: Bool, animated: Bool) 方法, 但是有 isSelected 属性。原文链接:https://blog.csdn.net/LeeCSDN77/article/details/111617071。// 在 reload 之后调用 selectItem。// index 为默认选中的row。2. 设置选中状态并取消选中状态。2. 设置选中状态并取消选中状态。转载 2023-03-11 16:15:16 · 666 阅读 · 0 评论 -
百度App iOS工程化实践: EasyBox破冰之旅
百度App现行有近三百个组件,组件间的依赖关系非常复杂,组件规模大小不一,组件间进行调用时在预处理阶段不同文件反复的import导致的头文件检索过程十分耗时,如苹果推荐,我们将大多数组件编译为framework,而在非framework的情况下,可以通过生成modulemap来完成static library的Clang Module Cache,具体可参见 WWDC 18: Behind the Scenes of the Xcode Build Process,这里就不再赘述。工欲善其事,必先利其器。转载 2022-11-08 17:47:37 · 2799 阅读 · 0 评论 -
Swift - 设置预编译宏
选中 target ---> Build Settings ---> 搜索 Swift Compiler - Custom Flags。展开 Active Compilation Conditions 进行设置,只能这样写:TEST, 不能像OC一样设置TEST=1。如果是 OC 和 Swift 混编的项目,OC也需要用到,则还是在 Preprocessor Macros 里添加一遍。链接:https://www.jianshu.com/p/257dc733328b。第三步、新增预编译宏。转载 2022-11-08 17:20:25 · 581 阅读 · 0 评论 -
Homebrew的安装、卸载与简单使用
是一款mac os平台下的软件包管理工具,拥有安装、卸载、更新、查看、搜索等很多实用的功能。简单的一条指令,就可以实现包管理,而不用你关心各种依赖和文件路径的情况,十分方便快捷。序号的选择可以根据自己的地区选择。2.homebrew的安装。查看可清理的旧版本包。打开终端输入如下指令。3.brew卸载脚本。转载 2022-11-05 16:21:40 · 970 阅读 · 0 评论 -
转~Static table views are only valid when embedded in UITableViewController instances
关联,在Container View上按住右键拖出一条线到Table View Controller释放鼠标右键弹出如下窗口,选择Embed,这样就大功告成了。单独拖出一个Table View Controller,在这里就可以将Table View的Content设置为Static Cells做你想做的事情;当在UIViewController中加入Table View,然后将其Content设置为。将放置Table View改为放置Container View;转载 2022-11-03 19:45:22 · 186 阅读 · 0 评论 -
Swift 编程语言教程(官方文档)
Swift 编程语言中文教程the swift programming language转载 2022-11-02 14:38:17 · 228 阅读 · 0 评论 -
swift制作framework静态库
新建项目选择Framework,命名MyViewSDK,语言是Swift。转载 2022-10-31 21:19:35 · 937 阅读 · 0 评论 -
iOS动态库实现插件化
系统在加载动态库时,会检查Framework的签名,签名中必须包含TeamIdentifier,并且Framework和主App的TeamIdentifier必须一致,目前而言,Apple并不希望开发者绕过App Store来更新App,因此需谨慎对待插件化的使用,对于不需要上架的企业级应用,是可以使用的。即可下载,如果使用真机测试,在同一网络下面,可将localhost缓存Mac的网路IP地址即可。将之前编译好的动态库放入服务器方便下载,然后在项目中下载并使用。将之前下载好的动态库加载到内存。转载 2022-10-30 20:46:09 · 791 阅读 · 0 评论 -
iOS插件化架构探索
以上便是利用Framework动态库进行插件化加载以及动态更新的所有实现,就目前而言,Apple并不希望开发者绕过App Store来更新App,因此需谨慎对待热更新的使用,对于不需要上架的企业级应用,是可以使用的。随着苹果开放环境的不断发展,苹果会不会给我们开发者惊喜呢,这就不得而知了。作者:大菠萝_DABLO链接:https://www.jianshu.com/p/8b89e3d4c3b2来源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。转载 2022-10-30 20:42:51 · 460 阅读 · 0 评论 -
Swift 中结构体和类的内存分析
Swift 中结构体和类的内存分析。转载 2022-10-30 19:52:18 · 97 阅读 · 0 评论 -
Swift中的捕获列表:强引用,弱引用,无主引用之间的区别
捕获列表位于代码中的闭包参数列表之前,并将环境中的值捕获为强,弱或无主。我们经常使用它们,主要是为了避免循环引用创建一个方法,方法中实例化Singer,并使用Singer实例的playSong()创建一个闭包,并返回这个闭包以供其他地方使用最后,我们可以调用sing()来获取我们可以在任何想要打印playSong()的地方调用的函数。转载 2022-10-30 19:16:03 · 511 阅读 · 0 评论 -
Xcode的编译过程
生成AST的过程词法分析()也叫扫描器,让源代码的字符流根据构词规范生成token流tokenize:tokenize就是按照一定的规则,例如token令牌(通常代表关键字,变量名,语法符号等),将代码分割为一个个的“串”,也就是语法单元)。涉及到词法解析的时候,常会用到tokennize。语法分析()是编译过程的一个逻辑阶段。语法分析的任务是在词法分析的基础上将单词序列组合成语法树,如“程序”,“语句”,“表达式”等等.语法分析程序判断源程序在结构上是否正确。源程序的结构由上下文无关文法描述。转载 2022-10-30 11:36:34 · 311 阅读 · 0 评论 -
swift打包动态/静态库,包括依赖第三方框架
6、添加需要支持的指令集(模拟器32位处理器测试需要i386架构,模拟器64位处理器测试需要x86_64架构,真机32位处理器需要armv7,或者armv7s架构,真机64位处理器需要arm64架构。4、导入第三方库,此处以SDWebImage为例.打包库里不能使用cocoapod的方式导入三方库,所以我去github下载了包,自己生成了iOS真机模拟器通用包(具体github有教程),导入第三方库后在头文件import。2、配置支持版本,配置打包库的类型(此出我们选择动态库,关于这几种库的异同请百度)转载 2022-10-28 21:53:36 · 1038 阅读 · 0 评论 -
iOS 静态库和动态库打包framework流程(纯swift版/swift、OC混编版)
系统及Xcode版本。转载 2022-10-28 21:43:50 · 1832 阅读 · 0 评论 -
一台电脑配置两个Git账号
存在如下情况:我们自己又个GitHub账号,用来做自己的一些代码练习,公司有个其他git的账号如:gitlab、gerrit等,用来工作。版权声明:本文为CSDN博主「Neo_HeFeiyang」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/HeFlyYoung/article/details/126879727。Host:是HostName的别名,可以自己取,一般取跟HostName一样的名字。转载 2022-10-28 12:24:19 · 569 阅读 · 0 评论 -
Swift 制作静态库
Embeded Framework: 用户可以制作的动态库,收到iOS平台的沙盒机制和签名机制限制,具有部分动态特性,可以在Extension可执行文件和APP可执行文件中执行,不能在不同app进程中共享,而且需要拷贝到目标程序。库:一段二进制文件+加头文件,使用场景一个是供别人使用,一个是在代码改动较小,减少编译时间,因为只是一段二进制文件,Link一下,即可使用.Xcode -> Project -> Targets -> + -> 选中 iOS -> Framework。转载 2022-10-26 16:47:27 · 352 阅读 · 0 评论 -
iOS Swift Framework静态库制作与发布
尽管只是用到了framework文件,没有任何其他源代码文件,如果framework是由Swift写的,并且xcode版本(准确说是xcode command line tools版本)为10.2时,还是需要添加一个源码文件路径,并且在该路径下放一个随意的Swift文件,空的也可以,只要后缀是.swift即可。在新建工程时会自动生成一个工程名.h的头文件,并已经默认添加到暴露的头文件中,在打包时还会生成一个工程名-Swift.h的桥接文件,会把工程里带@objc的Swift类/方法/属性暴露出去。转载 2022-10-26 16:14:56 · 1348 阅读 · 0 评论 -
swift ios 静态库的实现
链接:https://www.jianshu.com/p/45c0705154b1。1.swift不支持.a的静态库,因此只能制作.framework的静态库。商业转载请联系作者获得授权,非商业转载请注明出处。5.swift和oc混合的静态库的制作。4.纯swift静态库中包含静态库。作者:荔枝lizhi_iOS程序猿。3.纯swift静态库的制作。在使用的时候需要注意一个问题。转载 2022-10-26 16:10:49 · 640 阅读 · 0 评论 -
ios – OutputStream hasSpaceAvailable永远不会成为’true’
使用运行循环可以驱动流而不必担心线程.例如,如果通过outputStream属性写入输出流,则很可能是内部输入流(绑定到公共可见输出流),EASession对象使用该输入流来获取写入的字节.此内部输入流(不可见)也可以使用与公开提供的输出流outputStream相同的运行循环.不要将内部输入流与公共输入流不匹配!基本上,有两个公共流和两个内部流.每个公共流在内部都有一个关联的链接输入流具有绑定的输出流,输出流具有绑定的输入流.当线程被阻塞时,很难取消该块.也许,您应该尝试运行循环方法....转载 2022-07-19 16:38:15 · 218 阅读 · 0 评论 -
You may have encountered a bug in the Ruby interpreter or extension libraries.
环境:M1芯片问题:执行pod install 报错You may have encountered a bug in the Ruby interpreter or extension libraries.Bug reports are welcome.For details: https://www.ruby-lang.org/bugreport.html原因:未适配M1架构解决方法:sudo arch -x86_64 gem install ffiThena转载 2022-01-07 19:30:04 · 3373 阅读 · 0 评论 -
2021-09-18
NSString *str = @"12345";NSData *contentData = [str dataUsingEncoding:NSUTF8StringEncoding];NSInteger len = contentData.length;NSLog(@"内容长度%ld",(long)len);NSData *headData = [NSData dataWithBytes:&len length:4];NSInteger headContent = 0;[he转载 2021-09-18 20:22:54 · 65 阅读 · 0 评论 -
iOS页面切换的几种方式
从一个视图控制器切换到另一个视图控制器的几种方式1.模态(modal)画面显示方式 //显示模态画面 [self presentModalViewController: ... animated: ... ]; //关闭模态画面 [self dissmissModalViewController: ... animated: ... ];2.SwitchViewController中有两个控制器BViewController,CViewController转载 2021-09-18 11:29:34 · 891 阅读 · 0 评论 -
load、initialize方法的区别什么?在继承关系中他们有什么区别
load:当类被装载的时候被调用,只调用一次调用方式并不是采用runtime的objc_msgSend方式调用的,而是直接采用函数的内存地址直接调用的 多个类的load调用顺序,是依赖于compile sources中的文件顺序决定的,根据文件从上到下的顺序调用 子类和父类同时实现load的方法时,父类的方法先被调用 本类与category的调用顺序是,优先调用本类的(注意:category是在最后被装载的) 多个category,每个load都会被调用(这也是load的调用方式不是采用objc_msg转载 2021-09-16 17:24:06 · 354 阅读 · 0 评论 -
category如何被加载的,两个category的load方法的加载顺序,两个category的同名方法的加载顺序
category的加载是在运行时发生的,加载过程是,把category的实例方法、属性、协议添加到类对象上。把category的类方法、属性、协议添加到metaclass上。category的load方法执行顺序是根据类的编译顺序决定的,即:xcode中的Build Phases中的Compile Sources中的文件从上到下的顺序加载的。category并不会替换掉同名的方法的,也就是说如果 category 和原来类都有 methodA,那么 category 附加完成之后,类的方法列表里会有转载 2021-09-16 15:44:31 · 613 阅读 · 0 评论 -
class_copyPropertyList与class_copyIvarList区别
class_copyPropertyList返回的仅仅是对象类的属性(@property申明的属性),而class_copyIvarList返回类的所有属性和变量(包括在@interface大括号中声明的变量),下面做个简单的测试。首先,定义一个WFrequencyManager类 然后在测试类中写一个测试函数testProperties调用上述两个函数得到其返回结果再分别依次遍历输出其返回值 ...转载 2021-09-15 20:21:08 · 172 阅读 · 0 评论 -
使用Swift提高代码质量!
前言京喜APP最早在2019年引入了Swift,使用Swift完成了第一个订单模块的开发。之后一年多我们持续在团队/公司内部推广和普及Swift,目前Swift已经支撑了70%+以上的业务。通过使用Swift提高了团队内同学的开发效率,同时也带来了质量的提升,目前来自Swift的Crash的占比不到1%。在这过程中不断的学习/实践,团队内的Code Review,也对如何使用Swift来提高代码质量有更深的理解。Swift特性在讨论如何使用Swift提高代码质量之前,我们先来看看Swift本身相转载 2021-09-15 19:55:45 · 364 阅读 · 0 评论 -
15分钟看懂Objective-C
这篇文章不是教如何写Objective-C的这篇文章不是教如何写Objective-C的这篇文章不是教如何写Objective-C的重要的事情说三遍,看完这篇文章,你可能不会写Objective-C , 但是你肯定能看懂部分Objective-C的代码。那么开始吧!基础部分 :如果你有C或者C++ 基础,那么这部分可以跳过,因为这些基本类型,枚举,结构体,指针,循环语句,选择语句等都和C,C++ 一样#import <Foundation/Foundation.h>转载 2021-09-13 16:58:05 · 269 阅读 · 0 评论 -
MTU是什么
MTU是通信术语,意思是“最大传输单元”。简单解释一下:网络上的数据在传输的时候会被打成一个一个的“包”,网络设备的端口默认设置了MTU值,如果数据包的大小没有超过这个值,就直接被转发;如果超过了MTU值,就要被“分片”,分割成可以通过的尺寸。前提是设备允许分片。建议你不要改路由器的MTU,默认的1492是标准数值。一般来说,如果设备间(如网卡和路由器端口)的值不匹配,就会产生数据包碎片,影响网络性能。...原创 2021-09-13 16:10:12 · 4972 阅读 · 0 评论 -
J2ObjC 的使用
2018.11.05_更新:此文章已经很久,笔者已忘记具体相关这篇笔记的具体实现,如有此问题需求者,请移步Google的J2Objc相关文档进行阅读。Ps:根据笔者自己的使用测试对比,发现Xcode在实现J2ObjC时,比Eclipse实现J2ObjC成功率更高,且更方便快捷。So,此处先讲解Xcode中J2ObjC的实现。Xcode中配置并使用J2ObjC,实现Java代码转为Objective-c代码1.首先,到github上下载文件...转载 2021-09-02 11:09:19 · 418 阅读 · 0 评论 -
iOS - GATT Profile 简介
1、引言现在低功耗蓝牙(BLE)连接都是建立在 GATT (Generic Attribute Profile) 协议之上。GATT 是一个在蓝牙连接之上的发送和接收很短的数据段的通用规范,这些很短的数据段被称为属性(Attribute)。2、GAP详细介绍 GATT 之前,需要了解 GAP(Generic Access Profile),它用来控制设备连接和广播。GAP 使你的设备被其他设备可见,并决定了你的设备是否可以或者怎样与合同设备进行交互。例如 Beacon 设备就只是向外广播,不支持连转载 2021-08-20 15:48:08 · 539 阅读 · 3 评论 -
ios蓝牙扫描指定的设备scanForPeripheralsWithServices
文章目录0.苹果官方文档1.扫描广播的service UUIDs是2803或是CB00的设备2.扫描广播的service UUIDs是2803的设备2.1 苹果手机蓝牙工具显示2.2 安卓手机蓝牙工具显示3.生成CBUUID的字符串不能随便写4.options参数传了没用,还是可以搜到所有的设备0.苹果官方文档 [myCentralManager scanForPeripheralsWithServices:nil options:nil];If you specify nil .转载 2021-08-13 20:34:37 · 1714 阅读 · 0 评论 -
ios之解档归档知识,plist文件的存储读取
作者:Johnson链接:https://zhuanlan.zhihu.com/p/379878562来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。#import "HMPerosn.h"//// ViewController.m// 解档归档复习//// Created by lujun on 2021/6/11.//#import "ViewController.h"@interface ViewController ()@en.转载 2021-08-12 20:24:56 · 279 阅读 · 0 评论 -
iOS 归档 解档 unexpected class 问题
解决Error Domain=NSCocoaErrorDomain Code=4864 "value for key 'xxx' was of unexpected class 'xxx'.的问题情况如下:声明一个继承于NSObject的TestModel对象,并遵循NSSecureCoding协议重写以下方法,使用YYModel实现- (void)encodeWithCoder:(NSCoder *)coder - (nullable instancety...转载 2021-08-12 20:02:42 · 1079 阅读 · 0 评论 -
数据存储之归档解档 NSKeyedArchiver NSKeyedUnarchiver
在构建应用程序时,有一个重要的问题是如何在每次启动之间持久化数据,以便重现最后一次关闭应用前的状态。在iOS和OS X上,苹果提供了三种选择:Core Data、属性列表(Property List)和带键值的编码(NSKeyedArchiver)。当涉及到建模、查询、遍历、持久化等复杂的对象图时,Core Data无可替代。但并非所有应用程序都需要查询数据、处理复杂对象图,有时候使用NSKeyedArchiver更为简单。1. 使用NSKeyedArchiver如果要将各种类型的对象存储到文件中,转载 2021-08-12 17:14:28 · 483 阅读 · 0 评论 -
苹果手机(ios系统)蓝牙BLE的一些特点
摘自<BluetoothDesignGuidelines.pdf>文档1. pairing:苹果手机无法主动发起SMP配对流程,可通过以下两种方式发起配对流程:(1)从端主动发起配对流程;(2)从端在收到主端ATT指令后,返回SMP FAIL(错误码看SIG规范)给苹果手机,则苹果会重新发起配对流程。2. Connection Parameters:苹果的连接间隔默认为30ms,如果要更新,需要满足如下要求,且最小可以申请到20ms,如果蓝牙服务带HID服务,则可转载 2021-08-11 15:38:38 · 2214 阅读 · 0 评论 -
OC对象的本质(上) —— OC对象的底层实现原理
一个NSObject对象占用多少内存?Objective-C的本质平时我们编写的OC代码,底层实现都是C/C++代码Objective-C --> C/C++ --> 汇编语言 --> 机器码所以Objective-C的面向对象都是基于C/C++的数据结构实现的,所以我们可以将Objective-C代码转换成C/C++代码,来研究OC对象的本质。int main(int argc, const char * argv[]) { @autorele..转载 2021-03-03 17:05:37 · 261 阅读 · 1 评论 -
教你如何个性化Xcode头文件注释
每个iOS开发者新建class文件的时候都可以看到文件最上面声明的一些基本信息。而这些信息都是默认的,我们现在就要来自定义这些信息。添加一些自己想要添加的,比如Github,微博,博客,公司标签,自定义的链接等等等等。下面是Xcode默认的信息我们想要这样显示重点来了第一步、Finder -> 应用程序-> Xcode ->右键显示包内容然后可以看到一个content文件夹,我们要找到这个路径下的一个File Templates(文件模版)。路径为Content.转载 2021-02-09 16:03:16 · 349 阅读 · 0 评论