那片树海

用心做一件工艺品


  • 首页

  • 分类

  • 归档

  • 标签

  • 关于

CocoaPods的AppIcon错误

发表于 2019-03-15 | 更新于: 2026-05-11

不知道大家在 pod sepc lint 或者 pod repo push 验证或者推自己的 podspec 时有没有遇到这个错误

1
error: None of the input catalogs contained a matching stickers icon set or app icon set named "AppIcon"

当初我使用的还是 1.4.0 的版本,要使用一个新特性,更新到了 1.5.x,结果报了上面的错误,本来以为会在后面的版本当中修复,结果在 1.5.x 和 1.6.x 的版本中都没有解决,现在有 1.7.0 的 beta 版了,不知道这个问题修复没有,等 release 版本发布之后去看下。那我们要怎么度过这段艰难的时期呢,大致有以下几种方案:

  1. 拿到 podspec 文件强推到 podspec 仓库
  2. 注掉 CocoaPods 校验逻辑
  3. 在你的 pod 当中添加一个冗余的 Images.xcassets
  4. 不同版本的 CocoaPods 配合使用
阅读全文 »

给你的哈希算法加点“盐”

发表于 2019-03-15 | 更新于: 2026-05-11

我们在平常的开发过程中为了保证信息的完整性以及安全性,我们通常都会对信息进行哈希计算签名,然后比对签名信息。

但是黑客可以通过彩虹表反推原始输入,为了增加黑客的破解难度,我们会对原始输入做一些处理,通常的做法是加入另外一个输入(也就是盐)混淆,以 sha1 为例,大概是 sha1(message+salt) 这个样子。

注:message+salt 并不是表示字符串拼接,是表示经过特定的计算或者字符组合。

Hmac 算法(Keyed-Hashing for Message Authentication)是一个将盐加入哈希计算的标准算法,它会在计算过程中将 salt 混入计算过程中,而且它针对所有的哈希算法都通用,相比较我们自己的实现更标准也更安全。

阅读全文 »

2018年个人总结

发表于 2019-01-28 | 更新于: 2026-05-11

20190128-1

阅读全文 »

iOS单元测试-各种问题

发表于 2019-01-09 | 更新于: 2026-05-11

编写用例时注意

1.用例只针对 SDK 对外开放的入口

2.注意异常情况和边界值

3.注意用例之间的依赖情况

单测用例如何按照顺序执行

测试函数的执行顺序与测试的字符大小有关系,如- (void)test001Example > - (void)test002Example > - (void)testExample

理论上单元测试不应该控制用例的执行顺序,每个 case 都能够单独执行,但是针对某些特殊的情况,可以适当使用一次此特性。

阅读全文 »

iOS单元测试-代码实现

发表于 2019-01-09 | 更新于: 2026-05-11

iOS 的单元测试代码我们使用 Xcode 自带的 XCTest,XCTest 可以从逻辑和性能两个方向进行测试,下面我们来一起看下如何实现。

逻辑测试

1.为工程添加一个单元测试的 Target(已经有的可以略过这一步)

阅读全文 »

记一次cp错误

发表于 2018-11-15 | 更新于: 2026-05-11

前两天在编写脚本时遇到一个奇怪错误

1
2
rm -rf /Users/yzq/b/*
cp -r /Users/yzq/a/* /Users/yzq/b

使用这两个命令将 a 下面的工程拷贝的 b 中,然后编译 b 却始终报错,提示某个 framework 文件重复

a 工程编译是没有问题的
手动清空 b,将 a 中的文件手动复制到 b 编译也没有问题

最初以为是 rm -rf /Users/yzq/b/* 命令没有清除掉某些缓存或者隐藏文件之类的,后来验证发现和 rm 无关

经过文件比较发现报错的 framework 与正确的 framework 下某个文件存在差异,正确的是以链接(快捷方式)的方式存在的,而错误的是一个文件夹,文件夹下还有对应的文件,原来这种错误是我们复制时没有保留对应的文件属性导致的,使用 cp -a /Users/yzq/a/* /Users/yzq/b 进行复制即可解决,因为 -a 在复制的同时保留了文件的链接及文件属性

所以正确的命令应该是

1
2
rm -rf /Users/yzq/b/*
cp -a /Users/yzq/a/* /Users/yzq/b
阅读全文 »

Xcode 10 library not found for -lstdc++.6

发表于 2018-10-10 | 更新于: 2026-05-11

最近升级了 Xcode 10,发现编译的时候报如下错误,在 Xcode 9 上正常:

1
library not found for -lstdc++.6

这个是因为 iOS 12 废弃了 libstdc++,也删除了相关的库,改为使用 libc++替代

解决方案

将缺失的库拷贝到原来对应的目录下,使 Xcode 能够引用

将相应的库拷贝到如下四个目录当中,才能保证模拟器和真机都能用,缺少哪个库拷贝哪个就行,不用全部拷贝

1
2
3
4
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/lib/
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/lib/
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib/

文件下载:libstdc++

其他

如果拷贝进去之后重启 Xcode 编译还是报这个错误,建议在 TARGETS -> Build Phases -> Link Binary With Libraries 当中把当前依赖添加进去

多说两句

这种方法虽然可以暂时解决问题,但最好还是升级下相关库,使用新的库和 API。

编写一个基于node的CLI

发表于 2018-09-05 | 更新于: 2026-05-11

最近因为需要给其他同事提供一些方便开发的工具,就写了一个基于 node 的 CLI,下面给大家分享下怎么自己去动手写一个基于 node 的 CLI。

原理

当前端工程安装到全局目录下之后,可以直接通过别名来执行 package.json 当中 bin 下面的 js 文件,我们就是通过编写这个 js 文件来实现相应命令。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
"name": "testnode-cli",
"version": "1.0.0",
"description": "CLI测试",
"main": "index.js",
"bin": {
"testnode": "./bin/index.js"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "git@github.com:yangzq007/testnode-cli.git"
},
"author": "yangzq007@126.com",
"license": "ISC",
"dependencies": {
"commander": "^2.15.1"
}
}
阅读全文 »

Cocoapods target has transitive dependencies that include static frameworks

发表于 2018-07-09 | 更新于: 2026-05-11

最近在写一个新的 Swift 工程,在引用旧的 objective-c 的 pod 时开启了 use_frameworks!配置项,结果在 pod install 和 pod update 出现了这么一个问题

1
target has transitive dependencies that include static frameworks: (AAA)

问题原因

Podfile 中不使用 use_frameworks! 时是会生成相应的 .a(静态链接库)文件,然后通过 static libraries 来管理 pod 代码,在 Linked 时会包含该 pod 引用的其他的 pod 的 .a 文件

Podfile 中使用 use_frameworks! 时是会生成相应的 .framework 文件(动态链接库:实际内容为 Header+动态链接库+资源文件),然后通过 dynamic frameworks 的方式来管理 pod 代码,在 Linked 时会包含该 pod 引用的其他的 pod 的 .framework 文件

我们开启了 use_frameworks! 以动态 framework 的方式引用了 AAA,然而 AAA 实际上是一个静态库,需要拷贝并链接到该 pod 中,然而 dynamic frameworks 方式并不会这么做,所以就报错了。

解决方案

在引用 AAA 的 pod 的 podspec 文件当中开启 static_framework 配置

1
s.static_framework = true

把该 pod 作为一个静态 framework 来编译链接,这样 AAA 就会被拷贝链接到到该 pod 的 framework 当中,这样就能正常引用了。

iOS Archive之后出现Other Items无法导出

发表于 2018-05-28 | 更新于: 2026-05-11

最近在 iOS 打包时碰到了无法导出为 ipa 的情况,问题表现为打包之后包出现在 Other Items 下而不是 iOS Apps 下。

这是因为打包的项目中某些配置导致打出来的包多了一些文件,网上大致有以下几种解决方案:

1.依赖工程的 skip install 设置为 Yes,Build Settings->Deployment->Skip Install

2.依赖工程 Build Phases->Copy Headers 中所有的头文件拉到 Project 下,即 Public 和 Private 下不能有文件

3.清空 Build Settings->Deployment->Installation Directory 选项的内容

这里我需要指出的是如果你是升级了 CocoaPods 之后出现的这种情况,而且 CocoaPods 的版本大于 1.3.1 并且小于 1.5.2,那么也有可能是 CocoaPods 的脚本错误造成的,所以可以尝试下

4.将 CocoaPods 降级至 1.3.1 或者升级为大于等于 1.5.2 的版本

另外苹果官方有个文档,虽然比较旧,也可以参考下
https://developer.apple.com/library/content/technotes/tn2215/_index.html

123…6
树海

树海

59 日志
1 分类
21 标签
RSS
GitHub Weibo
© 2026 树海
由 Hexo 强力驱动
|
主题 — NexT.Muse