Символизирующие отчеты о сбоях iPhone App

Я ищу, чтобы попытаться описать отчеты о сбоях моего iPhone приложения.

Я получил отчеты о сбоях от iTunes Connect. У меня есть двоичный файл приложения, который я отправил в App Store, и у меня есть файл dSYM, который был сгенерирован как часть сборки.

У меня есть все эти файлы вместе в одном каталоге, который индексируется прожектором.

Что теперь?

Я пробовал использовать:

symbolicatecrash crashreport.crash myApp.app.dSYM 

и он просто выводит тот же текст, который находится в отчете о сбое, для начала, а не для символа.

Я делаю что-то неправильно?

Любая помощь будет очень признательна, спасибо.

23 Solutions collect form web for “Символизирующие отчеты о сбоях iPhone App”

Шаги по анализу отчета о сбоях из яблока:

  1. Скопируйте файл release .app, который был перенесен в appstore, файл .dSYM, созданный во время выпуска, и отчет о сбое получают от APPLE в ПАПКУ .

  2. OPEN и перейдите в папку, созданную выше (используя команду cd )

  3. Запустите atos -arch armv7 -o APPNAME.app/APPNAME MEMORY_LOCATION_OF_CRASH . Место памяти должно быть тем местом, в котором приложение разбилось как на отчет.

Пример: atos -arch armv7 -o 'APPNAME.app'/'APPNAME' 0x0003b508

Это покажет вам точную строку, имя метода, в результате которой произошел сбой.

Пример: [classname functionName:]; -510 [classname functionName:]; -510

Символизирующий IPA

если мы используем IPA для символики – просто переименуйте расширение .ipa с .zip, извлеките его, тогда мы сможем получить папку Payload, содержащую приложение. В этом случае нам не нужен файл .dSYM.

Заметка

Это может работать только в том случае, если бинарный файл приложения не имеет разделенных символов. По умолчанию релиз сборки разделяет символы. Мы можем изменить его в настройках сборки проекта «Сбросить символы отладки во время копирования» на НЕТ.

Подробнее см. В этом сообщении

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

Есть три объекта, которые должны совпадать друг с другом, когда они символизируют журнал сбоев:

  1. Сам файл журнала сбоев (например, example.crash ), либо экспортирован из организатора XCode, либо получен из iTunes Connect.
  2. Пакет .app (т.е. example.app ), который сам содержит бинарный файл приложения, относящийся к журналу сбоев. Если у вас есть пакет .ipa (т.е. example.ipa ), вы можете извлечь пакет .app пакет .ipa (т. .app unzip example.ipa ). Впоследствии пакет .app находится в извлеченной папке Payload/ .
  3. Пакет .dSYM , содержащий символы отладки (например, example.app.dSYM )

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

Каждый двоичный файл ссылается на UUID, который можно увидеть в файле журнала сбоев:

 ... Binary Images: 0xe1000 - 0x1f0fff +example armv7 <aa5e633efda8346cab92b01320043dc3> /var/mobile/Applications/9FB5D11F-42C0-42CA-A336-4B99FF97708F/example.app/example 0x2febf000 - 0x2fedffff dyld armv7s <4047d926f58e36b98da92ab7a93a8aaf> /usr/lib/dyld ... 

В этом извлечении журнал сбоев относится к бинарному изображению приложения с именем example.app/example с UUID aa5e633efda8346cab92b01320043dc3 .

Вы можете проверить UUID бинарного пакета, который у вас есть с dwarfdump:

 dwarfdump --uuid example.app/example UUID: AA5E633E-FDA8-346C-AB92-B01320043DC3 (armv7) example.app/example 

Впоследствии вы должны проверить, принадлежат ли вам отладочные символы, принадлежащие этому двоичному файлу:

 dwarfdump --uuid example.app.dSYM UUID: AA5E633E-FDA8-346C-AB92-B01320043DC3 (armv7) example.app.dSYM/Contents/Resources/DWARF/example 

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

Перейдем к скрипту symbolicatecrash :

В Xcode 8.3 вы можете вызвать скрипт через

 /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash -v example.crash 2> symbolicate.log 

Если его нет, вы можете запустить find . -name symbolicatecrash find . -name symbolicatecrash в вашем каталоге XCode.app, чтобы найти его.

Как вы видите, больше нет параметров. Таким образом, скрипт должен найти ваши двоичные и отладочные символы приложения, запустив поиск в центре внимания. Он ищет символы отладки с определенным индексом com_apple_xcode_dsym_uuids . Вы можете выполнить поиск самостоятельно:

 mdfind 'com_apple_xcode_dsym_uuids = *' 

соответственно

 mdfind "com_apple_xcode_dsym_uuids == AA5E633E-FDA8-346C-AB92-B01320043DC3" 

Первый вызов spotlight дает вам все индексированные пакеты dSYM, а второй дает вам пакеты .dSYM с определенным UUID. Если прожектор не находит ваш .dSYM пакет, тогда symbolicatecrash будет. Если вы делаете все это, например, во вложенной папке вашего ~/Desktop должны найти все.

Если symbolicatecrash находит ваш .dSYM пакет, в .dSYM должна быть строка, подобная следующей:

 @dsym_paths = ( <SOME_PATH>/example.app.dSYM/Contents/Resources/DWARF/example ) 

Для нахождения вашего пакета .app поиск прожектора, например, следующий, вызывается symbolicatecrash .app :

 mdfind "kMDItemContentType == com.apple.application-bundle && (kMDItemAlternateNames == 'example.app' || kMDItemDisplayName == 'example' || kMDItemDisplayName == 'example.app')" 

Если symbolicatecrash находит ваш пакет .app , должен быть следующий .app в symbolicate.log :

 Number of symbols in <SOME_PATH>/example.app/example: 2209 + 19675 = 21884 Found executable <SOME_PATH>/example.app/example -- MATCH 

Если все эти ресурсы найдены symbolicatecrash crash, он должен распечатать символическую версию вашего журнала сбоев.

Если нет, вы можете напрямую передать свои файлы dSYM и .app.

 symbolicatecrash -v --dsym <SOME_PATH>/<App_URI>.app.dSYM/<APP_NAME>.app.dsym <CRASHFILE> <SOME_OTHER_PATH>/<APP_NAME>.app/<APP_NAME> > symbolicate.log 

Примечание. Символизированная обратная линия будет выводиться на терминал, а не на symbolicate.log .

С последней версией Xcode (3.2.2) вы можете перетащить любые отчеты о сбоях в раздел «Журналы устройств» в Xcode Organizer, и они будут автоматически обозначены для вас. Я думаю, что это лучше всего работает, если вы создали эту версию приложения, используя Build & Archive (также часть Xcode 3.2.2)

Я сделал успешно, теперь я хочу поделиться со всеми вами, ребята.

Это следующие шаги:

Шаг 1. Создайте папку на рабочем столе, я назову ее «CrashReport» и поместите в нее три файла («MYApp.app», «MyApp.app.dSYM», «MYApp_2013-07-18.crash»).

Шаг 2. Откройте Finder и перейдите в Приложения, где вы найдете приложение Xcode, щелкните его правой кнопкой мыши и нажмите «Показать содержимое пакета», после чего выполните этот простой путь

«Содержание-> Разработчик-> Платформы-> iPhoneOS.platform-> Developer-> Library-> PrivateFrameworks-> DTDeviceKit.framework- > Версии- > A-> Ресурсы"

ИЛИ

«Содержание-> Разработчик-> Платформы-> iPhoneOS.platform-> Developer-> Library-> PrivateFrameworks-> DTDeviceKitBase.framework- > Версии- > A-> Ресурсы"

ИЛИ

Для Xcode 6 и выше путь – Приложения / Xcode.app / Содержание / SharedFrameworks / DTDeviceKitBase.framework / Версии / A / Ресурсы

Где вы найдете файл «symbolicatecrash», скопируйте его и вставьте в папку «CrashReport».

Шаг 3: запустите терминал, запустите эти 3 команды

  1. cd / Users / mac38 / Desktop / CrashReport и нажмите кнопку «Ввод»

  2. экспортируйте DEVELOPER_DIR = "/ Applications / Xcode.app / Содержание / Разработчик" и нажмите Enter

  3. ./symbolicatecrash -A -v MYApp_2013-07-18.crash MyApp.app.dSYM и нажмите Enter Теперь его выполнили .. (ПРИМЕЧАНИЕ: версии около 6.4 или новее не имеют опции -A – просто оставьте это)

Счастливое кодирование .. Спасибо

Я использую Airbrake в своих приложениях, что делает довольно хорошую работу по удаленной регистрации ошибок.

Вот как я их символизирую с atos, если это требует backtrace:

  1. В Xcode (4.2) перейдите к организатору, щелкните правой кнопкой мыши на архиве, из которого был создан .ipa-файл.

  2. В терминале, cd в xcarchive, например MyCoolApp 10-27-11 1.30 PM.xcarchive

  3. Введите следующий atos -arch armv7 -o 'MyCoolApp.app'/'MyCoolApp' (не забудьте одинарные кавычки)

  4. Я не включаю свой символ в этот звонок. Вы получаете блок-курсор на пустой строке.

  5. Затем я копирую / вставляю свой код символа на этом блочном курсоре и нажимаю Enter. Вы увидите что-то вроде:

    -[MyCoolVC dealloc] (in MyCoolApp) (MyCoolVC.m:34)

  6. Вы вернулись к курсору блока, и вы можете вставлять другие символы.

Будучи способным пройти через ваш backtrace, один элемент без повторного входа в первый бит – приятная экономия времени.

Наслаждайтесь!

Я также добавляю dsym, app bundle и crash log вместе в том же каталоге перед запуском символьного сбоя

Затем я использую эту функцию, определенную в моем .profile, чтобы упростить работу с символикой crash:

 function desym { /Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash -A -v $1 | more } 

Аргументы, добавленные там, могут вам помочь.

Вы можете проверить, чтобы прожектор «видел» ваши файлы dysm, выполнив команду:

 mdfind 'com_apple_xcode_dsym_uuids = *' 

Ищите dsym, который у вас есть в вашем каталоге.

ПРИМЕЧАНИЕ. Начиная с последнего Xcode, больше нет каталога разработчика. Вы можете найти эту утилиту здесь:

Ионы /Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Vers / А / Ресурсы / symbolicatecrash

Просто простой и обновленный ответ для xcode 6.1.1.

ШАГОВ

1.Xcode> Window> Устройства.

2.Выберите устройство из списка устройств в разделе УСТРОЙСТВА.

3. Выберите «Просмотр журналов устройств».

4. В разделе «Все журналы» вы можете напрямую перетащить сообщение report.crash

5.Xcode будет автоматически Обозначать отчет о сбоях для вас.

6.Вы можете найти отчет о сбоях Symbolicated, сопоставляя его дату / время с датой / временем, указанными в отчете о сбое.

Несмотря на то, что я разрабатывал приложения уже несколько лет, это была моя первая отладка двоичного кода, и я чувствовал, что полный NOOB вычисляет, где все файлы были, то есть где: * .app * .dSYM и журналы сбоев? Мне нужно было прочитать несколько сообщений, чтобы понять это. Картинка стоит тысячи слов, и я надеюсь, что этот пост поможет кому-либо еще в будущем.

1- Сначала перейдите в itunesconnect и загрузите свои журналы сбоев. ПРИМЕЧАНИЕ. В большинстве случаев вы можете получить что-то вроде «Слишком мало отчетов для отчета, который будет показан». В основном недостаточно пользователей отправили отчеты об авариях в Apple, и в этом случае вы ничего не сможете сделать в этот момент.

введите описание изображения здесь

введите описание изображения здесь

2- Теперь, если вы не изменили свой код, так как вы отправили его двоичный код в Apple, затем запустите Xcode для этого проекта и снова выполните Product -> Archive. В противном случае просто найдите свой последний отправленный двоичный файл и щелкните по нему правой кнопкой мыши.

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

Шаги для автоматического создания отчета о сбое с использованием XCode:

  1. Подключите устройство iOS к вашему Mac (да, физическое, да, я знаю, что это глупо)

  2. Выберите «Устройства» в меню «Окно» введите описание изображения здесь

  3. Нажмите на свое устройство слева и VIEW DEVICE LOGS справа введите описание изображения здесь

  4. Подождите. Это может занять минутку. Возможно, Command-A затем Delete ускорит это.

  5. Критический недокументированный шаг: переименуйте отчет о сбоях, который вы получили из iTunesConnect, из расширения .txt расширение .crash

  6. Перетащите отчет о сбое в эту область слева введите описание изображения здесь

И тогда Xcode будет символизировать отчет о сбое и отображать результаты.

Источник: https://developer.apple.com/library/ios/technotes/tn2151/_index.html

Используя XCode 4, задача еще проще:

  • открытый Организатор,
  • щелкните по библиотеке | Устройство Войдите в левый столбец
  • Нажмите кнопку «Импорт» в нижней части экрана …

и вуаля. Файл журнала импортируется и автоматически символизируется для вас. При условии, что вы архивировали сборку с помощью XCode -> Product -> Archive first

В XCode 4.2.1 откройте «Органайзер», затем перейдите в «Журнал библиотек / устройств» и перетащите свой .crash-файл в список журналов сбоев. Он будет отображаться для вас через несколько секунд. Обратите внимание, что вы должны использовать тот же экземпляр XCode, в котором была заархивирована исходная сборка (т. Е. Архив для вашей сборки должен существовать в Organizer).

Magical XCode Organizer не настолько волшебный, чтобы символизировать мое приложение. У меня нет никаких символов для отчетов о сбоях, которые я получил от Apple из-за неудачной заявки на приложение.

Я попытался использовать командную строку, поставив отчет о сбое в ту же папку, что и файл .app (который я отправил в хранилище) и файл .dSYM:

 $ symbolicatecrash "My App_date_blahblah-iPhone.crash" "My App.app" 

Это только предоставленные символы для моего приложения, а не основной код основания, но он был лучше, чем дамп числа, который дает мне Организатор, и мне было достаточно, чтобы найти и исправить сбой, который было у моего приложения. Если кто-то знает, как продлить это, чтобы получить символы Foundation, это будет оценено.

В моем случае я перетаскивал отчеты о сбоях непосредственно из Mail в Организатор. По какой-то причине это предотвратило получение отчетов о сбоях (я хотел бы знать, почему).

Сначала копирование отчетов о сбоях на Рабочий стол, а затем перетаскивание их оттуда в Организатор заставили их правильно обозначить.

Очень конкретный случай, я знаю. Но подумал, что я поделюсь на всякий случай.

Вот еще одна проблема, с которой я сталкиваюсь с символикой crash – она ​​не будет работать с приложениями, в которых есть пробелы в своем пакете (например, «Test App.app»). Заметьте, я не думаю, что вы можете иметь пробелы в своем имени при отправке, чтобы вы все равно их удаляли, но если у вас уже есть сбои, которые необходимо проанализировать, используйте patch symbolicatecrash (4.3 GM) как таковой:

 240c240 < my $cmd = "mdfind \"kMDItemContentType == com.apple.application-bundle && kMDItemFSName == $exec_name.app\""; --- > my $cmd = "mdfind \"kMDItemContentType == com.apple.application-bundle && kMDItemFSName == '$exec_name.app'\""; 251c251 < my $cmd = "find \"$archive_path/Products\" -name $exec_name.app"; --- > my $cmd = "find \"$archive_path/Products\" -name \"$exec_name.app\""; 

Для тех, кто использует Airbrake, есть твердый ответ выше, но это не сработает для меня без настройки:

Работает для некоторых адресов памяти, но не для других, не знаю, почему …

  • Создайте новый каталог на рабочем столе или где угодно
  • Найти архив в вопросе в организаторе Xcode
  • Дважды нажмите, чтобы открыть в поиске
  • Дважды нажмите, чтобы показать содержимое пакета
  • Скопируйте файл .dSYM и файл .app в новый каталог
  • cd в новый каталог
  • Запустите эту команду: atos -arch armv7 -o 'Vimeo.app' / 'Vimeo'
  • Терминал войдет в интерактивный ход
  • Вставьте в адрес памяти и нажмите enter, он выведет имя метода и номер строки
  • В качестве альтернативы введите следующую команду: atos -arch armv7 -o 'Vimeo.app' / 'Vimeo' Чтобы получить информацию только по одному адресу

Сочетание, которое сработало для меня, было:

  1. Скопируйте файл dSYM в каталог, в котором был указан отчет о сбое
  2. Разархивируйте файл ipa, содержащий приложение («unzip MyApp.ipa»)
  3. Скопируйте двоичный файл приложения из полученной взорванной полезной нагрузки в ту же папку, что и отчет о сбоях и файл символов (что-то вроде «MyApp.app/MyApp»)
  4. Импортировать или переархивировать отчет о сбое из организатора XCode

Используя atos, я не смог разрешить правильную информацию о символах с адресами и смещениями, которые были в отчете о сбое . Когда я это сделал, я вижу что-то более значимое, и это кажется законной трассировкой стека.

Я должен был сделать много взлома скрипта symbolicatecrash, чтобы заставить его работать должным образом.

Насколько я могу судить, symbolicatecrash сейчас требует, чтобы .app находился в том же каталоге, что и .dsym. Он будет использовать .dsym, чтобы найти .app, но он не будет использовать dsym для поиска символов.

Вы должны сделать копию своего символического краха, прежде чем пытаться выполнить эти исправления, которые заставят его посмотреть в dsym:

В строке 212 в функции getSymbolPathFor_dsymUuid

 212 my @executablePath = grep { -e && ! -d } glob("$dsymdir" . "/Contents/Resources/DWARF/" . $executable); 

Вокруг строки 265 в функции matchUUID

 265 return 1; 

Это просто, после многого поиска я нашел четкие шаги, чтобы символизировать весь файл журнала сбоев.

  • копировать файлы .app, crash_report и DSYM в папку.
  • подключить устройство с помощью xcode
  • Затем перейдите в окно -> выберите устройства -> просмотрите журналы устройств
  • Затем выберите это устройство, удалите все журналы.
  • перетащите ваш аварийный сигнал на раздел журнала устройства. он автоматически символизирует крах. просто щелкните правой кнопкой мыши на отчете и экспортируйте его.

счастливое кодирование,
Riyaz

Чтобы символизировать сбои, Spotlight должен иметь возможность находить файл .dSYM, который был сгенерирован одновременно с двоичным файлом, отправленным в Apple. Поскольку он содержит информацию о символе, вам не повезет, если он недоступен.

Я немного рассердился по поводу того, что ничто здесь не кажется «просто работающим», поэтому я провел некоторое расследование, и результат:

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

Исправление: загружать отчеты о сбоях с сервера онлайн. Они называются «crash» и по умолчанию переходят в папку ~ / Downloads /. Имея это в виду, этот сценарий «пойдет правильно», а отчеты о сбоях будут отправлены в Xcode (Organizer, журналы устройств) и будет выполнена символика.

Сценарий:

 #!/bin/bash # Copy crash reports so that they appear in device logs in Organizer in Xcode if [ ! -e ~/Downloads/crash ]; then echo "Download a crash report and save it as $HOME/Downloads/crash before running this script." exit 1 fi cd ~/Library/Logs/CrashReporter/MobileDevice/ mkdir -p actx # add crash report to xcode abbreviated cd actx datestr=`date "+%Y-%m-%d-%H%M%S"` mv ~/Downloads/crash "actx-app_"$datestr"_actx.crash" 

Вещи могут быть автоматизированы до того места, где вы можете перетаскивать Xcode Organizer, делая две вещи, если вы используете QuincyKit / PLCR.

Во-первых, вам нужно отредактировать удаленный сценарий admin / actionapi.php ~ line 202. Кажется, что он не имеет правильной отметки времени, поэтому файл заканчивается именем «crash», которое Xcode не распознает (он хочет чего-то dot crash):

 header('Content-Disposition: attachment; filename="crash'.$timestamp.'.crash"'); 

Во-вторых, в стороне iOS в QuincyKit BWCrashReportTextFormatter.m ~ строке 176 измените @"[TODO]" на @"TODO" чтобы обойти плохие символы.

atos устаревает, поэтому, если вы используете OSX 10.9 или более позднюю версию, вам может потребоваться запустить

xcrun atos

Предупреждение: / usr / bin / atos перемещается и будет удаляться из будущей версии OS X. Теперь он доступен в инструментах разработчика Xcode для вызова через: xcrun atos

Мне нравится использовать Textwrangler для определения ошибок в исходном бинарном отказе загрузки приложения. (Данные об авариях будут найдены в вашей учетной записи itunesConnect.) Используя метод Sachin выше, я копирую оригинал. Crash в TextWrangler, а затем скопирую созданный файл символики crash, который я создал, в другой файл TextWrangler. Сравнение двух файлов выявляет различия. Файл с символикой crash будет иметь отличия, указывающие на количество файлов и строк.

Я предпочитаю сценарий, который будет символизировать все мои журналы сбоев.

Предпосылками

Создайте папку и поставьте туда 4 вещи:

  1. symbolicatecrash perl script – есть много ответов SO, в которых говорится о его местонахождении

  2. Архив сборки, который соответствует сбоям (от Xcode Organizer. Простой, как Show in Finder и копировать) [Я не уверен, что это необходимо]

  3. Все пакеты xccrashpoint – (из Xcode Organizer. Show in Finder вы можете скопировать все пакеты в каталоге или одну xccrashpoint, которую вы хотели бы символизировать)

  4. Добавьте этот короткий скрипт в каталог:

     #!/bin/sh echo "cleaning old crashes from directory" rm -P *.crash rm -P *.xccrashpoint rm -r allCrashes echo "removed!" echo "" echo "--- START ---" echo "" mkdir allCrashes mkdir symboledCrashes find `ls -d *.xccrashpoint` -name "*.crash" -print -exec cp {} allCrashes/ \; cd allCrashes for crash in *.crash; do ../symbolicatecrash $crash > ../symboledCrashes/V$crash done cd .. echo "" echo "--- DONE ---" echo "" 

Сценарий

Когда вы запустите скрипт, вы получите 2 каталога.

  1. allCrashes – все сбои со всей xccrashpoint будут там.

  2. symboledCrashes – те же самые сбои, но теперь со всеми символами.

  3. вам не нужно очищать каталог от старых сбоев перед запуском скрипта. он автоматически очистится. удачи!

  • Получение информации из файла отчета .ips crash
  • Как отладить этот сбой в UIDictationController?
  • Как я могу получить отчет о сбоях из приложения Jailbroken, запущенного на моем устройстве?
  • TestFlight не символизирует мой отчет о сбое iOS должным образом
  • Как понять и решить отчет о сбоях: SIGSEGV, SEGV_ACCERR
  • Не удается воспроизвести сбой, обнаруженный при просмотре приложения. Может ли кто-нибудь помочь понять этот отчет о сбоях?
  • Crashlytics: Ошибка распространения архива: -3
  • как понять Crash Log iPhone
  • Использовать многократный репортер сбоев на iOS
  • Внутреннее тестирование iOS. Невозможно загрузить информацию о сбоях?
  • сбой при доступе к телефонной книге ios
  • Interesting Posts

    Новая политика предоставления Xcode и Ionic Framework

    Поле указателя toUser требует значения указателя Parse.com

    NSObjectInaccessbileException при объединении дочернего контекста

    Как рисовать Rounded Rectangles вокруг текстовых полей и кнопок, таких как приложение Foursquare

    В iphone app / ios, как сделать прозрачную «загрузку» наложения, которая покрывает навигационную панель и клавиатуру?

    iOS8.1 Simulator всегда использует раскладку клавиатуры в США, несмотря на немецкую аппаратную клавиатуру

    iOS7 Safari: нажатие на фиксированную позиционную панель заголовка с более высоким z-index триггером обработчика события элемента под ним

    Изменение внешнего внешнего вида UIBarButtonItem

    Как найти и отобразить символ Юникода в iOS

    Любой (ранний) опыт работы с автоматически возобновляемыми подписками для iOS

    UILabel не показывает emoji

    Почему для обновления пользовательского интерфейса от фонового потока требуется такое долгое время?

    Отобразить пустоту (не возвращающую функцию) по массиву

    Разделы iOS – UITableView на основе диапазонов дат

    Относительное позиционирование с использованием автоматической компоновки и SnapKit

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.