С чем невозможно работать на симуляторе устройства xcode
Перейти к содержимому

С чем невозможно работать на симуляторе устройства xcode

  • автор:

Инструменты разработки для симуляторов и эмуляторов

ArcGIS AppStudio поддерживает виртуальные устройства, в том числе симуляторы iOS и эмуляторы Android . Такие виртуальные устройства предназначаются для тестирования вашего приложения на платформах, отсутствующих на вашем устройстве.

Симуляторы iOS и эмуляторы Android немного различаются между собой разными возможностями и уровнями интеграции с AppStudio . Чтобы убедиться в том, что нужные вам функциональные возможности поддерживаются выбранной виртуальной платформой, обратитесь к следующей таблице:

Открытие нескольких сеансов.

Копирование файлов приложения из AppStudio на виртуальное устройство.

Поддержка подключения к физическому устройству.

Да. Дополнительные сведения см. в разделе Подключенные устройства Android.

Автоматическая установка AppStudio AppRun.

Автоматическое подключение к консоли AppStudio .

Virtual Device

Для использования виртуального устройства c AppStudio необходимо сначала установить инструменты разработки в нужную среду. Затем, в AppStudio щелкните кнопку Виртуальное устройство , чтобы открыть меню со списком всех найденных виртуальных устройств.

Симуляторы iOS

Симуляторы iOS доступны только на macOS . Функциональные возможности симулятора iOS обеспечиваются инструментами разработчика Xcode; в среде Xcode написание кода необязательно. При установке Xcode из Mac App Store на компьютер также устанавливается несколько симуляторов. Чтобы эти симуляторы были видны в меню AppStudio Virtual Device , вам нужно также установить инструменты командной строки Xcode. Эти инструменты можно загрузить с сайта https://developer.apple.com/download/.

Самая ранняя из поддерживаемых версий Xcode и инструментов командной строки (Command Line Tools) – 7.0.

Если вам требуется другая версия симулятора iOS , а не та, которая была установлена с Xcode, можете дополнительно скачать в Xcode другие симуляторы. Откройте Xcode и перейдите Меню > Xcode > Настройки > Выбрать компоненты , а затем выберите версию симулятора, которую вы хотели бы скачать.

Когда симулятор открывается из AppStudio , AppStudio App Run автоматически устанавливается (если необходимо) и открывает выбранное приложение. Приложения, запущенные в App Run на симуляторе, автоматически выводят информацию на AppStudio Console. Если вы хотите изменить, какое приложение будет отображаться в симуляторе, закройте этот сеанс приложения в симуляторе, выберите новое приложение в AppStudio и снова выберите симулятор в меню Виртуальное устройство .

Одновременно может работать только один симулятор iOS .

Эмуляторы Android

Эмуляция Android доступна на macOS, Windows и Linux и включена в Android Studio. В Android Studio не требуется написание кода. Установите Android Studio и создайте виртуальное устройство Android, чтобы использовать эмуляторы Android в AppStudio . Виртуальные устройства Android могут также управляться в Qt Creator ; для этого перейдите Инструменты > Опции , выберите Устройства в таблице содержания и откройте вкладку Android . Для того, чтобы стали доступны опции управления виртуальными устройствами Android , необходимо указать пути для Android Software Development Kit (SDK) в комплекте с Android Studio и Android Native Development Kit (NDK) версии 10e. Если вы уже настроили свой компьютер для настойки локального Make for Android, эти пути на нем уже будут заданы.

Возможные пути для комплектов разработки

Примечание:

Компьютеры на базе Linux должны отвечать следующим требованиям для эмуляции:

  • Требуется поддержка VT-x.
  • Должна быть включена и оперативная память, и свопинг.
  • Инструмент mksdcard является обязательным. Для установки mksdcard используйте следующую команду: sudo apt-get install lib32stdc++6 .

Эмуляторы Android , запущенные в AppStudio , не читают файлы приложений непосредственно на вашем настольном компьютере. Пока эмулятор работает, нажмите кнопку Виртуальное устройство в AppStudio , выберите активный эмулятор, а затем выберите приложение, которое надо синхронизировать с эмулятором. При этом приложение с настольного компьютера будет скопировано в эмулятор, а также будет выполнена установка AppStudio App Run.

В отличие от симуляторов iOS , одновременно может быть запущено несколько эмуляторов Android .

Ограничения эмуляторов Android включают следующее:

  • Производительность устройства – как правило, эмуляторы работают медленнее, чем физические устройства.
  • Программный рендеринг должен быть включен – это замедляет эмулятор, но если этого не сделать, то в AppStudio AppRun будет отображаться белый экран. Перед включением программного рендеринга рекомендуется синхронизировать приложения. После синхронизации можно изменять приоритет рендеринга перед запуском приложения.

Подключенные устройства Android

Кроме того, AppStudio может работать с подключенными через USB аппаратными устройствами Android таким же образом, как с эмуляторами Android . Несмотря на подключение по USB, аппаратным устройствам по-прежнему требуется находиться в одной и той же беспроводной сети, чтобы использовать AppStudio Console или для подключения к интернету. Через кабель USB выполняется только копирование данных приложения.

У подключенного устройства Android должна быть включена отладка. На некоторых устройствах понадобится их авторизация при подключении к новому настольному компьютеру.

Примите во внимание, что список доступных устройств в меню Виртуальное устройство определяет и заполняет Android Studio. Если по какой-то причине Android Studio не сможет обнаружить устройство, AppStudio не сможет с ним синхронизироваться.

Как сделать приложение для iOS без макбука

3400 05-02-20 Время чтения: 5 мин

Корпорация Apple регулярно радует свою многомиллионную армию поклонников очередными технологическими новинками, и мобильные устройства от «яблочного» производителя успешно реализуются по всему миру. Одной из главных особенностей устройств от Apple является собственная операционная система – iOS, причем для разных категорий товаров существуют свои адаптации этой ОС.

Благодаря популярности iPhone и других устройств американского гиганта, вырос спрос и на приложения, заточенные под них и iOS. Но в чем особенность механизма создания таких приложений, какие существуют ограничения и подводные камни?

Особенности разработки iOS приложений

Перед тем, как говорить о разработке программ под iOS, сразу оговоримся, что далее речь пойдет именно о нативных (родных) приложениях, позволяющих использовать весь функционал и производительность устройств Apple. Сравнительно недавно для написания кода успешно использовался язык программирования Objective-C, созданный еще в 80-х годах. Вместе с многими достоинствами (высокий уровень поддержки кода, полная совместимость с языком Swift, большая обучающая база и много справочной литературы) данный язык имеет и существенные недостатки, включая сложность освоения, сравнительно низкую производительность, низкий уровень читабельности кода.

Летом 2014 года компания Apple презентовала новый язык программирования Swift, который сейчас и можно назвать основным для написания программ под iOS. Этот язык также является объектно-ориентированным, может похвастаться повышенной безопасностью, поддержкой динамических библиотек, легкой читаемостью кода и отличной скоростью. Соответственно, для создания приложения под устройства Apple необходимо знать хотя бы один из этих двух языков. Кроме этого, необходимо понимать принципы оформления и размещения элементов программ, разбираться в последних тенденциях в мире мобильных разработок и уметь правильно продвигать созданный продукт. Жизненно необходимо и наличие Mac, без которого разрабатывать iOS-приложения крайне проблематично, о чем поговорим чуть позже.

XCode

Среда разработки

Огромную помощь в процессе создания приложений разработчикам оказывают среды разработки – Integrated Development Environmetn или просто IDE. Корпорация Apple в свое время выпустила довольно удобную, практичную и, что немаловажно, сравнительно простую в освоении IDE Xcode. Ее можно скачать из App Store, причем бесплатно. Разработчик получает прекрасный редактор с большим набором полезных инструментов. Результат трудов можно протестировать с помощью встроенного симулятора без необходимости установки приложения на то или иное устройство. При этом разработчик может собирать программу сразу на устройство с iOS.

В Xcode предусмотрен отладчик, позволяющий находить ошибки в верстке, всевозможные баги и устранять их. Swift Playground позволяет проверять на ошибки отдельные алгоритмы или даже отдельные строчки кода без необходимости создания всего приложения. Для работы с картами в данной IDE предусмотрена функция имитации геолокации с возможностью добавления городов и использования уже «вшитых». Отдельного внимания заслуживает приложение Interface Builder, интегрированное в Xcode. IB включает в себя немало полезных инструментов, упрощающих процесс создания графических интерфейсов и делающих верстку более наглядной. И это далеко не весь инструментарий Xcode, с которым работают разработчики.

Hackintosh

Хакинтош или Mac?

Разрабатывать приложения для богатой линейки устройств под управлением iOS можно только на компьютерах от Apple с установленной macOS. На такие устройства можно установить IDE Xcode, тогда как на компьютеры с другими системами этого сделать невозможно. Поэтому всем тем, кто хочет создавать iOS-приложения, необходимо позаботиться о наличии MacBook в любых его вариациях. Однако продукция Apple стоит традиционно дорого и далеко не все разработчики, особенно новички, могут позволить себе подобный компьютер. Один из выходов в сложившейся ситуации – установка виртуальной машины на обычный ПК, которая будет имитировать работу macOS и позволит разрабатывать необходимые программы.

Еще одним популярным способом обхода «яблочной» политики относительно установки macOS только на свою продукцию является создание так называемого хакинтоша. Само название красноречиво говорит нам, что это «хакнутый» или взломанный вариант Макинтоша. То есть, хакинтошем может быть любой компьютер не от компании Apple, на котором установлена операционная система macOS. Однако создать свой хакинтош не так просто, поскольку это идет вразрез с правообладателем и требует от специалиста высокой квалификации и мастерства. Да, после вложения некоторой суммы денег, изучения многочисленных инструкций в сети и экспериментов можно создать свой хакинтош, но рассматривать его можно только в качестве временного заменителя оригинального Mac для знакомства с системой и процессом разработки программ.

Создание мобильных приложений для iOS

Необходимо ли наличие устройства Apple?

При разработке приложений на iOS на Mac, виртуальной машине или хакинтоше с использованием IDE Xcode программисты имеют возможность тестировать свои разработки на симуляторе устройств. Данная среда разработки позволяет выбирать необходимое устройство из перечня продукции Apple, что довольно удобно. Благодаря этому можно обойтись даже без реального устройства, однако для большего комфорта и лучшей оценки результата трудов опытные мастера рекомендуют не ограничиваться лишь виртуальным симулятором и проверять работу приложений вживую. К тому же, в симуляторе существует целый ряд ограничений, включая отсутствие акселерометра и камеры, поэтому обойтись без реального iOS-устройства будет точно непросто.

В mobile-студии KitApp не только прекрасно знают обо всех особенностях разработки приложений для iOS, но и успешно применяют свои навыки в течение многих лет на практике, создавая приложения разного уровня сложности. Наши мастера постоянно совершенствуют свои знания и изучают новинки в индустрии, поэтому клиенты могут быть на все 100% уверены в том, что созданное у нас приложение будет полностью соответствовать всем современным вызовам и требованиям.

Xcode — Не работает определения место положения

Хотел бы узнать по какой причине в эмуляторе не работает данная функция. Код не прилагаю ибо да же стандартное приложения карты не определяет место положения.

Notice: Данная функция работает только если использовать эмуляцию

Выводит вот такое сообщение:

Текущая геопозиция недоступна Сейчас определить Вашу геопозицию невозможно 

Отслеживать
задан 18 июн 2016 в 9:08
145 15 15 бронзовых знаков

не уверен, что понял вопрос, но все же. Симулятор не может определить ваше положение, потому что в нем нет gps модуля (ну это ж симулятор все таки). Для тестирования вы можете использовать Debug -> Location из меню, и задать нужную вам позицию вручную

18 июн 2016 в 12:21
вы правильно поняли но раньше то работало )) разве они убрали эту функцию ?
18 июн 2016 в 18:04

Что то мне смутно вспоминается, что когда то вроде по умолчанию было выставлено Купертино. Видимо в какой то версии убрали

18 июн 2016 в 18:45

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Вероятно, это баг симулятора. Когда делал по примеру работу с картой, при запуске на симуляторе нормально определяло Сан-Франциско. После пары запусков на симуляторе переставало опеределять эту позицию. Когда запускал симулятор, где еще не пробовал эту программу, все работало несколько запусков и снова так же. Т.е запустил на 4s, поработал, перестало — запускаю 5. Потом 5s и т.д.

Отслеживать
ответ дан 19 июн 2016 в 11:32
15.8k 1 1 золотой знак 18 18 серебряных знаков 35 35 бронзовых знаков

  • xcode
  • swift
    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.10.27.43697

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Облегчаем поддержку iOS приложения. Часть 2 — локация и сеть

Статьи посвящены тому, как я справляюсь с поддержкой приложений, которые прошли не через одну версии, писались в разное время и разными людьми. Надеюсь, они помогут и другим iOS разработчикам.

  1. Облегчаем поддержку iOS приложения. Часть 1 — не отрываясь от Xcode
  2. Облегчаем поддержку iOS приложения. Часть 2 — локация и сеть
  3. Облегчаем поддержку iOS приложения. Часть 3 — падение и логи
Подвид второй — невероятные условия локации
«Вот у меня тут, в Париже, данные не так отображаются»

Бывает, что многое в приложении завязано на локацию, и у вас все отлично, а вот у клиента данные не так отображаются и он в Париже… ну хорошо ему, что еще могу сказать. А я в Сибири, и у меня все ОК с данными, каждому свое. Что же делать? Симулировать локацию. И так, рассмотрим наши варианты:
1) Это простая подмена локации в симуляторе. Как нечего делать — он поставит вас в нужную точку. «iOS Simulator»→Debug→Location.
2) Если точки мало, можно начать симулировать путь, есть файлы pgx, добавляются в xcode через правый значок

И локации будут перемещать вас по пути, но… Если мне не изменяет память, это можно делать, только присоединив приложение к Xcode, и нельзя настроить время между прыжками. Что делать тестировщикам? Сидеть у маков? Хорошая компания, если всем купили MAC. И всегда подключив приложение Xcode? А если нужны задержки большие, больше, чем сделает Xcode?
3) Вот тут на помощь неожиданно приходят волшебные методы runtime, о них много написано, к примеру тут, но вот реально зачем оно такое может пригодиться… бывает не совсем понятно. Однако, вот вам вариант, который поможет нам решить проблему с подменой локации или даже навигации. FakeGPSUtility строго не судить, несколько раз он пригодился и сыграл важную роль, но это тот еще велосипед, и тут он больше чтобы не быть голословным и показать вам направление. Свою цель этот проект выполняет — вы можете подменять локацию и прыжки межу ними не фиксированы. Это может делать кто угодно, даже клиент, не нужен Xcode и главное для меня (для кого-то вторичное) мы не меняем ничего в коде проекта, все подменяется в момент запуска приложения. То есть, вы присоединяете его к проекту, код проекта остается прежний, фиксаете баг/тестируете и удаляете, или выставляете нужные #define. Вуаля, полезная тулза под рукой, и никогда этот код не попадет в Release, исключительно для тестов.
С iOS 8, карты начали получать локацию (реальную локацию девайса), даже при симуляции, так что если дойдут руки — допилю тулзу.
А пока она может вот такое сделать с картой. Красная булавка это то, что прилетает в методе делегата NSLocationManager, остальное — нативное поведение карты. Симуляция шла — карта велась.

Подвид третий — проблемы с http request

— При edge соединении приложение плохо работает
— Именно поэтому я и тестирую его на WiFi, зачем же себя мучить-то!
Рассмотрим еще один случай — проблема проявилась из-за плохой сети. Вообще, полезно просто симулировать плохое соединение с интернетом и посмотреть, как работает приложение, потому что, пока вы на WiFi, а может и сервис на localhost, не поймешь как оно ведет себя на 3g (а, не дай Бог, еще и на edge). Так что, ради интереса, идем на устройстве в SettingsDeveloperNetwork Link ConditionerEnable и выбираем, насколько плохое соединение мы хотим. После этого вы можете резко поменять точку зрения о быстродействии приложения.
И так, вы можете сделать интернет медленнее, но что если вам надо сломать какой-то один определенный response, чтобы получилась та же проблема, что и у клиента/тестировщика? Тогда придется делать еще один велосипед (дзынь-дзынь).
Как и с FakeGPSUtility, я против допиливать что-то внутри наших рабочих классов для тестирования и баговоспроизведения, код добавляется исключительно вокруг проекта. NSURProtocol нам в помощь. Как по мне, 3 наиболее вероятных места, где может понадобится сломать request — это NSURLSessionTask, UIWebView и WKWebView. Есть и другие соединения по сети, но тут я вам не помогу — ничего хорошего не посоветую, только сидеть и портить код проекта ради тестов.

NSURLSessionTask

Чтобы сломать его response, надо, чтобы наш протокол попал во все NSURLSessionConfiguration, для этого переопределим

- (NSArray *)protocolClasses

И просто возвращаем массив с нашим MyURLProtocol. Если ваше приложение использует иные протоколы — добавьте их тоже (чтобы не тащить хидеры, можно использовать NSClassFromString). Если же у вас еще более сложная логика и протоколы не везде и не всегда используются, то… сами виноваты — допиливайте велосипед по своему образу и подобию.

шутка, вот код

static char kAssociatedObjectKey; - (NSArray *)protocolClasses < NSMutableArray *result = objc_getAssociatedObject(self, &kAssociatedObjectKey); if (result == nil) < result = [self customeProtocolsArray]; objc_setAssociatedObject(self, &kAssociatedObjectKey, result, OBJC_ASSOCIATION_RETAIN_NONATOMIC); >return result; > - (void)setProtocolClasses:(NSArray *)protocolClasses < NSMutableArray *result = [self customeProtocolsArray]; if (protocolClasses.count >0) < [result addObjectsFromArray:protocolClasses]; >objc_setAssociatedObject(self, &kAssociatedObjectKey, result, OBJC_ASSOCIATION_RETAIN_NONATOMIC); > - (NSMutableArray *)customeProtocolsArray

Но, для bacgkound session это не сработает. пруф

UIWebView

Тут все еще проще — просто зарегистрируйте класс. Например так:

- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions
WKWebView

А вот тут все плохо, не получится подменять извне, придется все-таки втыкать костыли для этого в код проекта.

А вот, собственно, и сам протокол

@implementation MyURLProtocol + (BOOL)canInitWithRequest:(NSURLRequest *)request < #if !defined(STAGE_SERVER) || !STAGE_SERVER return NO; #endif NSString *urlString = [[request URL] absoluteString]; NSRange randge = [urlString rangeOfString:@"http://yandex.ru"]; if (randge.location == 0) < return YES; >return NO; > + (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request < return request; >+ (BOOL)requestIsCacheEquivalent:(NSURLRequest *)a toRequest:(NSURLRequest *)b < return NO; >- (void)startLoading < dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^< NSError *error = [NSError errorWithDomain:@"MyErrorDomain" code:42 userInfo:@< NSLocalizedDescriptionKey: @"We fail it!">]; [self.client URLProtocol:self didFailWithError:error]; >); > - (void)stopLoading < // stop request if you can >@end
Подвид четвертый — для тестов нужен специфический/устаревший response

Нам сообщают, что вчера было воспроизведено некорректное поведение, а сегодня уже не получается, от сервиса не выходит получить тот же ответ. Сказать, что теперь все работает, неправильно, так как по закону жанра эта ситуация повторится в первый же день релиза. И повлиять на server-side team вы не можете по целому ряду причин: они в другом городе, вы их не знаете, они в отпуске.
В этой ситуации NSURLProtocol снова спешит вам на помощь. Нам надо лишь поменять , чтобы при нужном запросе мы возвращали нужные данные.
Вот так может выглядеть наш MyURLProtocol, чтобы просимулировать нужный response

MyURLProtocol

@implementation MyURLProtocol + (BOOL)canInitWithRequest:(NSURLRequest *)request < NSString *urlString = [[request URL] absoluteString]; NSRange randge = [urlString rangeOfString:@"http://localhost:1984/oldresponse"]; if (randge.location == 0) < return YES; >return NO; > + (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request < return request; >+ (BOOL)requestIsCacheEquivalent:(NSURLRequest *)a toRequest:(NSURLRequest *)b < return NO; >- (void)startLoading < NSString *path = [[NSBundle mainBundle] pathForResource:@"unexistd_response" ofType:@"json"]; NSData *data = [NSData dataWithContentsOfFile:path]; [self.client URLProtocol:self didLoadData:data]; [self.client URLProtocol:self didFailWithError:nil]; >- (void)stopLoading < // stop request if you can >@end

Тут мы с файловой системы читаем unexistd_response.json, но никто не запрещает сделать редирект на рабочую машину, поднять на ней небольшой сервис и с него получить ответ. Это отличный вариант, если есть время и не хочется складывать странные файлы в проект, даже если они только на время и для тестов.
Лично я часто создаю NSURLProtocol для работы на первых порах над проектом, потому что зачастую сервис есть только в планах и ТЗ, а реально у вас его нет. Но уже хочется писать, как будто приложение работает как надо, получает данные, и, в зависимости от них, показывает содержимое пользователю. Я делаю себе и, пока мне не дадут рабочий сервис, я работаю с локальными файлами. Они же меня потом спасают, когда разработчик, уходя домой, выключит компьютер, который по совместительству был developer server (до боли смешная ситуация, которая повторялась несколько раз).

Заключение

Сегодня мы рассмотрели случаи, когда проблемы очень тесно связаны с http запросами или локациями. NSURLProtocol и FakeGPSUtility герои сегодняшней статьи, они очень сильно упростят тестирование и воспроизведение некорректного поведения приложения.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *