Автор оригинала: Paul Zabelin.
Не многие разработчики IOS знают о связках данных XCode приложений.
Блестящая новая особенность
Представьте себе, что вы разрабатываете функцию глубоко в функции приложений. Для пользователя, чтобы добраться до этой функции, им может потребоваться подписаться на сервис, логин, пропустите бортовое устройство, создать некоторое содержание И тогда они увидят вашу блестящую особенность. Допустим, вы хотите поздравить пользователя с фейерверками. Задача — это то, как вы тестируете эту функцию или даже посмотреть, как она работает, как вам нужно пройти весь этот путь, чтобы добраться до него.
Добраться до этого
Другим дел может быть, когда пользователь сообщил об ошибке, и вы пытаетесь его воспроизвести. Запускаете ли вы, создавая учетную запись и содержание и навигацию, чтобы добраться до места провала? И даже если вы делаете все эту работу воссоздания государства, где пользователь испытывал проблему, как вы делаете это повторяемым?
Данные приложения Xcode
Данные приложения Xcode — это пакет, содержащий полное состояние приложения. Это имеет .xcappdata
расширение. Вы можете загрузить этот пункт в приложение и немедленно перейти в это состояние функции или ошибку, которую вы хотите исследовать.
Начать приложение с состоянием
XCode имеет возможность запустить приложение с данным пакетом данных приложения. Редактировать схему, которую вы используете для запуска приложения ( Shift-Command- <
), затем выберите Беги Действие и Варианты Вкладка: В раскрывающемся меню данных приложения вы можете выбрать один .xcappdata
Пакет из вашего проекта в использовании.
Создать пакет данных приложения
Один из самых быстрых способов создания пакета данных XCode App — это загрузить контейнер приложений с вашего тестового устройства. Открытые устройства и симулятор в Xcode ( Shift-Command-2
) Выберите свое приложение в списке установленных приложений, затем нажмите на значок Gear, чтобы показать меню контейнера. Сохраните загруженный контейнер к вашему проекту XCode. Очевидно, вам не нужно включать его в любую цель.
Тестовая настройка автоматизации
Вы также можете загрузить пакет данных XCode App для ваших тестов пользовательского интерфейса и даже тесты приложений. У меня часто есть несколько .xcappdata
Пакеты в проекте представляют разные состояния приложения.
Букашка
Текущая версия XCode имеет ошибку, не загружающую контейнер данных XCode приложения, даже он выбран в параметрах. Пожалуйста, сообщите об этом в Apple, чтобы Upvote это: Открытый радар — не может использовать пакет xcappdata в симуляторе
Для обработки этой ошибки я создал функцию loadappdata (), которая делает только что в зависимости от переменной среды, передаваемой при запуске.
import Foundation func loadAppData() { let processInfo = ProcessInfo.processInfo guard let appDataPath = processInfo.environment["LOAD_APPDATA"] else { return } let loaderUrl = URL(fileURLWithPath: #file) let bundleUrl = URL(fileURLWithPath: appDataPath, relativeTo: loaderUrl).appendingPathExtension("xcappdata") let contentsURL = bundleUrl.appendingPathComponent("AppData") let fileManager = FileManager.default let enumerator = fileManager.enumerator(at: contentsURL, includingPropertiesForKeys: [.isDirectoryKey], options: [], errorHandler: nil)! let destinationRoot = fileManager.urls(for: .libraryDirectory, in: .userDomainMask).last!.deletingLastPathComponent() try! fileManager.removeItem(at: destinationRoot) let sourceRoot = contentsURL.standardizedFileURL.path while let sourceUrl = enumerator.nextObject() as? URL { guard let resourceValues = try? sourceUrl.resourceValues(forKeys: [.isDirectoryKey]), let isDirectory = resourceValues.isDirectory, !isDirectory else { continue } let path = sourceUrl.standardizedFileURL.path.replacingOccurrences(of: sourceRoot, with: "") let destinationURL = destinationRoot.appendingPathComponent(path) try! fileManager.createDirectory(at: destinationURL.deletingLastPathComponent(), withIntermediateDirectories: true, attributes: nil) try! fileManager.copyItem(at: sourceUrl, to: destinationURL) } }
Вышеуказанная функция безопасна, чтобы включить в цель приложения, так как она только замена контейнера, когда ваш пропуск Load_appdata
среда.
Полный пример
Вы можете найти полный пример с автоматическим тестом пользовательского интерфейса на GitHub здесь: https://github.com/paulz/weadtracker.
Пример проекта имеет постоянную интеграцию на TRAVIS, прошедший все тесты здесь: https://travis-ci.org/paulz/weightTracker
Код также является 100% тестом, покрытым тестированием обоих состояний с помощью и без них .xcappdata.
: https://codecov.io/gh/paulz/WeightTracker/tree/master/WeightTracker
Оригинал: «https://www.codementor.io/@paulzabelin/xcode-app-data-suni6p4ma»