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

时间:2017-02-28 10:06:03

标签: ios sh calabash-ios

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

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

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

4 个答案:

答案 0 :(得分:1)

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

〜/库/开发商/ CoreSimulator /设备/ [的DeviceID] /数据/容器/捆绑/应用/ [的AppID] / [AppName.app]

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

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

答案 1 :(得分:1)

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

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个文件,并尝试匹配我的应用程序名称

答案 2 :(得分:1)

在 Swift 4 中,在 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的代码

答案 3 :(得分:0)

我分两步进行:

  1. 查找或添加(保存在模拟器上)一些唯一的文件。就我而言,该文件的扩展名为.xlsx。
  2. 使用可以在终端中运行的脚本:

    cd〜/ Library / Developer / CoreSimulator / Devices / [DeviceId] && find。 -名称'* .xlsx'

它返回找到的文件的路径,例如,您可以通过使用Regex获得适当的应用程序ID:

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