如何获取我的应用程序的 AppID 以访问 iOS 模拟器中的应用程序数据文件夹?
How to get AppID of my application to access application data folder in iOS simulator?
我正在为我的 iOS 应用构建 Cucumber/Calabash
测试。我需要在模拟器中访问我的应用程序数据文件夹,以将数据复制到该文件夹。
我可以走这条路:
~/Library/Developer/CoreSimulator/Devices/[DeviceID]/data/Containers/Data/Application/[NEED TO GET THIS AppID]
但我需要检测我的 [AppID]
才能访问正确的文件夹。有什么方法可以通过终端或使用一些 .sh
脚本从应用程序名称或包 ID 中获取它?
[[NSBundle mainBundle] bundlePath] 将为您提供应用程序的顶级文件夹。
它看起来像这样:
~/Library/Developer/CoreSimulator/Devices/[DeviceID]/data/Containers/Bundle/Application/[AppID]/[AppName.app]
然后你可以使用 NSArray 获取 [AppID]:
NSArray *components = [path componentsSeparatedByString:@"/"];
NSLog(@"AppID: %@", [components objectAtIndex:[components count] - 2]);
我已经使用这样的脚本解决了这个问题:
APPLICATION_DATA_FOLDER =
cd APPLICATION_DATA_FOLDER
for dir in *
do
IDENTIFIER=$(/usr/libexec/PlistBuddy -c "print :MCMMetadataIdentifier" ${dir}/.com.apple.mobile_container_manager.metadata.plist)
if [ "${IDENTIFIER}" == "YOUR APPNAME HERE" ]; then
cd -
echo "${APPLICATION_DATA_FOLDER}/${dir}"
exit 0
fi
done
我将应用程序数据文件夹作为路径传递 - 这个:
~/Library/Developer/CoreSimulator/Devices/[DeviceID]/data/Containers/Bundle/Application/
脚本遍历文件夹中的 .plist
个文件并尝试匹配我的应用程序名称
我分两步完成:
- 查找或添加(保存在模拟器上)一些独特的文件。在我的例子中,它是扩展名为 .xlsx 的文件。
在终端中使用可以是运行的脚本:
cd ~/Library/Developer/CoreSimulator/Devices/[DeviceId] && 找到 . -名称'*.xlsx'
它 returns 找到的文件的路径,您可以在其中使用正则表达式获得适当的应用程序 ID,例如:
./data/Containers/Shared/AppGroup/5BBE0D19-83A3-41D5-81DA-971CB547B9D0/File Provider Storage/test_pdf_file1578673688647.xlsx
在Swift4中,在viewDidLoad()
里面插入如下代码:
let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) // get the Documents folder path
let pathForDocumentDir = documentsPath[0]
print("pathForDocumentDir: \(pathForDocumentDir)")
例如:
class ViewController: UIViewController {
override func viewDidLoad() {
let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) // get the Documents folder path
let pathForDocumentDir = documentsPath[0]
print("pathForDocumentDir: \(pathForDocumentDir)")
}
}
这将在控制台输出中打印如下内容:
/Users/user/Library/Developer/CoreSimulator/Devices/11321A31-27D6-49E0-85C8-D7EDEFA6751F/data/Containers/Data/Application/BB9EAD09-17B5-4FA1-907A-0EDFC07BFA62/Documents
代码基于this source
我正在为我的 iOS 应用构建 Cucumber/Calabash
测试。我需要在模拟器中访问我的应用程序数据文件夹,以将数据复制到该文件夹。
我可以走这条路:
~/Library/Developer/CoreSimulator/Devices/[DeviceID]/data/Containers/Data/Application/[NEED TO GET THIS AppID]
但我需要检测我的 [AppID]
才能访问正确的文件夹。有什么方法可以通过终端或使用一些 .sh
脚本从应用程序名称或包 ID 中获取它?
[[NSBundle mainBundle] bundlePath] 将为您提供应用程序的顶级文件夹。 它看起来像这样:
~/Library/Developer/CoreSimulator/Devices/[DeviceID]/data/Containers/Bundle/Application/[AppID]/[AppName.app]
然后你可以使用 NSArray 获取 [AppID]:
NSArray *components = [path componentsSeparatedByString:@"/"];
NSLog(@"AppID: %@", [components objectAtIndex:[components count] - 2]);
我已经使用这样的脚本解决了这个问题:
APPLICATION_DATA_FOLDER =
cd APPLICATION_DATA_FOLDER
for dir in *
do
IDENTIFIER=$(/usr/libexec/PlistBuddy -c "print :MCMMetadataIdentifier" ${dir}/.com.apple.mobile_container_manager.metadata.plist)
if [ "${IDENTIFIER}" == "YOUR APPNAME HERE" ]; then
cd -
echo "${APPLICATION_DATA_FOLDER}/${dir}"
exit 0
fi
done
我将应用程序数据文件夹作为路径传递 - 这个:
~/Library/Developer/CoreSimulator/Devices/[DeviceID]/data/Containers/Bundle/Application/
脚本遍历文件夹中的 .plist
个文件并尝试匹配我的应用程序名称
我分两步完成:
- 查找或添加(保存在模拟器上)一些独特的文件。在我的例子中,它是扩展名为 .xlsx 的文件。
在终端中使用可以是运行的脚本:
cd ~/Library/Developer/CoreSimulator/Devices/[DeviceId] && 找到 . -名称'*.xlsx'
它 returns 找到的文件的路径,您可以在其中使用正则表达式获得适当的应用程序 ID,例如:
./data/Containers/Shared/AppGroup/5BBE0D19-83A3-41D5-81DA-971CB547B9D0/File Provider Storage/test_pdf_file1578673688647.xlsx
在Swift4中,在viewDidLoad()
里面插入如下代码:
let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) // get the Documents folder path
let pathForDocumentDir = documentsPath[0]
print("pathForDocumentDir: \(pathForDocumentDir)")
例如:
class ViewController: UIViewController {
override func viewDidLoad() {
let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) // get the Documents folder path
let pathForDocumentDir = documentsPath[0]
print("pathForDocumentDir: \(pathForDocumentDir)")
}
}
这将在控制台输出中打印如下内容:
/Users/user/Library/Developer/CoreSimulator/Devices/11321A31-27D6-49E0-85C8-D7EDEFA6751F/data/Containers/Data/Application/BB9EAD09-17B5-4FA1-907A-0EDFC07BFA62/Documents
代码基于this source