那片树海

用心做一件工艺品


  • 首页

  • 分类

  • 归档

  • 标签

  • 关于

一行命令执行系列任务

发表于 2022-07-04 | 更新于: 2022-07-04 | 分类于 技术文章

日常开发过程中,安装命令行工具过程有时候比较繁琐,使用脚本时需要将脚本仓库克隆下来,我们怎么能够简化这些过程呢,homebrew的安装过程提供了一种解决方案,就是直接通过bash执行一个远端的sh文件

1
2
# homebrew安装命令
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

实现方式

/bin/bash -c表示命令会从后面紧跟的字符串读取,如果字符串后面还有内容,则作为参数。(-c: cmd)

curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh表示请求install.sh的源内容

这样就可以读取远端的一个脚本,执行脚本了,在脚本中我们可以做很多自动化的工作,使用者可以在不用下载或者安装的情况执行这些动作

GitLab实现

企业内部一般都使用的是GitLab托管代码,并且有权限控制

GitLab官方推荐使用如下方式访问,文档地址

1
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/13083/repository/files/app%2Fmodels%2Fkey%2Erb?ref=master"

your_access_token在GitLab仓库的setting选项当中可以生成,而且仅展示一次,请注意保存,这个用来做身份校验。

13083是你仓库的Project ID,这个一般在Project overview就可以看到。

app%2Fmodels%2Fkey%2Erb是app/models/key.rb的urlencode,是文件路径的urlencode。在命令中files后面的部分要使用文件在仓库的路径的urlencode形式,这样才能保证这部分是一个整体,不会在url解析时被误解

所以一个完整的执行远程GitLab文件脚本的命令如下:

1
/bin/bash -c "$(curl --header "PRIVATE-TOKEN: <your_access_token>" "https://<your_gitlab_domain>/api/v4/projects/<your_project_id>/repository/files/<your_file_path_urlencode>?ref=master)"

fastlane移除苹果两步验证

发表于 2022-03-11 | 更新于: 2022-07-11 | 分类于 技术文章

苹果的AppleID现在都开启了两步验证,在登录新设备或者进行一些操作时都需要提供二次验证的验证码(已登录设备、绑定手机号、绑定邮箱接收),这个功能提高了AppleID的安全性,但也给自动化打包带来了一些困扰,我们的打包过程会被中断,下面就简单介绍两种可以在fastlane中移除苹果两步验证的方案。

参考文档:http://docs.fastlane.tools/getting-started/ios/authentication/

使用应用特殊密码

点击链接appleid.apple.com/account/manage进入AppleID管理页面,点击App专用密码,然后生成。(此密码仅展示一次,请注意保存)

将专用密码配置在fastlane的环境变量当中即可

1
ENV["FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD"] = "xxxx-xxxx-xxxx-xxxx"

此种方式仅支持upload_to_app_store、upload_to_testflight等上传二进制动作,其他的与App Store Connect交互的动作不支持。

使用App Store Connect API key(推荐)

点击https://appstoreconnect.apple.com/access/api进入App Store Connect用户与访问下面的Keys页面,生成一个API key(请确保自己有权限使用这个功能,如果看不到这个tab,也可以让账号持有者帮你创建),获得key_id,issuer_id并下载API Key的p8文件(此文件仅能下载一次,请注意保存)

在调用动作之前,向Apple请求获得api_key,并使用即可

1
2
3
4
5
6
7
8
9
10
11
lane :release do
api_key = app_store_connect_api_key(
key_id: "D383SF739",
issuer_id: "6053b7fe-68a8-4acb-89be-165aa6465141",
key_filepath: "./AuthKey_D383SF739.p8",
duration: 1200, # optional (maximum 1200)
in_house: false # optional but may be required if using match/sigh
)

pilot(api_key: api_key)
end

本人更推荐自动将api_key自动写入上下文的这种写法,fastlane的标准动作都会去上下文当中取api_key,写法上更方便一点

1
2
3
4
5
6
7
8
9
10
11
12
lane :release do
app_store_connect_api_key(
key_id: "D383SF739",
issuer_id: "6053b7fe-68a8-4acb-89be-165aa6465141",
key_filepath: "./AuthKey_D383SF739.p8",
duration: 1200, # optional (maximum 1200)
in_house: false # optional but may be required if using match/sigh
)

# Automatically loads Actions.lane_context[SharedValues::APP_STORE_CONNECT_API_KEY]
pilot
end

Jenkins使用指南

发表于 2022-02-24 | 更新于: 2022-07-04 | 分类于 技术文章

Jenkins官方文档:https://www.jenkins.io/doc/

安装、启动和更新

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#安装最新LTS版本(LTS:Long-term support,长期支持)
brew install jenkins-lts

#安装特定的LTS版本
brew install jenkins-lts@YOUR_VERSION

#启动Jenkins服务
brew services start jenkins-lts

#重启服务
brew services restart jenkins-lts

#更新版本
brew upgrade jenkins-lts

启动服务之后,可以用浏览器打开http://localhost:8080,然后根据提示完成安装即可。

局域网内无法通过ip访问的问题

使用homebrew安装Jenkins之后会将httpListenAddress默认设置为127.0.0.1,导致只能本机通过localhost访问,局域网内其他机器无法通过ip访问。要修复此问题,需要将如下文件当中的httpListenAddress配置修改为本机ip或者0.0.0.0,然后重启Jenkins即可。

1
2
3
// 注:如果你安装的是非LTS版本,则文件名为homebrew.mxcl.jenkins.plist
~/Library/LaunchAgents/homebrew.mxcl.jenkins-lts.plist
/usr/local/opt/jenkins/homebrew.mxcl.jenkins-lts.plist

强制删除插件

在某些情况下,安装插件异常,插件既不能正常安装,也不能通过Jenkins提供的页面操作删除,此时可以到Jenkins存储插件的目录,将文件删除重启即可。

插件目录:~/.jenkins/plugins

注:需同时删除插件文件夹和.jpi文件

远程触发

GitLab场景推荐使用构建触发器 -> Build when a change is pushed to GitLab触发器(此触发器需要Jenkins的GitLab插件,默认安装,如果没有,请手动安装),该远程触发器可以获取到GitLab触发仓库传递过来的参数,包含仓库地址,分支,tag,推送人等信息,很实用,参数详情可以参考gitlab-plugin中的Defined variables部分。

远程调用或者脚本触发场景推荐使用构建触发器 -> 触发远程构建,使用此触发器,需要设置一个token,拼在webhook url上即可。如下是一个curl调用范例.

1
curl JENKINS_URL/job/app/job/user-release/build?token=sh123

如果需要传递参数,请使用如下方式,使用使用参数时,需要将参数配置在参数化构建过程当中。

1
curl JENKINS_URL/job/app/job/user-release/buildWithParameters?token=sh123&username=yzq

构建触发器 -> Generic Webhook Trigger用作不传递参数的普通触发器也是一个选择,但是此触发器的参数支持较弱,仅支持form方式的参数提交,不太方便扩展,不太推荐。

远程触发403或404报错,提示权限问题

此问题是远程触发鉴权失败导致,需要在触发链接上添加身份信息,此处需要Jenkins用户的用户ID和Token。用户ID为登录的用户名,Token可以在Dashboard->用户列表->某个用户->设置->API Token处生成,生成后仅展示一次,注意保存。获取到用户ID和Token之后按照如下方式调用即可

1
curl https://userId:token@myjenkins.com/job/app/job/user-release/build?token=sh123

Swift混编踩坑指南

发表于 2021-09-02 | 更新于: 2022-04-07 | 分类于 技术文章

第一次在OC工程当中添加Swift文件或者在Swift工程当中添加OC文件时,Xcode会提示你创建一个名称为{projectname}-Bridging-Header.h的文件,点击Create Bridging Header创建。

Swift调用OC

在{projectname}-Bridging-Header.h导入需要调用的OC代码的头文件,即可在Swift代码中直接引用对应的类和变量

1
2
3
4
5
6
//
// Use this file to import your target's public headers that you would like to expose to Swift.
//

#import "SHOCUtil.h"
#import "SHTest.h"
阅读全文 »

切换各种源

发表于 2020-04-28 | 更新于: 2021-10-11

我们在使用一些工具的时候因为他们的服务或者资源托管在国外的服务器上,会导致我们请求或者下载的速度非常慢,这是一种非常不好的体验,切换相关镜像源使用国内的服务可以极大改善这种情况。

Homebrew

替换brew.git:
cd "$(brew --repo)"
git remote set-url origin https://mirrors.ustc.edu.cn/brew.git

替换homebrew-core.git:
cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core"
git remote set-url origin https://mirrors.ustc.edu.cn/homebrew-core.git

重置brew.git:
cd "$(brew --repo)"
git remote set-url origin https://github.com/Homebrew/brew.git

重置homebrew-core.git:
cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core"
git remote set-url origin https://github.com/Homebrew/homebrew-core.git
阅读全文 »

macOS 10.15.4下Sketch等三方软件无法打开

发表于 2020-04-28 | 更新于: 2020-04-28

电脑更新macOS Catalina 10.15.4之后,原来安装的Sketch、CleanMyMac等第三方软件打不开了,直接崩溃

解决方案:打开终端,执行如下命令

xattr -cr /Applications/xxx.app
codesign --force --deep --sign - /Applications/xxx.app

YCode工具集

发表于 2019-09-10 | 更新于: 2019-09-11

最近在新的团队中各个团队的不同的代码风格对协作造成了较大的影响,然后就想除了人工方式能不能用工具的方式来使大家的代码风格统一,于是就写了YCode这个工具集。

YCode目前只提供代码段功能,后续会加入代码模板功能,如果大家有什么想法或者想要的功能,也可以给我提issue或者发邮件,我会慢慢完善的。如果你觉得YCode确实对你的工作有所帮助,能点个star或者推荐给其他人就更好了,多谢大家。

YCode地址
代码段仓库地址

用法

Xcode代码段

安装之后就可以使用已经写好的代码段了,比如你在Xcode当中输入yLazyUILabel,就可以得到现成的一整段代码,具体提供的片段可以在代码段仓库地址或者Xcode当中查看。

应用程序无法打开或文件损坏

发表于 2019-05-27 | 更新于: 2019-11-27

Mac在使用非App Store下载的应用时,经常会遇到提示 ““xxx.app”已损坏,打不开。您应该将它移动到废纸篓” 或者 “打不开“xxx.app”,因为它来自身份不明的开发者”。

解决方案:将 “系统偏好设置->安全性与隐私->通用” 下面的 “允许从以下位置下载的App” 修改为 “任何来源”

问题1:不能修改设置
点击安全性与隐私面板左下角的 “🔐点按锁按钮以进行更改”,输入电脑管理员密码,即可修改

问题2:“允许从以下位置下载的App” 下没有 “任何来源” 选项
打开终端,输入sudo spctl --master-disable回车,然后输入电脑管理员密码回车执行,就可以在设置面板上看到 “任何来源” 选项了

问题3:提示 “无法打开“xxx”,因为无法确认开发者的身份”
右键应用程序、打开或者按住control点击应用程序

问题4:已经开启任何来源,但还是打不开(macOS Catalina 10.15以上会遇到)
打开终端,输入以下命令sudo xattr -d com.apple.quarantine /Applications/xxxx.app,重启应用即可。
如果应用名字有空格,请在命令当中转义,或者先修改应用程序名称,可以打开后再改回来。

如何绘制好iPhone上的1像素

发表于 2019-04-02 | 更新于: 2020-05-06

最近在开发过程中遇到了一个问题,就是当我用22.1999…的约束(请注意这里是约束)设置一个CollectionView的左右边距时,在iPhone 8和iPhone X上绘制出来的左边分别为22和22.33,这微小的数值差距,导致了本该显示4个元素的CollectionView在iPhone X上只显示了3个,问题实例看这里。

为什么变成了22和22.33

iPhone 8 iPhone X
UIKit Size 375*667 375*812
分辨率 750*1334 1125*2436
UIKit Scale factor 2 3
阅读全文 »

CocoaPods的AppIcon错误

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

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

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配合使用
    阅读全文 »
12…6
树海

树海

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