Thay đổi ngoại hình tự động
Xcode 11,4
Apple đã phát hành một bản cập nhật Xcode mạnh mẽ chứa một số điều hữu ích cho chủ đề này. Giao diện bây giờ có thể được chọn trực tiếp trong trình giả lập. Chỉ cần chọn Features > Toggle Appearance
hoặc + + A. Việc chuyển đổi ngoại hình tự động có thể rất quan trọng, ví dụ: đối với các kiểm tra ảnh chụp màn hình tự động trên dòng lệnh. Kịch bản trở nên dễ dàng như thế này khi sử dụng Xcode 11.4:
device_ids=("C741F3CD-FDAC-49EA-A4DB-7F797B97291E" "428183B6-3EB8-4D36-9938-9D07C141BF49")
# The value to use is now just 'dark' or 'light'
appearance=dark
for device in "${device_ids[@]}"; do
xcrun simctl boot $device
xcrun simctl ui $device appearance $appearance
done
Không cần phải giả lập giết hoặc cài đặt lại, đó là một chiến thắng hiệu suất lớn. Cũng không còn loay hoay với bất kỳ công cụ plist nào nữa - bao giờ hết. Hãy nhớ rằng bạn phải sử dụng id thiết bị có sẵn trong thời gian chạy bạn sử dụng. Tìm ra chúng bằng cách sử dụngxcrun simctl list
.
Xem thêm kịch bản hoàn chỉnh của tôi: https://github.com/Blackjacx/Scripts/blob/master/set-simulator-style.sh
Mã số 11.3
Có một cách sử dụng dòng lệnh để chuyển đổi một trình giả lập giữa chế độ sáng và tối. Nếu bạn có một mảng với ID thiết bị của mình, bạn có thể làm như sau:
device_ids=("C741F3CD-FDAC-49EA-A4DB-7F797B97291E" "428183B6-3EB8-4D36-9938-9D07C141BF49")
# Determine the plist value for the desired style: "dark" -> 2 / "light" -> 1
style=2
for device_id in "${device_ids[@]}"; do
plist_path="${HOME}/Library/Developer/CoreSimulator/Devices/${device_id}/data/Library/Preferences/com.apple.uikitservices.userInterfaceStyleMode.plist"
printf '\n%s' "Set style $style for device $device_id ($plist_path)"
killall "Simulator"
xcrun simctl shutdown booted
xcrun simctl erase $device_id
# Crate the plist since it might not be available after erase
[[ ! -f "$plist_path" ]] && /usr/libexec/PlistBuddy -c "save" $plist_path
# Set the style mode
plutil -replace UserInterfaceStyleMode -integer $style $plist_path
done
Nếu bạn muốn chỉ định tên thiết bị trong tập lệnh của mình - vì ID thiết bị khác nhau trên các máy khác nhau - bạn cũng có thể dễ dàng tìm thấy id của chúng bằng mã bash sau:
device_names=("iPhone SE" "iPhone 8" "iPhone 11 Pro" "iPhone 11 Pro Max")
device_ids=()
for name in "${device_names[@]}"; do
id=$(xcrun simctl list --json | jq ".devices | .[] | .[] | select(.name == \"$name\") | .udid" | cut -d\" -f2)
device_ids+=("$id")
done
printf '%s\n' "${device_ids[@]}"