English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Я все еще использую Xcode 7.3 и не обновлял его, так как жалко всех этих плагинов, которые я установил... Но вернемся к делу. Я следил за Xcode 8 с момента его выхода, и сегодня мне попалась статья, которая nicely总结了 его функции. Я решил转载这篇文章, и также немного его переписал. Спасибо автору оригинала!
Текст оригинала:
Официальная версия Xcode 8 была отправлена разработчикам для скачивания 13 сентября. Я также загрузил новый Xcode после возвращения из отпуска. После загрузки出现了 множество ошибок компиляции, и некоторые из моих плагинов больше не работают. Но я заметил, что Xcode 8 интегрировал множество полезных функций плагинов в себя, что, на мой взгляд, также неплохо.
Каждая версия Xcode приносит множество новых функций, Xcode 8 не исключение. Эти новые функции могут упростить наш процесс разработки, но также могут привести к множеству проблем. Поэтому сегодня я решил написать статью, чтобы подробно рассказать о новых функциях Xcode 8, проблемах, с которыми я сталкивался в процессе использования, и надеюсь, что это поможет другим разработчикам.
Новые функции Xcode 8
Interface Builder
С выходом iPhone 6 и 6P в 2014 году, размеры экранов iPhone стали все больше и больше, адаптация экрана стала необходимым решением, и в будущем Apple может выпустить iPhone различных размеров.
В год выпуска iPhone 6 и 6P, Apple добавила новую функцию Size Classes в Xcode 6, основанную на原有 Auto layout, что позволяет использовать один XIB или SB файл для адаптации экранов различных размеров и устройств iPhone и iPad.
В Xcode 8 Apple представила более мощную функцию визуального редактирования и предварительного просмотра, которая позволяет предварительно просматривать текущий XIB или SB на различных размерах экрана без запуска приложения. (Эта функция я помню, что была в предыдущих версиях Xcode, но была спрятана довольно глубоко, и теперь Apple вынесла ее наружу)
Выберите XIB файл и нажмите на красную рамку внизу, и появится список размеров экрана от 3.5 до 5.5 дюймов. Нажмите на разные размеры экрана и варианты ориентации, чтобы переключить различные экранные отображения. На iPad можно также выбрать, разделен ли экран, что делает функцию очень мощной.
Interface Builder
С правой стороны есть опция Vary for Traits, нажав на которую можно одновременно отображать все доступные стили экрана, функции такие же, как и на изображении, только выглядит это больше.
Interface Builder
Еще одно замечание: размер нового созданного XIB контроллера больше не 600*600方块, а по умолчанию это прямоугольник файла XIB для iPhone 6s, что выглядит значительно лучше.
Изменения в General Target
До Xcode 8 вам нужно было вручную устанавливать сертификаты и файлы описания. Если при установке出现了 ошибки, вы можете исправить их, нажав Fix issue. Но есть проблема в том, что опция Fix issue не всегда работает хорошо, и иногда даже при правильных настройках здесь может быть подсказка о необходимости Fix issue.
Возможно, Apple также意识到 это проблема, и в Xcode 8 можно использовать опцию Автоматическое управление подписью, чтобы Apple управляла сертификатами и файлами конфигурации, и все настройки также выполняются Apple. При создании нового проекта в Xcode 8 эта опция по умолчанию выбрана.
Автоматическое управление подписью
На изображении выше можно увидеть, что Apple автоматически управляет сертификатами и файлами конфигурации. В предыдущих проектах, если вы хотели установить имя приложения, которое будет отображаться на телефоне после установки, вам нужно было вручную изменить поле Display Name в файле Info.plist, а теперь это можно сделать directamente в General, и это изменение будет синхронизироваться с Info.plist.
Но что, если я хочу сам управлять сертификатами и файлами описания? Достаточно просто убрать опцию Автоматическое управление подписью.
Автоматическое управление подписью
Если вы вручную устанавливаете сертификаты и файлы описания в Build Settings, вы можете заметить, что опция Provisioning Profile помечена как Deprecated, что означает, что Apple не рекомендует вручную устанавливать их.
Плагины Xcode
После обновления до Xcode8 можно обнаружить, что все сторонние плагины в Xcode8 стали неактивными, и даже опция плагинов в меню панели инструментов исчезла. В прошлом многие разработчики iOS использовали Alcatraz для управления плагинами,但现在 Alcatraz также не доступен. Однако Xcode8 himself обновил компилятор, добавив некоторые хорошие функции плагинов в Xcode, такие как выделение строки.
В Xcode8 поддерживается разработка плагинов, и нам предоставлен шаблон плагина, разработанные плагины можно загрузить в App Store. Apple делает это по причине того, что ранее Xcode и плагины работали в одном процессе, поэтому сбой плагина также мог привести к сбою Xcode. Теперь Apple представляет плагины как отдельное приложение, работающее в отдельном процессе, что не влияет на Xcode.
Xcode Source Editor Extension
Runtime Issues
В процессе разработки, из-за синтаксических ошибок или явных ошибок в коде (например, Retain Cycle), компилятор может обнаружить и выдать желтые или красные предупреждения. Однако некоторые ошибки, вызванные логикой кода, компилятор не может найти. Например, следующая строка кода, из-за проблем с логикой кода, приводит к взаимной ссылке между двумя массивами, которые не могут быть освобождены.
Циклическая ссылка в массиве
В этот момент можно использовать новую функцию Runtime Issues, предоставленную Xcode8, чтобы найти проблемы,出现的运行过程中,并通过 Graph способ визуализации проблем для разработчиков.
Runtime Issues
Debug Memory Graph
В Xcode6 появилась новая функция Debug View Hierarchy, которая позволяет отладить текущий уровень видимой иерархии приложения, что очень удобно для поиска ошибок, связанных с UI. В Xcode8 Apple предоставила функцию Debug Memory Graph, с помощью которой可以直接 выбрать объект и увидеть его отношения с памятью.
Debug Memory Graph
Debug Memory Graph и Runtime Issues можно использовать вместе, после анализа отношений памяти с помощью Debug Memory Graph, нажав Runtime Issues можно увидеть уже обнаруженные проблемы с памятью.
Swift 3
Xcode8带来了新版本的Swift3,新版本的Swift变化较大,如果旧版的Swift项目在Xcode8上编译可能会失败。对此,苹果为开发者提供了Swift迁移工具,听说不太好用(我没用过这个工具)。
Если вы не хотите сразу迁移 к Swift3, можно настроить это в Builder Settings, установите Use Legacy Swift Language Version в YES, чтобы продолжить использование старой версии Swift2.3.
Использовать версию Swift Legacy Language
Другие обновления
Новая версия шрифта Xcode, SF Mono Regular. После обновления Xcode я очень люблю этот шрифт, он делает код очень整齐.
Строки, которые редактируются, подчеркиваются. Ранее в Xcode был плагин с этой функцией, Xcode8 интегрировал эту функцию, что делает использование очень удобным.
В последней версии API документация изменила стиль представления значительно.
Удобнее создавать документацию (будь то VVDocumenter, написанный Мяу Шэнь), в Xcode8 можно поместить курсор на метод и создать документацию с помощью快捷ки option + command + /.
Адаптация Xcode 8
Адаптация XIB и Storeboard
До Xcode8 создание файла XIB или SB было方块 XIB файлом размером 600*600. После Xcode8 созданные XIB файлы по умолчанию имеют размер 6s.
Но когда Xcode8 открывает старые проекты XIB или SB файлов, появляется следующий диалог, в этот момент обычно выбирают Choose Device.
Выберите начальный вид устройства
Но есть проблема, если Xcode8 открывал этот файл XIB и选择了 Choose Device. Другие компиляторы версий Xcode8 и ниже не смогут открыть этот файл, появится следующая ошибка:
Документ “ViewController.xib” требует Xcode 8.0 или новее. Эта версия не поддерживает документы, сохраненные в формате Xcode 8. Откройте этот документ с Xcode 8.0 или новее.
Есть два способа решить эту проблему:
В то же время обновите Xcode8, это метод очень рекомендуется, следует встретить изменения.
Щелкните правой кнопкой мыши на файл XIB или SB -> Открыть как -> Код, удалите строку поля ниже в файле xml.
Ошибки компиляции
После обновления Xcode, Xcode8 не совместим с некоторыми модификаторами и语句ми, использовавшимися ранее, что может привести к ошибкам компиляции. Причина таких ошибок может быть многообразной, вот несколько примеров, но все же, пожалуйста, вносите изменения в зависимости от вашей ситуации.
Раньше некоторые релевантные модификаторы generics, такие как nullable, могут генерировать ошибки.
CAAnimation и его подклассы, после установки свойства агента, необходимо следовать правилам @interface(), в противном случае появится ошибка, и т.д.
Адаптация прав
Это, наверное, входит в категорию адаптации iOS10 системы, недавно занимался этими двумя, поэтому просто написал их в адаптацию Xcode8.
После iOS10 в Info.plist необходимо добавить новые поля для получения прав, в противном случае выполнение на iOS10 приведет к сбою. Вот некоторые常用的 поля, если не хватает
Мало, пожалуйста, дополните в комментариях.
Референции: developer.apple
Push Notifications
Push Notifications в Apple были大幅更新之前iOS8 и iOS9, функции推送 стали все более мощными. После iOS10 Apple推出了 UserNotifications фреймворк, с помощью которого можно лучше контролировать推送-уведомления, можно обновлять, изменять уведомления на экране блокировки, можно добавлять изображения и т.д.
Но после упаковки с использованием Xcode8 и без изменений в коде, вы обнаружите, что Apple отправила вам письмо. Это письмо примерно означает, что для использования推送-уведомлений необходимо вносить изменения в код, в противном случае их использовать нельзя.
Push Notifications
Это потому, что после Xcode8, если нужно использовать функцию Push Notifications, необходимо установить флажок вCapabilities -> Push Notifications в YES, в противном случае возникнут проблемы с удаленной рассылкой, и вы получите это письмо от Apple.
удаление системных логов
После обновления до Xcode8, в процессе отладки и выполнения,我发现控制ная панель напечатала много непонятных логов, эти логи являются системными, не имеющими отношения к разработчикам. Но
Так много логов выглядит беспорядочно, как их можно заблокировать?
система: com.apple.UIKit, категория: HIDEventFiltered, уровень включения: 0, уровень сохранения: 0, базовое TTL: 0, TTL информации: 0, TTL отладки: 0, генерация симптомов: 0, включение oversized: 1, настройка конфиденциальности: 2, включение личных данных: 0
Добавьте поле OS_ACTIVITY_MODE в Target -> Edit Scheme -> Run -> Arguments и установите значение Disable.
OS_ACTIVITY_MODE
Кстати, на днях, когда я устанавливал параметры log, я обнаружил, что можно напечатать время загрузки приложения, включая общее время загрузки и время загрузки динамических библиотек, и т.д., установив параметры в Arguments.
Добавьте поле DYLD_PRINT_STATISTICS в Environment Variables и установите значение YES, и время загрузки будет напечатано в консоли.
Информация для вывода в консоль
awakeFromNib выдает предупреждение
В старых проектах в Xcode8, в местах, где метод awakeFromNib был переписан, возникает следующая ошибка. Это происходит из-за того, что не был вызван метод super, к счастью, я всегда использую super, и код в настоящее время не имеет проблем.
Метод может пропустить вызов [super awakeFromNib]
Указанные выше новые функции Xcode 8 и ошибки, с которыми я сталкивался, представлены редактором给大家. Надеюсь, это поможет вам. Если у вас есть какие-либо вопросы, пожалуйста, оставьте комментарий, редактор ответит вам своевременно. В этом regard, я также очень благодарен всем за поддержку呐喊 учебника сайта!
Заявление: содержание этой статьи взято из Интернета, авторские права принадлежат соответствующему автору, контент предоставлен пользователями Интернета, сайт не имеет права собственности, не был отредактирован вручную, и не несет ответственности за соответствующие юридические последствия. Если вы обнаружите контент,涉嫌侵犯版权, пожалуйста, отправьте письмо по адресу: notice#oldtoolbag.com (при отправке письма замените # на @) для сообщения о нарушении,并提供 соответствующие доказательства. Если после проверки будет установлено, что материал нарушил права на интеллектуальную собственность, сайт немедленно удалят涉嫌侵权的内容。