Скрытые возможности Xcode 5

    Здравствуйте, уважаемые читатели Хабрахабра!

    Команде Бессвязного Девелопа удалось получить корпоративный аккаунт благодаря чудотворной программе Хабрахабра по поддержке начинающих стартапов без действующей монетизации. Мы — это ребята, которые частенько устраивают трансляции разработки различных приложений за 24 и 48 часов. Сегодня мы взяли курс на создание бесплатных аналогов нужных, но платных или обвешанных рекламой программ.

    Чтобы наш приветственный пост не получился «Ни о чем», сегодня я расскажу о некоторых вкусностях работы с Xcode 5, подсмотренных на iOS 7 Tech Talks. В программе вечера:

    1. Автодополнение кода: печенье, которое еще не все попробовали
    2. Edit in scope: сытный шоколадный тортик
    3. Объекты IB: назовите этот сорт клубничного желе
    4. Двойной статус-бар: подавайте шоколадный шейк охлажденным
    5. Color Blended Layers: вы неправильно наносите ромовый крем
    6. Concurrent Object Enumeration: покройте все сахарной пудрой
    7. Локализация: хватит каждый раз греть духовку


    Автодополнение кода


    И так, вы дружите с Xcode уже больше пяти лет и думаете, что знаете о нем все? А что, если я скажу, что необязательно прописывать возвращаемый тип для инициализации автодополнения кода? Забудьте про:

    image

    Теперь можно писать вот так:



    Edit in scope


    Положим, у нас есть простой метод, не претендующий ни на какую интеллектуальную значимость:



    Ошибка видна даже начинающему программисту: мы создали новую переменную number в зоне видимости уже существующей переменной с таким же именем. Можно, конечно, ручками поменять все названия. А что, если лень? А что, если нет времени? Но ведь можно использовать Cmd+F! Нет, нет и нет. Теперь можно навести курсор на переменную и увидеть маленький треугольничек рядом:



    Нажав на эту иконку, мы вызовем контекстное меню с заветным «Edit All in Scope»:



    Вот, как это выглядит в режиме реального времени:



    А для любителей горячих клавиш есть отдельное сочетание (Cmd+Control+E):



    Объекты IB


    Я по служебному долгу частенько разбираюсь в чужом коде, а в частности, с чужими Storyboard'ами. В некоторых интерфейсах, собранных предыдущими разработчиками, черт ногу сломит. Я хочу сыграть с вами в игру: где какой UIView?



    Неожиданно? Но эту ситуацию можно запросто поправить! Ведь все элементы интерфейса можно называть как угодно. Пожалуйста, придерживайтесь хорошего тона и думайте о будущих разработчиках. Может, когда-нибудь, добро вернется к вам:



    Двойной статус бар


    Говорите, ваше приложение идеально работает? Оно на 99,9% покрыто тестами, и вы даже поправили пару критических багов в Foundation? А что случится, если юзеру позвонят? Благо, у нас есть простой способ проверить. Симулятор поддерживает показ «расширенного» статус бара при звонке:



    Чтобы правильно обрабатывать события входящего звонка и расширения статус бара, можно либо начать слушать NSNotificationCenter:

    UIApplicationWillChangeStatusBarFrameNotification
    UIApplicationDidChangeStatusBarFrameNotification
    

    Либо реализовать следующие методы в вашем AppDelegate:

    - (void)application:(UIApplication *)applicationwillChangeStatusBarFrame:(CGRect)newStatusBarFrame;
    - (void)application:(UIApplication *)applicationdidChangeStatusBarFrame:(CGRect)oldStatusBarFrame;
    

    Color Blended Layers


    Всем, кто близок к программированию, очевидно, что прорисовывать прозрачные объекты сложнее, чем обрабатывать непрозрачные. Как минимум, девайсу нужно думать о фоне и тратить время на его прорисовку. Однако многие программисты пренебрегают, а некоторые даже не знают, как переводится свойство «opaque» (непрозрачный). Лучше так не делать.

    Например, возьмем обычный белый UITableView и включим Color Blended Layers:



    Красным симулятор показывает элементы с активным альфа каналом, зеленым — непрозрачные элементы. К сожалению, сейчас процессор тратит дополнительное время на то, чтобы прорисовать белый фон за прозрачным текстом. Решается это довольно просто, двумя действиями в Xcode — отмечаем галочку «Opaque» и делаем фон белым:



    После, все выглядит куда приятнее глазу:



    Стоит отметить, что, если вы используете картинку с альфа-каналом в своем приложении, то отметить галочкой «Opaque» будет недостаточно. Xcode уважает ваши прозрачные картинки (особенно, если это картинки котят), и даже если вы скажете ему, что картинка без прозрачности — иными словами, обманите его — он все равно поступит по чести и сделает картинку прозрачной. Когда нужно делать картинку непрозрачной — делайте это в каком-нибудь графическом редакторе. Xcode сможет обрабатывать картинку, как непрозрачную, только тогда, когда у картинки нет активного альфа-канала.

    Concurrent Object Enumeration


    Все, что я хочу показать вам в этом пункте — это следующая пара строк кода:

    NSArray *myObjects = ...;
    [myObjects enumerateObjectsWithOptions:NSEnumerationConcurrent
        usingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
            // Сделайте что-нибудь с элементом массива
        }];
    


    Особое внимание стоит обратить на свойство, которое мы передаем методу: «NSEnumerationConcurrent». Оно позволяет использовать все прелести многопоточного программирования при работе с массивом данных, не заморачиваясь с GCD или NSOperation.

    Локализация


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



    Нет, так не пойдет. А что, если вам просто нужно поправить мелкий баг в одной из локалей? Переключаться туда и обратно — затратно по времени. Есть решение проще, быстрее, умнее! Можно создать несколько разных схем для билда, да чтобы у каждой схемы был свой язык. Заходим в настройки главной схемы:



    Жмем «Duplicate Scheme»:



    B добавляем два флага: "-AppleLanguages (ru)" и "-AppleLocale ru_RU" (названия локалей стоит погуглить, если не помните):



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



    Заключение


    Огромное спасибо, что дочитали до конца!

    Я постараюсь почаще выкладывать разные интересности с WWDC и других конференций на хабр: иногда проще потратить 10 минут на чтение текста, нежели 40 минут слушать Tech Talk с тем же количеством информации. Однако я крайне настаиваю на том, чтобы каждый iOS разработчик посмотрел хотя бы 2-3 видео с этих конференций для самообразования.

    Кстати, тут ходят слухи, что следующая трансляция будет на Рождество (25 декабря) и мы попробуем создать «клон-убийцу» платных приложений типа «Heads Up» из App Store. Естественно, с русской локализацией.

    Вот такие мы — команда Бессвязного Девелопа: с тучей картинок, гифок и котят.

    P.S. если вы нашли ошибку или опечатку в тексте — обязательно напишите в мой хабрацентр.
    Бессвязный Девелоп
    0.00
    Company
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 58

      +3
      Действительно много полезного, спасибо!
        +3
        Кстати, оказывается, в iOS7 очень просто использовать эффект «Параллакса», как на главном экране iPhone.

        В следующей статье расскажу об этом :)
          0
          Типа этого не было в вашей прошлой статье.
            0
            Это было в моей следующей статье :) но пришлось убрать ее в черновики — сильно заминусовали.
              +2
              сталкивался полтора года назад с похожей ситуацией — раскрывали кое-какие возможности iOS на примере своего приложения. Вывод сделал такой — пишешь про разработку — пиши на абстрактном примере с кодом на github. Пишешь про приложение — пиши в Я пиарюсь со всеми вытекающими. Не стоит это смешивать — люди не любят.
                0
                Эх, теперь и я это знаю :)
        +2
        вообще-то такое автодополнение работает уже больше года, еще с xcode 4
          +1
          Но я все еще встречаю разработчиков, которые не знают об этом :)
            +1
            Вообще у xcode плохое автодополнение, по моим меркам оно чуть ли не отсутствует. Нужно писать именно сначала, например не поймет "-didLoad" вместо "-viewDidLoad". Упорно и настоятельно всем рекомендую попробовать appCode, ибо после него я на xcode как без рук, невозможно работать. Смотрю как люди тратят кучу времени на рутинные действия вроде того же написания "- (void)..." и грустно становится.
            Слава богу хоть в xcode 5 сделали нормальное cmd+shift+o с более догадливым автокомплитом, глядишь версии к седьмой и в редакторе кода сделают.
              0
              Эх, я бы тоже пересел на AppCode, да вот IB останавливает.
                +1
                Ну лично у меня IB это очень малая часть разработки, открываю xcode именно чтобы поработать с IB и протянуть аутлиты. Выделил для xcode и appcode по отдельному экрану, чтобы они запускались именно там и они никогда не пересекаются и не мешают друг другу.
                Тем более, в appCode уже есть экспериментальная поддержка xib, но сейчас никак не могу найти это демо-видео.
              +2
              Насладитесь этим плагином вместе со мной. github.com/chendo/FuzzyAutocompletePlugin
              Хотя отсутствие этой функции в самом Xcode откровенно раздражает
                +1
                спасибо, похоже, что это явный мастхев, щас буду всем его пиарить
            • UFO just landed and posted this here
            +7
            Ребят, а вы действительно не знали о половине этих фич до XCode 5?
              –1
              Многие фичи, наверняка, уже знакомы вам :) а некоторые, которые вы не знали, знакомы другим.
              Например, я про все это знал — просто решил собрать все вместе для других. Если вы научились хотя бы одной полезной вещи в этой статье — то моя миссия выполнена.
                +6
                Не забывайте указывать оригинал «собранных вами» скрытых возможностей:
                iOS 7 Tech Talk Videos / Hidden iOS 7 Development Gems
                  –1
                  Так указал ведь! :) даже ссылку дал! :)
                    –1
                    И более того, в конце еще и аргументировал написание статьи по следам этих видео :)
                  0
                  Не думал о входящем звонке, не знал о теме с прозрачностью в Color Blended Layers и Edit Scope. Мне эта информация очень пригодится.
                    +1
                    Не только звонок, ещё и активный personal hotspot
                  • UFO just landed and posted this here
                    +1
                    А есть для XCode какой-нибудь аналог Visual Assist, который сделал бы жизнь разработчика С++ немного проще?
                      +1
                      Пока есть appCode. Хоть он и позиционируется как ObjC IDE, но вроде как планируется «форкнуть» из него чисто С++ IDE. Вот, поглядите. www.jetbrains.com/objc/features/cpp.html. Я как-то раз писал очень маленькую программу на С++ в апкоде, но успел заметить, что работают рефакторинги, find usages, генераторы кода, разные подсказки для не очень опытных С++ кодеров чтобы не отстрелить себе обе ноги.
                        +1
                        Выглядит интересно, спасибо, сегодня попробую.
                      +1
                      Для начинающих — хорошо, но тем, кто давно знаком с Xcode будет скучно
                        +1
                        Да, всё клево. Еще люблю читать этот тред на SO иногда: Hidden Features of Xcode
                          +2
                          А где можно вашу цветовую схему забрать? :)
                            +2
                            Тема называется Solarized — Light
                            ethanschoonover.com/solarized
                            Или тут — github.com/hdoria/xcode-themes
                              –1
                              Да-да, именно эта тема!
                              0
                              Есть такое правило, указывать ссылку на источник. Так что я бы указал iOS 7 Tech Talks.
                                –2
                                Я указал, что информация с WWDC 2013. На всякий случай, добавил ссылку ;)
                                  +1
                                  Я понял, что меня смутило. Дело в том, что WWDC и iOS 7 Tech Talks — это разные вещи. Если я правильно помню, Tech Talks решили провести впервые в этом году после феноменально быстрой продажи всех билетов на WWDC.
                                    +2
                                    Вы не правы, Tech Talks были и в прошлом году. А автор статьи действительно путает два принципиально разных мероприятия — WWDC и Tech Talks.
                                      +1
                                      Да, что-то я загнул. iOS 5 Tech Talks точно были. Спасибо!
                                      –1
                                      Ой, и вправду, моя ошибка :) перепутал два мероприятия :) Спасибо! Поправил.
                                  +2
                                  UIControlState*** и UIControlEvent*** автоподстановка как путала так и путает, как падала в самые ответственные моменты отладки так и падет (отладчик вообще головная боль). Спасибо хоть встроенную интеграцию с системами версионирования довели до ума — правда тоже крешам редактора приводит.
                                    +1
                                    Очень рекомендую попробовать плагин FuzzyAutocomplete (проще всего поставить через Alcatraz). В свое время дло белого каления доводило автодополнение, затыкающееся на [NSString allo_] и требующее лишнего нажатия таба.

                                    Ну и проблемы с UIControlState/Event решаются «на ура» — просто пишете uicsttouupin или что-то в этом духе и все :).
                                    +1
                                    А какой софт используете для создания таких гифок с демонстрацией? Сколько не искал, под OS X ничего не находится :(
                                      0
                                      LICEcap — отличная, бесплатная программа :) жаль только, не умеет снимать системный статус бар (а может я не нашел, как).
                                      +1
                                      Насколько помню, у меня в Xcode не работала Edit in scope для C++, как и вкладка refactoring и ещё какие-то плюшки, пишет «Not avaible for C++» или что-то в этом духе, сейчас не могу проверить. Это нормально?
                                        0
                                        Ну, все-таки, Xcode позиционируется, как IDE для Objective-C с поддержкой C++. Поэтому мне кажется нормальным, что некоторые фичи не работают с плюсами.

                                        Хотя, насколько я помню, где-то пару месяцев назад Edit in Scope работало с плюсами (проект в универ делал).
                                        –1
                                        Сколько я помню возвращаемый тип никогда не писал. Даже в 3 версии.
                                          +3
                                          Такое ощущение, что читаю эту статью через сервис Meowbify.
                                            0
                                            А если еще будете писать под Android (if possible), то будет вообще айс!
                                              0
                                              Увы, я iOS разработчик. Да и android программистов у нас в команде пока нет. Если присоединятся — то будут статьи и по андроиду :)
                                              –3
                                              Стоит обратить внимание, что Edit All in Scope учитывает положение в области видимости _на экране_, а не в том scope, который привыкли иметь ввиду программисты. Это легко проверить, если редактировать переменную в куске кода, который виден не весь в данный момент. Все вхождения переменной ниже «за экраном» отредактированы не будут. Версия — 5.0.2.
                                                +2
                                                Наверное, я чего-то не знаю, или что-то делаю не так:

                                                  0
                                                  Ок, спишем на кривое построение индекса на отдельно взятой машине.
                                                  +2
                                                  Это неправда.
                                                  +2
                                                  Двойной статус бар — об этом забывают многие, даже Google Maps вместо того, чтобы чуть уменьшить область карты, съезжает вниз так, что нижние контролы наполовину не видны.
                                                    +1
                                                    Да что там, даже эппловая погода в ios 7 подобной фигней грешит. До сих пор.
                                                      +1
                                                      Всё же я был не совсем прав — сейчас потестировал, гуглокарты нормально скукожились. Но пару дней назад в машине смотрел гуглокарты, и они не скукоживались, а съезжали вниз на высоту статусбара — видимо, глюкнуло что-то, или в последнем апдейте исправили. Скорее первое — в iOS7 ни дня без глюков :(
                                                    +1
                                                    извините, немного оффтоп
                                                    подскажите, допустим ситуация — хочу на новогодних праздниках сделать простейшее приложение для iOS для фана
                                                    раньше на нём никогда не программировал, но есть опыт в других языках (C/C++/PHP/прочее)
                                                    для пущей сложности — английский знаю очень плохо
                                                    есть ли какой нибудь степ бай степ туториал? желательно по последнему xcodeу, пятому
                                                    ну или хотябы — последовательность действий мб?
                                                      0
                                                      Советую зайти на imaladec.com и пройтись сверху вниз по туториалам :)
                                                      +1
                                                      Большое спасибо за быстрый запуск под разными локалями.

                                                      Only users with full accounts can post comments. Log in, please.