如何获取我的应用程序的AppID以访问iOS模拟器中的应用程序数据文件夹?

如何获取我的应用程序的AppID以访问iOS模拟器中的应用程序数据文件夹?,ios,sh,calabash-ios,Ios,Sh,Calabash Ios,我正在为我的iOS应用程序构建Cucumber/Calabash测试。我需要访问模拟器中的应用程序数据文件夹,以便将数据复制到该文件夹。 我可以走这条路: ~/Library/Developer/CoreSimulator/Devices/[DeviceID]/data/Containers/Data/Application/[NEED TO GET THIS AppID] 但是我需要检测我的[AppID]才能访问正确的文件夹。是否有任何方法可以通过终端或使用一些.sh脚本从应用程序名称或bu

我正在为我的iOS应用程序构建
Cucumber/Calabash
测试。我需要访问模拟器中的应用程序数据文件夹,以便将数据复制到该文件夹。 我可以走这条路:

~/Library/Developer/CoreSimulator/Devices/[DeviceID]/data/Containers/Data/Application/[NEED TO GET THIS AppID]

但是我需要检测我的
[AppID]
才能访问正确的文件夹。是否有任何方法可以通过终端或使用一些
.sh
脚本从应用程序名称或bundle id获取它?

[[NSBundle mainBundle]bundlePath]将为您提供应用程序的顶部文件夹。 它看起来像这样:

APPLICATION_DATA_FOLDER = $1
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/[AppID]/[AppName.app]

然后,您可以使用NSArray获取[AppID]:

NSArray *components = [path componentsSeparatedByString:@"/"];
NSLog(@"AppID: %@", [components objectAtIndex:[components count] - 2]);

我已经用这样的脚本解决了这个问题:

APPLICATION_DATA_FOLDER = $1
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”

  • 它返回找到的文件的路径,您可以在其中使用Regex获得适当的应用程序Id,例如:

    ./data/Containers/Shared/AppGroup/5BBE0D19-83A3-41D5-81DA-971CB547B9D0/File Provider Storage/test_pdf_file1578673688647.xlsx
    

    在Swift 4中,将以下代码插入
    viewDidLoad()

    e、 g:

    这将在控制台输出中打印如下内容:

    /Users/user/Library/Developer/CoreSimulator/Devices/11321A31-27D6-49E0-85C8-D7EDEFA6751F/data/Containers/Data/Application/BB9EAD09-17B5-4FA1-907A-0EDFC07BFA62/Documents
    

    基于

    的代码我必须通过终端命令访问此代码。。。(用于葫芦测试的.rb文件)我的应用程序也是用C#和Xamarin编写的,而不是用objective C或swift。。。我可以通过搜索BundleName在Containers/**Bundle**/Application/中获取AppID,但该ID与Containers/**Data**/Application/中的AppID不同。。。
    /Users/user/Library/Developer/CoreSimulator/Devices/11321A31-27D6-49E0-85C8-D7EDEFA6751F/data/Containers/Data/Application/BB9EAD09-17B5-4FA1-907A-0EDFC07BFA62/Documents