曾静的博客

但行好事,莫问前程.

嗨,我是曾静 (@devzeng),目前暂居深圳。


这是我用来记录平日学习笔记的地方,欢迎您的访问.

从Xcode中提取iPhone新机型信息

2024年9月10日,iPhone 16 系列正式发布,本次主要发布了iPhone 16、iPhone 16 Plus、iPhone 16 Pro和iPhone 16 Pro Max四款机型。

iphone16-series

每年发布新机型都需要提取一下iPhone的新机型信息,方便后续查询展示使用。现有的历史的数据是从Apple_mobile_device_types.txt 文件中提取的,新的数据的话就要更新之后才能获取到。

去年发布的 iPhone 15 的时候是从 Xcode 本地数据库中获取的,最近想要查数据的时候发现不记得怎么弄了,这里记录一下操作的路径。

首先需要安装最新的 Xcode 16.0.0 Release Candidate 版本,推荐使用 Xcodes.app 来管理多个Xcode版本。

xcodes

1、在Xcode的安装目录下面找到 device_traits.db 这个文件,路径如下(如果Xcode命名不一样按照实际情况修改):

/Applications/Xcode-16.0.0-Release.Candidate.app/Contents/Developer/Platforms/iPhoneOS.platform/usr/standalone/device_traits.db

2、使用SQL查询,获取 iPhone 16 系列机型信息

SELECT * FROM Devices WHERE ProductDescription LIKE 'iPhone 16%'

execute-sql

其中 ProductType 字段对应的是机型,ProductDescription 字段对应的是机型名称。

查询结果如下:

iPhone17,1 : iPhone 16 Pro
iPhone17,2 : iPhone 16 Pro Max
iPhone17,3 : iPhone 16
iPhone17,4 : iPhone 16 Plus

写了一个简单的脚本(根据自己的需要调整一下参数,参考这里实现):

#!/bin/bash 

set -e

XCODE_APP="$(ls /Applications | grep Xcode- | sort -r | head -n 1)"
PREFIX="iPhone 16"
DEVICE_TRAITS_DATABASE="/Applications/${XCODE_APP}/Contents/Developer/Platforms/iPhoneOS.platform/usr/standalone/device_traits.db"
SQL_QUERY="SELECT DISTINCT CASE WHEN INSTR(ProductType, '-') > 0 THEN SUBSTR(ProductType, 1, INSTR(ProductType, '-') - 1) ELSE ProductType END AS DeviceType, ProductDescription AS DeviceDescription FROM DEVICES WHERE ProductDescription LIKE '${PREFIX}%';"

echo "DeviceType : DeviceDescription"
sqlite3 -readonly -separator $'\t' $DEVICE_TRAITS_DATABASE "$SQL_QUERY" | awk -F '\t' 'NR>0 { print ""$1" : "$2"" }'
echo "-----------------------------"

参考资料

最近的文章

iOS使用optool注入动态库

年初为排查性能问题写了一个动态获取函数调用耗时的工具(Kirin)。工具主要包括两个部分:macOS应用,负责发送采集指令,格式化数据生成 Chrome Trace Viewer 用到的 Trace Event Format 格式的数据;framework动态库,嵌入到App里,负责接收指令,采集耗时数据。使用的时候是直接将framework拖到项目里面运行项目就可以了,但是实际场景下Debug阶段可以通过Instrument更加的方便大多数时候需要定位生产版本的问题,就需要将现有的ipa...…

Note继续阅读
更早的文章

Windows下制作Chrome多版本测试程序

前段时间基于CEF(Chromium Embedded Framework)做了一个Windows上的应用,主要能实现动态加载打包好的Web资源包,因为使用的是较低版本的Chrome内核,发现存在较多的兼容性问题,想到以前做IE兼容性测试的时候可以使用 IETester 来做IE不同版本之间的兼容性测试。查了一些资料发现可以通过制作便携版的Chrome来实现多版本Chrome共存。因为经常要切版本,这里记录一下整个过程:1、提取启动程序(1)到官网下载 GoogleChromePortab...…

Note继续阅读