• Как завершить регистрацию аккаунта разработчика iOS?

    kaspartus
    @kaspartus
    Так взять и написать им, в письме ведь об этом написано.
    Ответ написан
    Комментировать
  • Как вписать предложение в прямоугольник заданного размера?

    kaspartus
    @kaspartus
    В iOS7 при помощи Text Kit это можно сделать.

    Краткая история: Есть книжка iOS 7 by tutorials - там делают приложение-книжку, много текста, есть картинки, текст форматирован. Возникают логичные вопросы: "Как разбивать его на страницы? Как узнать сколько текста уместилось на странице?" - ответ прост, у NSLayoutManager есть метод glyphRangeForTextContainer: он возвращает кол-во символов в контейнере.

    Потому можем сделать так:
    1. Создаем NSTextStorage, скармливаем ему NSAttributedString.
    2. Создаем NSLayoutManager, отдаем его textStorage'y при помощи addLayoutManager
    3. Создаем NSTextContainer, отдаем его layoutManager'у
    4. Вот тут уже можем при помощи glyphRangeForTextContainer: узнать поместился текст или нет. Меняем шрифт, считаем еще раз. Можно например начать с 10 и расти вверх, как вылезли - взяли предыдущий размер.
    5. Создаем UITextView при помощи initWithFrame:textContainer:
    6. Успех

    Метод костыльный + overkill, работает только на iOS7+. Возможно при помощи textKit можно сделать все изящней, а возможно можно все аккуратно обойти.
    Ответ написан
  • Установка Cocoapods на OS X Mavericks (Xcode 5)?

    kaspartus
    @kaspartus
    1. sudo тут не нужно
    2. нагуглил про ошибку - stackoverflow.com/questions/20399531/how-to-tell-g...
    Ответ написан
    Комментировать
  • Где найти статьи или книги по созданию простой галереи для IOS на русском?

    kaspartus
    @kaspartus
    На русском не знаю, а так я бы посоветовал погуглить iOS cookbook - там будут сразу примеры по каждому пункту, из кусочков соберете. На тему актуальности - смотрим книжки по iOS7.
    Ответ написан
    Комментировать
  • Как реализовать callback для обновления UI из http-запроса (NSURLSession)?

    kaspartus
    @kaspartus
    Блок completion нигде не выполняется и никуда не идет, он начинает выполняться, когда запрос выполнился так или иначе. А main thread никого ждать не должен. Просто в нужное время сессия вызовет completion-блок, действительно, не в главном потоке.

    Немного советов и схема. Возможно предложу не идеальный вариант.
    1. Выпиливаем все до создания сессии в отдельный метод, оно и логично - мы все подготавливаем к дальнейшей работе.
    2. Пишем отдельно метод, который создает таск, при помощи которого будем логиниться(то что в вашем методе после создания сессии). Создаем сам таск при помощи метода dataTaskWithRequest:completionHandler:, completion-блок вызовется когда таск выполнится тем или иным образом. Если успех - к п.3
    3. Вызываем отдельный метод внутри этого блока, где будем писать дальнейшую логику после логина, туда можно накидать создание других тасков. Метод лучше вызвать в главном потоке, т.к. наверняка захочется что-то сделать с UI.
    [self performSelectorOnMainThread:@selector(afterLoginLogicMethod) withObject:nil waitUntilDone:NO];


    P.S. По поводу callback'a от тасков
    Можно его получать через completion-блоки, а можно через делегатные методы, кому как удобнее.
    Ответ написан
    7 комментариев
  • Пройдет ли модерацию в AppStore приложение на UIWebView, которое будет отображать HTML версию сайта с сервера?

    kaspartus
    @kaspartus
    Читал истории, что для слишком простых приложений люди добавляли сверху дополнительный небольшой функционал. Еще как вариант можно навигацию сменить на нативную. Javascript отпиливает панельку навигации со страницы, используем UITabBarController например.
    Ответ написан
    Комментировать
  • Разчет высоты UITableViewCell по высоте текста?

    kaspartus
    @kaspartus
    Выглядит вполне толково, по идее должно работать, я бы тут предложил 2 варианта:
    1. Дебажим. Ставим брейкпоинты, логируем и прочее.
    2. В книжке видел пример для динамического расчета высоты ячейки.

    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
      static UILabel* label; 
      if (!label) {
        label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, FLT_MAX, FLT_MAX)];
        label.text = @"test";
      }
      label.font = [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline];
      [label sizeToFit];
      return ceilf(label.frame.size.height * 1.7); 
    }


    Сам пробовал - работает. Думаю, переделать увеличение высоты с x1.7 на +2margin проблем не составит.
    Ответ написан
    Комментировать
  • Какой у вас опыт разработки мобильных приложений?

    kaspartus
    @kaspartus
    1) Препятствий бесконечно и всех их не перечислить, начиная от багов в стандартных библиотеках, заканчивая недостатком опыта.
    2) Маркетолог раскручивает, в основном банерная реклама, реклама в других приложениях, работает вроде неплохо. В зависимости от направленности приложения может хорошо сработать вирусная реклама, любимая история по теме: habrahabr.ru/post/173405
    3) Stackoverflow, книжки, внимательно следить за актуальностью знаний. Обе sdk быстро развиваются и меняются реализации, даже казалось бы базовых вещей. Экспериментировать, задавать вопросы и еще раз экспериментировать, без практики и набивания шишек прочитаные книжки/просмотренные лекции ничего не стоят.
    4) Картинки рисовал дизайнер в компании, в целом не было особых проблем то же нарисовать в фш самому. Дизайн важен, так как людям не связанным с программированием без разницы где вы храните данные, какие вы патерны используете, как вы красиво все распараллелили, но зато точно заметят небольшой косячок в UI. На самом деле есть куча примеров, когда приложение простейшее в реализации, но интерфейс очень красивый/оригинальный, и потому оно очень популярно.
    Ответ написан
    Комментировать
  • Какие нужны базовые знания в области разработки мобильных приложений?

    kaspartus
    @kaspartus
    Про порог входа: ничего специфического, лучше понимать ООП, опыт в С/С++ будет небольшим плюсом, а все остальное будет получено в процессе изучения сдк. Понятно, что у любого сдк есть "любимые патерны", их тоже можно изучить уже в процессе.

    Про джуниора: Есть о чем поспорить, и очевидно что строгих рамок нет, лично я считаю, что достаточно просто прочитать одну толстую книжку "обо всем" по iOS разработке и попробовать оттуда все.
    Из принципиального:
    1. патерн delegate, KVO, notification, singleton, уметь пользоваться блоками(даже не обязательно самому их писать)
    2. сетевое взаимодействие
    3. Работа с UITableView
    4. Уметь создавать работающие кнопочки как из интерфейса, так и из кода.
    5. Уметь выносить расчеты в другой поток любым способом.

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

    kaspartus
    @kaspartus
    Еще можно быстренько сделать прототип просто при помощи storyboard в xcode. True way.
    Ответ написан
    Комментировать
  • Как организовать доступ к IP камере через iPhone?

    kaspartus
    @kaspartus
    А описания api нет? Если нет, то смотри какие запросы идут, или в браузере, или гони трафик через прокси и так восстановишь api.

    Потом просто пишешь свое приложение, повторяя эти запросы.
    Ответ написан
    Комментировать
  • Создание клиет серверного приложения для iOS?

    kaspartus
    @kaspartus
    Могу посоветовать фреймвок, чтобы не слишком париться над бэкендом. https://github.com/helios-framework/helios
    Ответ написан
    Комментировать
  • Заполнить view кнопками?

    kaspartus
    @kaspartus
    Немного не так как хочешь, но можно так:
    1. Распиливаем вьюшку на горизонтальные полосы высотой 2 высоты кнопки + 10 точек(можно поиграться). По высоте между полосами сделать пропуск в 5 точек.
    2. Каждую полосу вертикально разбиваем на ячейки(шириной в кнопку), горизонтальное расстояние между ними выбираем случайно между 5-10, в итоге ячейка имеет ширину кнопки и ее двойную высоту.
    3. Кнопку помещаем в ячейку, положение по вертикали выбираем случайно. Итого расстояние как по вертикали так и по горизонтали будет на больше 10, а по горизонтали гарантировано больше 5
    4. Повторяем для остальных полос(лучше добавить рандомное начальное горизонтальное смещение для кнопок). В итоге между "соответствующими" кнопками в соседних полосах будет в самом худшем случае 2 высоты кнопки + 25 точек.

    4 пункт единственный не удовлетворяет условию. Все это дело можно оптимизировать, чтобы гарантировано прижимать кнопки в полосах к своему соседу сверху.
    Ответ написан
    Комментировать