Change login shells without chsh

前言

最近心血來潮更新了 brew,其中我正在使用的 shells - zsh 也一併更新了,才發現當初在從 bash 轉到 zsh 的時候有指定到版號的部分⋯也就是長得像這樣

/usr/local/bin/zsh-5.6.1

zsh 一更新之後,我的 iterm2 便很合理地打不開,因為找不到 login 的 shells;
當初我是在 bash 裡頭使用 chsh 來變更

chsh -s $(which zsh)

如今打不開 iterm2 該如何更改呢?

使用者與群組

首先先到 使用者與群組

並先解鎖來得到更改的權限

就可以按住 control 並點擊使用者,就會出現 進階選項 可以選擇

最後就可以在 登入 shell 那欄更改即可!

Resign .ipa

前言

我們都知道 iOS 是使用 ipa 檔案來安裝 app,而該如何換掉 ipa 裡頭的憑證呢?

解壓縮

首先,我們先將 Application.ipa 解壓縮,可以得到一個 PayLoad 的資料夾,裡頭包含著一個應用程式 Application

移除舊有的簽章

接著我們透過 terminal 來進行移除的動作

rm -rf PayLoad/Application/_CodeSignature

找出你打算簽章的 provisionprofile

你可以透過 Apple developer 的網頁直接下載,或是查看本機裡頭的檔案,路徑會是在:

~/資源庫/MobileDevice/Provisioning Profiles/

用 Finder 到那路徑之後,可以使用空白鍵來進行預覽,
透過名稱以及 SHA-1 來辨別。

嵌入 mobileprovision 到 app 之中

接著就複製並改名字放入 app 中

cp yourProvisionProfile.mobileprovision Payload/Application.app/embedded.mobileprovision

來製作簽章所需要的 entitlements.plist

先將 .mobileprovision 輸入成 profile.plist

security cms -D -i yourProvisionProfile.mobileprovision  > profile.plist

再來利用 profile.plist 輸出成 entitlements.plist

/usr/libexec/PlistBuddy -x -c 'Print :Entitlements' profile.plist > entitlements.plist\

記得 App Bundle Identifier 得和簽章的名稱一致

/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier tw.Archie.Application" Payload/Application.app/Info.plist

就可以開始簽章了!

我們先透過 security 來找尋並複製剛剛 .mobileprovision 的 SHA-1

security find-identity -p codesigning -v

這邊記得要從 Frameworks 開始一個一個簽,再來才是 App 本身;
假設你的 mobileprovision SHA-1 為 B77ED97FBFC708A802BDB159CC2ED4E2A4472A09

codesign -f -s B77ED97FBFC708A802BDB159CC2ED4E2A4472A09 --entitlements entitlements.plist Payload/Application.app/Frameworks/someFramework.framework

一個一個簽章完之後,便可以簽署 app 了

codesign -f -s B77ED97FBFC708A802BDB159CC2ED4E2A4472A09 --entitlements entitlements.plist Payload/Application.app/Application

最後確認是否有簽對

我們可以透過 codesign 來查詢

codesign -vv -d Payload/Application.app

如果資訊都沒錯的話,就來輸出吧!🎉

zip -qr Resigned.ipa Payload

題外話,使用 Xcode 安裝

就在 Xcode 之中打開 Devices and Simulators 視窗,並將剛剛最後產出的 ipa 直接拖拉到你的裝置即可!