iOS开发
记录工作中iOS开发相关技术
哈尔滨的酸柠檬
掌握iOS、MacOS、Flutter、PHP、前端、微信小程序开发技术,正在学习嵌入式开发知识
展开
-
Xcode13 显示Product文件夹
1、右键project.pbxproj,显示包内容2、第1步中,报内容里面编辑project.pbxproj3、mainGroup的内容复制到productRefGroup4、保存即可原创 2022-02-08 08:57:45 · 2352 阅读 · 0 评论 -
iOS开发 Xcode13-iOS 15适配(OC、Swift)
升级Xcode13后,编译的APP的导航栏(nav、tabbar)、tableview的section head会出现一些显示问题,在这里给出一些处理方法。UINavigationBarSwiftif #available(iOS 13.0, *) { let appearance = UINavigationBarAppearance() // 设置导航栏背景色 appearance.backgroundColor = .white // 去除导航栏阴影(如果原创 2021-09-29 16:50:05 · 2081 阅读 · 1 评论 -
Swift 调用C++代码
1.创建c++文件:Person.cpp和Person.hpp//// Person.cpp//#include "Person.hpp"#include "PersonExtern.h"Person::Person(){ age = 12; sex = true; name = "LINGLemon";}Person::Person(const char* name , const int age , const bool sex){ this-原创 2021-08-30 11:28:39 · 2368 阅读 · 0 评论 -
Swift 调用C代码
1.创建c文件:testC.h和testC.ctestC.h内容如下:#ifndef testC_h#define testC_h#include <stdio.h>void showValue(int *value);#endif /* testC_h */testC.c内容如下#include "testC.h"void showValue(int *value) { printf("old value = %d\n",*value);原创 2021-08-30 10:51:46 · 669 阅读 · 0 评论 -
Swift 沙盒文件转Data
对应Objective-C的NSData的使用,OC版:NSData *tmpData = [NSData dataWithContentsOfFile:tmpPath options:NSDataReadingMappedIfSafe error:nil];Swift版:let fileData : Data = FileManager.default.contents(atPath: item.path)!原创 2021-08-30 10:10:28 · 1594 阅读 · 0 评论 -
2021 CocoaPods 第一次“pod install” 慢
iOS-第一次安装cocoapods很慢或出错怎么办?appledeiMac: jz$ pod installAnalyzing dependenciesCloning spec repo `cocoapods` from `https://github.com/CocoaPods/Specs.git`[!] Unable to add a source with url `https://github.com/CocoaPods/Specs.git` named `cocoapods`.原创 2021-08-04 16:22:43 · 917 阅读 · 0 评论 -
2021 Cocoapods的简单安装、使用与更新版本(含M1安装方法)
Cocoapods的作用1 管理第三方框架2 自动下载第三方框架,而且会自动帮我们配置,不需要添加额外的第三方框架或者是动态库之类当你开发iOS应用时,会经常使用到很多第三方开源类库,比如JSONKit,AFNetWorking等等。可能某个类库又用到其他类库,所以要使用它,必须得另外下载其他类库,而其他类库又用到其他类库,“子子孙孙无穷尽也”,这也许是比较特殊的情况。原创 2016-05-10 15:17:44 · 6880 阅读 · 0 评论 -
Flutter开发笔记01 - 环境搭建(Mac,含M1解决方案)
苹果M1笔记本打开终端前需:打开Finder-> 打开应用程序->打开实用工具,找到终端.app,显示简介,把使用 Rosetta打开勾选上,然后重启终端一、Flutter SDK 下载在Flutter官网下载安装包,转到对应环境的下载页:安装和环境配置 | Flutter 中文文档 | Flutter 中文开发者网站注意:下载后,自行解压;推荐路径为:/Users/用户名/flutter镜像使用:由于在国内访问Flutter有时可能会受到限制,Flutter官方为中原创 2019-04-01 13:43:49 · 1432 阅读 · 0 评论 -
iOS开发:关于NSBundle
我们从bundle中获取一张图片,可以有这样的获取思路:1)获取主bundle 2)获取自定义bundle 3)获取自定义bundle中的资源通常可以这样写://主bundle,也就是可执行的工程的bundleNSBundle *mainBundle = [NSBundle mainBundle];//NSBundle *mainBundle = [NSBundle bundleForClass:[self class]];//放在主工程中的自定义bundleNSString *my原创 2021-05-24 14:22:41 · 1152 阅读 · 0 评论 -
iOS开发:iOS的静态库和动态库 【.a 和framework】的说明及博客汇总
一、什么是库?库是共享程序代码的方式。库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行。库分静态库和动态库两种。iOS中的静态库有 .a 和 .framework两种形式;动态库有.dylib 和 .framework 形式,后来.dylib动态库又被苹果替换成.tbd的形式。二、静态库与动态库的区别?静态库: 链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝。动态库: 链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节原创 2021-05-24 14:14:13 · 511 阅读 · 0 评论 -
动态库、静态库合并(动态库动态库、静态库静态库同样方法)
(1)终端输入如下指令lipo -create A的二进制文件路径 B的二进制文件路径 -output 新的二进制文件路径注意:是二进制文件,不是.framework。路径通过拖拽即可(2)删除合并前的指令集,并且保证新合并的指令集与以前的名字一致。...原创 2021-05-07 10:16:04 · 1304 阅读 · 0 评论 -
如何辨别.framework是动态库还是静态库
(1)cd xx.framework(2)file xx 注释:xx为.framwork下的二进制文件(3)判断:静态库包含“current ar archive random library”字样。动态库包含“dynamically linked shared library”字样(4)查看库所支持的指令集,如arm_v7,x86_64...原创 2021-05-07 10:14:11 · 1562 阅读 · 0 评论 -
“Do Not Embed”、“Embed & Sign”、“Embed Without Signing” 区别
Embed,嵌入,对于静态库选择Do Not Embed,动态链接选择Embed。Sign,签名,如果代码没有签名则选择Embed & Sign,否则Embed Without Signing。原创 2021-05-07 10:04:27 · 5788 阅读 · 0 评论 -
iOS开发 NSCondition的使用
1:NSCondition原理和作用NSCondition 的对象实际上作为一个锁和一个线程检查器:锁主要为了当检测条件时保护数据源,执行条件引发的任务;线程检查器主要是根据条件决定是否继续运行线程,即线程是否被阻塞。2:功能介绍NSConditon *condition =[ [NSCondition alloc]]init;[condition lock];//一般用于多线程同时访问、修改同一个数据源,保证在同一时间内数据源只被访问、修改一次,其他线程的命令需要在lock 外等待,只到.原创 2021-04-29 15:00:25 · 477 阅读 · 0 评论 -
iOS开发 解决无法识别framework中分类(类别拓展)方法(unrecognized selector sent to instance)的问题
使用https://blog.csdn.net/sinat_31177681/article/details/105862591里面的方法,检索了framework中的链接文件,发现是存在分类方法的签名的,可是实际运行的时候却报错解决方法是在Xcode Project的Build Settings下Other Linker Flags里面加入-ObjC标志。之所以使用该标志,和Objective-C的一个重要特性:类别(category)有关。根据这里的解释,Unix的标准静态库实现和Objecti原创 2021-04-26 15:35:27 · 2271 阅读 · 0 评论 -
xcode12解决error: Multiple commands produce ‘/Assets.car‘
在podfile文件的前面添加:install! 'cocoapods', :disable_input_output_paths => true原创 2021-03-15 12:38:16 · 1721 阅读 · 0 评论 -
【Flutter 混合开发】添加 Flutter 到 iOS
Flutter 混合开发系列 包含如下:嵌入原生View-Android 嵌入原生View-iOS 与原生通信-MethodChannel 与原生通信-BasicMessageChannel 与原生通信-EventChannel 添加 Flutter 到 Android Activity 添加 Flutter 到 Android Fragment 添加 Flutter 到 iOS每个工作日分享一篇,欢迎关注、点赞及转发。Flutter 可以作为 frameworks 添加到 iO.转载 2020-12-28 18:27:32 · 376 阅读 · 0 评论 -
iOS开发 设计获取不变的UUID
获取UUID的方法有很多,但是都会因为各种原因改变 /** 卸载应用重新安装后会不一致*/ + (NSString *)getUUID{ CFUUIDRef uuid = CFUUIDCreate(NULL); NSString *UUID = (__bridge_transfer NSString *)CFUUIDCreateString(NULL, uuid); CFRelease(uuid); return UUID; } .转载 2020-12-24 14:25:52 · 273 阅读 · 0 评论 -
iOS开发 后台运行以及相关内容整理
网上找了一篇内容概述比较简洁清晰的前言对于APP的前后台运行情况的了解,有助于我们在实际开发中规避一些问题,以及采取稳妥的方法处理和解决问题,是很必须的。应用的运行状态分为以下五种:Not running:应用还没有启动,或者应用正在运行但是途中被系统停止。Inactive:当前应用正在前台运行,但是并不接收事件(当前或许正在执行其它代码)。一般每当应用要从一个状态切换到另一个不同的状态时,中途过渡会短暂停留在此状态。唯一在此状态停留时间比较长的情况是:当用户锁屏时,或者系统提示用户转载 2020-12-24 09:51:35 · 838 阅读 · 0 评论 -
iOS开发 OC项目调用Swift方法
为防止出问题,建议以这样的方法做:1.建一个OC工程命名为SwiftOC2.新建一个swfit文件命名为Test.swift,会弹出提示,选择Create Bridging Header建立桥接文件,系统会建立“工程名-Bridging-Header.h”20160112200003812.png3.配置工程设置Defines Module 为Yes设置Product Module Name 为当前工程名此时系统会为工程创建一个“工程名-S...原创 2020-12-14 09:52:49 · 2103 阅读 · 0 评论 -
iOS开发 - 主屏交互
所谓的主屏交互也就是在手机的桌面页,用力的按压(当然别太用力。。按碎了屏幕)应用图标,生成的几个快捷操作按钮的。主屏交互的演示图.jpg主屏交互的按钮有指定的模型类,UIApplicationShortcutItem,添加shortCutItem有两种方式:静态添加 动态添加静态添加 shortCutItem这种方式主要是在工程的info.plist文件中添加相关的属性。如下图所示info plist.jpegUIApplicationShortcutIt..转载 2020-12-03 18:12:47 · 373 阅读 · 0 评论 -
Swift 制作静态库
Github地址:https://github.com/LINGLemon/LXFSwiftAppSwift不支持.a的静态库,因此只能制作.framework的静态库动态库和静态库的区别库:一段二进制文件+加头文件,使用场景一个是供别人使用,一个是在代码改动较小,减少编译时间,因为只是一段二进制文件,Link一下,即可使用.Framework: 一种打包方式,简单将二进制文件、头文件和其他一些信息聚合在一起。iOS中的Framework分类:系统级别: Dynamic Framew原创 2020-07-20 14:45:27 · 1283 阅读 · 0 评论 -
Swift 定时器
Github地址:https://github.com/LINGLemon/LXFSwiftAppimport UIKitclass TimerViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { let dataList = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 19, 20, 21,]原创 2020-07-07 14:23:27 · 1752 阅读 · 1 评论 -
Swift 制作Swift版的Framework及使用
iOS的静态库和动态库iOS 提供了.framework与.a两种方式制作 SDK 的方式。两者的区别在于, Framework 以包形式的存在,内部包含了 二进制文件、.h文件、资源文件等。而 .a文件实际上就是 二进制文件,如果要真正使用,还需要提供必要的.h文件和相应的资源文件。另外.framework可以是静态库或者动态库(只有苹果官方才能制作动态库),.a则一定是静态库。两者主要的创建方式看下图:本文主要介绍Framework的一些知识,以及如何在 Swift 平台上制作 Fr.原创 2020-07-06 15:28:31 · 3672 阅读 · 2 评论 -
iOS开发 Swift项目如何使用oc的代码
github demo:https://github.com/LINGLemon/LXFSwiftAppSwift项目中直接创建oc文件创建一个swift项目 在swift项目中随便创建一个oc文件. Xcode 会弹框子,提示如下 选择后,Xcode 会自动生成一个 .h 文件,文件名: "xxxx项目-Bridging-Header.h" 在 "xxxx项目-Bridging-Header.h" 中导入将需要在swift中使用的OC文件即可 在swift项目中直接使用即可也可以.原创 2020-07-06 14:39:23 · 1016 阅读 · 0 评论 -
Swift学习:协议
github地址:https://github.com/LINGLemon/XFAVFoundation一、协议的基本语法下面是协议的一些基本语法:1.定义一个协议protocol SomeProtocol { //这里是协议的定义部分}protocol AnotherProtocol{ //这里是协议的定义部分}2.自定义类型遵循协议使用冒号,遵循多个协议时,各协议间使用逗号分隔struct SomeStructure: SomeProtoco..转载 2020-07-03 17:35:04 · 213 阅读 · 0 评论 -
Swift 单例的实现与解析
单例 Singleton 是设计模式中非常重要的一种,在 iOS 中也非常常见。在之前的面试过程中也被问到过单例相关的问题,当时感觉自己答得不是很好,后来也是又深入研究了一下。本文主要是简单分析一下单例,并且讨论了一下 Swift 中单例的实现。Singleton 基本介绍单例是什么?单例模式(Singleton Pattern)是最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建转载 2020-07-03 10:56:31 · 1025 阅读 · 0 评论 -
Swift WKWebView详细解读
github地址:https://github.com/LINGLemon/LXFSwiftApp1.基本方法和属性首先介绍下WKWebView的一些常用的方法和属性:实际使用中,一般还要搭配使用到WKUIDelegate和WKNavigationDelegate中的一些方法。下面分别介绍这两个代理中的一些方法:WKUIDelegate(1)WKWebView创建初始化加载的一些配置func webView(webView: WKWebView, createWebViewWithC原创 2020-07-03 10:15:06 · 6955 阅读 · 3 评论 -
Swift 跳转到storyboard创建的界面
let destinationStoryboard = UIStoryboard(name:"storyboard文件名", bundle:nil)let destinationViewController = destinationStoryboard.instantiateViewController(withIdentifier: "控制器的id(在storyboard中设置)")self.navigationController?.pushViewController(destinationV.原创 2020-07-01 12:03:18 · 718 阅读 · 0 评论 -
Swift 字符串转类型
let projectName = Bundle.main.infoDictionary!["CFBundleExecutable"] as? Stringlet className = projectName! + "." + controllerNamelet vc = NSClassFromString(className) as! UIViewController.Typelet viewController = vc.init()self.navigationController?.pu.原创 2020-07-01 11:48:12 · 507 阅读 · 0 评论 -
Swift 自定义UITableView
github demo:https://github.com/LINGLemon/LXFSwiftAppUITableView是我们开发过程中比较常用的,用于显示一系列对象,UITableView继承自UIScrollView,UIScrollView可以在任意方向滑动,而UITableView只在垂直方向上滑动。UITableView中的内容是由UITableViewCell负责显示的。1. UITableViewCellUITableView由UITableViewCell组成,UITa转载 2020-07-01 10:21:44 · 1995 阅读 · 0 评论 -
iOS13 Scene Delegate详解
iOS13 项目中的SceneDelegate类有什么作用?自从Xcode11发布以来,当你使用新XCode创建一个新的iOS项目时,SceneDelegate会被默认创建,它到底有什么用呢。在本文中,我们将深入探讨iOS 13和Xcode 11的一些变化。我们将重点关注SceneDelegate和AppDelegate,以及它们如何影响SwiftUI、Storyboard和基于XIB的UI项目。通过阅读本文你将了解到:SceneDelegate和AppDelegate的新变化 他们是如何合作转载 2020-06-30 16:33:43 · 1043 阅读 · 0 评论 -
XCode 全局搜索framework和.a文件中的关键字
如搜索framework或者.a库中有没有使用UIWebView:使用终端,cd到项目路径下,使用命令行:find . -type f | grep -e ".a" -e ".framework" | xargs grep -s UIWebView原创 2020-04-30 15:21:24 · 1203 阅读 · 0 评论 -
iOS13 deviceToken获取
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { if (!deviceToken || ![deviceToken isKindOfClass:[NSData class]] || device...原创 2019-11-11 16:03:35 · 4090 阅读 · 0 评论 -
iOS 系统分享 UIActivityViewController
1、创建其分享的标题,内容或图片或链接NSString *testToShare = @"分享的标题";UIImage *imageToShare = [UIImage imageNamed:@"client"];NSURL *urlToShare = [NSURL URLWithString:@"http://www.baidu.com"];NSArray *activityI...原创 2019-08-09 14:31:58 · 371 阅读 · 0 评论 -
iOS UIView同时设置圆角和阴影
因为圆角和阴影不能同时设置,所以给原来的view添加一个shadow container view。/** * 周边加阴影,并且同时圆角 */+ (UIView *)addShadowToView:(UIView *)view withOpacity:(float)shadowOpacity shadowRadius:(CGFloat)shadowRadius andCornerRa...原创 2019-08-09 09:52:20 · 3064 阅读 · 0 评论 -
iOS 自定义转场动画 - present/dismiss转场动画改为push/pop的样式
直接上代码!1、准备工作:默认的ViewController类,和创建要present到的下一级控制器SecondViewController类。默认创建,不添加其他操作,可以自己改改背景色做区分。2、实现present动画:这里演示的动画类似原生的push和pop动画,present时界面由右向左覆盖上一级界面,dismiss相反过程。2.1、创建一个继承自NSObject的类LX...原创 2019-07-16 10:32:00 · 2447 阅读 · 0 评论 -
iOS TouchID/FaceID 开发
创建LXFAuthentication类的.h和.m文件,继承自LAContext.h代码如下://// LXFAuthentication.h// Test//// Created by 凌煊峰 on 2019/6/21.// Copyright © 2019 凌煊峰. All rights reserved.//#import <LocalAuthent...原创 2019-06-21 15:21:21 · 1576 阅读 · 0 评论 -
iOS 与JS交互之WKScriptMessageHandler协议
本文介绍如果使用WKWebView的WKScriptMessageHandler实现iOS与JS交互。WKWebView是Apple在iOS8推出的Webkit框架中的负责网页的渲染与展示的类,相比UIWebView速度更快,占用内存更少,支持更多的HTML特性。WKScriptMessageHandler是WebKit提供的一种在WKWebView上进行JS消息控制的协议。一、iOS调...原创 2019-05-17 15:20:37 · 5440 阅读 · 0 评论 -
iOS WKWebView 跳转appStore或者拨号
WKWebView默认禁止了一些跳转UIWebView打开ituns.apple.com跳转到appStore, 拨打电话, 唤起邮箱等一系列操作UIWebView默认支持的.WKWebView默认禁止了以上行为,除此之外,js端通过window.open()打开新的网页的动作也被禁掉了.如何支持呢?// 可以跳转appStore或者拨号-(void)webView:(WK...原创 2019-05-15 16:52:08 · 2886 阅读 · 0 评论