← All posts tagged iOS

React Native настолько суров, что (ios) добавление вызова его внутренней лог-функции в его внутренний же метод (рядом вызывался RCTLogError, а я добавил RCTLogInfo), при превышении какого-то количества строк лога во время стартапа сильно влияет в плохую сторону на то, что программа вообще запустится.

Короче, вставил вызов RCTLogInfo — программа не запускается. Убрал — запускается.

Они в RCTLog* оказывается не только в stderr льют но еще и делают вызовы из натива в юзерский коллбек JS, который тоже может быть заинтересован в логах (!!!), а JS еще не проинициализировался/очереди/всетакое/карочи стыдобище.

Мало мне было тошноты от хипстерского MongoDB — нынче по причине не полной удовлетворенности от отнюдь не хипстерского Codename One взял React Native, хипстерскую технологию номер 2 в моем списке попыток.

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

Продолжение драмы про то как MS закопал RoboVM и в продолжение к моему посту #2828904

Да, как я и предсказывал, вся команда осталась работать на MS/.NET, источник — twitter.com

Да, как я и предсказывал, афтар строит из себя дерево и отмазывается тем, что их прикрыли "because they didn't sell enough licenses to make it profitable for Xamarin" — reddit.com

Да, пользователи на форуме жалуются: "чувак, мы писали 2 года нашу игру, завтра релиз, ты и твои приятели получили бабла от продажи лавки Xamarin-у, и нас кинули, как же так чувак? <8-o ". Чувак рекомендует переводить все на дотнет, не медля и дня.

pbs.twimg.com а это сам афтар, "OOPS!" говорит нам его фотография.

Таковы судьбы людские в жерновах капитализма.

Когда RoboVM (компилятор жабы для iOS) был куплен Xamarin-ом, все удивленно подняли брови и заподозрили неладное, потому что Xamarin это .NET, и жаба там ну вообще никуда. Ребята из RoboVM говорили, что это всё для общей пользы, для концентрации на дальнейшем развитии итп.

Когда MS некоторое время спустя купил Xamarin, все огорченно вздохнули и стали ждать неизбежного, а кто был с верой в доброту, тот спрашивал "как-то они там будут? надеемся на лучшее". Ребята из RoboVM говорили что-то там такое, но их никто не слушал.

Когда сегодня объявили о том, что MS убил RoboVM, как-то появилась определенность. Товарищи из LibGDX вон даже расписали план badlogicgames.com , а товарищам из Интела надо готовиться нести тяжкое бремя ответственности. Ребята из RoboVM не знаю, что там щас говорят.

Я с верой в доброту, и мне интересна судьба форка RoboVM, который полнофункциональный, но без некоторых важных фишек. Чо там коммьюнити? Что там главный афтор? Как-то он теперь людям в глаза смотреть будет? Может у них там какой рейдерский захват случился, афтор будет плакаться прилюдно что его кинули? А может МС ему бабла отсыпал для работы над iKVM или над Mono/iOS, и начальником поставил, и он теперь навостряет лыжи в новом направлении?

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

На волне кросс-платформенных тулкитов, из которых в настоящий момент педалим с товарищами на Codename One аппликуху в продакшн, попробовал позырить еще GluonHQ.

GluonHQ это коммерческий порт JavaFX на устройства. Я не в курсе что именно они там свое напилили в дополнение к открытому порту JavaFX (который есть, но я не щупал), но в демо апп есть гуй с видом как Android Material (круглая кнопка добавить, список, боковое меню итд).

Под IOS это все компилируется посредством robovm: поставляется один универсальный gradle файл, который и компилятор и зависимости все тянет сам, он билдит и ios и android. Очень аккуратненько сделано. Гуй очень аккуратненько выглядит (почти, см ниже)

Перфоманс на Iphone 4S драматичный: например левое меню открывается за отчетливых 3 кадра продолжительностью около 1.5 секунд. Текстовые поля — нативные, динамические, сделаны достаточно убого как и везде (то есть в Codename One).

Вердикт:

— удобство/девелопмент: 5+
— полнота гуя: 5
— графический движок: 2-.

Сравнительные технологии (для productivity app), соответственные оценки

Codename One: 5/3/4
Qt Quick: 3/4/5+
LibGDX: 5/1/5+

Такие дела.

Ссылка: bitbucket.org

JetBrains AppCode:

Я было напхал в 1 файл несколько Obj-C классов, потом вздумалось мне таки вынести один некий класс в свой h файл, попросил AppStore вынести декларации в отдельный файл (рефактор), так он и mm файл мне тоже сделал по своей инициативе, и где сцылки на класс есть там все новые инклуды прописал по всему проекту, карочи это вирусная реклама, я прямо плакал весь.

перевёл единственные 10к своего кода со свифта на обжц. Потому что на текущей тачке не было достаточной версии Хакинтоша, чтобы его конпелять. 20 минут потуг, а затем стало гораздо легче. В принципе, добавились h файлы, кода стало процентов на 15 больше, ушел гемор с неконвертацией целых типов между собой и в плавающие. Такое.. Туплы перевёл в массивы фикс длины, теперь сижу думаю, в какой же момент меня обманули.

Понадобилось постпроцессить некие типовые сгенеренные по-местному PDFы на IOS-е: слегка распарсить, и добавить несколько аннотаций (PDF аннотаций), потому что нативный местный Quartz не умеет аннотаций.

Чем это сделать? Решил взять Хаскель, наклепать разборщик и сборщик PDF-а, без особой детализации.

Скачал по этому случаю EclipseFP (хаскель под эклипс). И что бы вы думали? Оно таки работает, и даже достаточно приятно, и даже фичастее чем Leksah (да упокоится оно с миром). Но по исходникам местных установленных пакетов все равно не лазит, хотя типы выводит и подсказывает. И даже с локальными перемененными ок. Я рад, я весьма рад! Осталось только будет бинарнег собрать под IOS, допишу, буду кросс-компилировать.

Три любопытные мне кровоточащие технологии в одной маленькой задаче (хаскель, eclipsefp, cross-compilation). Ужос, аж трепещу.

Знакомьтесь, Swift

Короче, набросал в дизайнере некий UIViewController, там в нем лежит пара кнопок, а в методе viewWillLayoutSubviews я вызываю super, а затем пишу view1.frame = expr1; view2.frame = expr2; для того чтобы эти кнопки расставить по тем правилам которые не вписываются в стандартную концепцию.

И значит оно на втором присваивании мне вылетает по ошибке что Optional value is None (между прочим, они в Swift-е заменили все указатели на optional и теперь вместо NullPointer везде летит вот эта вот ошибка, типа прогресс! А в отладчике все поля имеют тип ImplicitlyUnwrappedOptional )

Казалось бы, присвоение новых координат для кнопки, чему там лететь?. Кнопки одинаковые, не Null, имеют some значение. Где подвох?

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

Знакомьтесь, язык Swift :

/* ux1:Double
scale:Double */

var qq: Double = ux1 * scale + backgroundImageView.frame.origin.x; // float
^^^^^^ error: cannot convert Double to UInt8

UInt8! Очень говорящая ошибка.
А так работает:

var qq: Double = ux1 * scale + Double(backgroundImageView.frame.origin.x);

У него с иерархией numeric types (перемешка с NSNumber) — полный аут.
Ну а вообще ничего, если можно программирование под мак назвать "ничего".

TLDR: для яблофагов и виндофагов: клиент к жуйку/пойнту/итд набрал первую космическую скорость.

Детально:

Оседлал CodenameOne (это такой кросс-платформенный тулкит на жабе).
Уже второй день усиленно рефакторю сорцы Juick Advanced, выделяю андроедо-зависимую часть, обкладываю остальное интерфейсами и памперсами.
Портирую под CodenameOne всякие либзы, шоб они там собирались, типа org.json, jsoup и вот стандартный java.regex.Pattern (это был ад).
Работа спорится, даже в укро-политику усиленно втыкать перестал.
Гуй (UI) андроедский, конечно, побогаче будет.
А CodenameOne победнее. RichText там очень грустно.
Но вроде для бедного человека на iOS/Win8/J2ME сойдет.
Зато всякие там парсеры/протоколы/структура_данных для жуечки, пойнта, bnw и фейсбука — практически без изменений юзаются.
Короче, первая космическая скорость заключается в том, что я это всё свалил в кучу и оно заработало: листается/скроллится, комментики качаются, авторизация авторизируется.
Настроек будет не слишком много, потому что цели соблюдать концепцию "Advanced" (базовый клиент + все фичи включаются явно) мне здесь без надобности.
Уведомления (push messages) буду писать самому руками с нуля клиентскую часть под все платформы, потому что афтары хотят 75 баксов в месяц чтобы я оплатил наше совместное удовольствие, если сам не хочу руками писать.
Потому что, я думаю, доходы от продаж на ios/win8 не окупят 75 баксов в месяц perpetually, но подкрепят только мой краткий первоначальный enjoyment. Если доживем. Много тут юзеров c гейфонами сидят? Отзовитесь.

Technology preview для андроеда (выкладывание на яббл долго и муторно) :

play.google.com (если нет то появится)

Скриншоты: imgur.com

Такое же точно как в андроеде, будет и на остальных платформах (Win8, J2ME (если влезет)).
Поставил минимальную цену, чтобы сейчас оценить не реальную необходимость в программе (программы нет), но количество технически любопытных и живых юзеров. Предупреждаю!! Там только чтение восьми лент и комментов, без картинок и без ничего вообще. Даже кнопка back там не навигирует из комментов назад в ленту (нужно свайп слева направо делать)

Всем успехов в труде!

P.S. juick advanced в режиме long term support + допил пробелов.

У нас на раёне внезапно появилось много нубзов в Ингрессе. Пишут в чатег с ошибками, шуток не понимают, шугаются. Это оттого что вышел Ингресс под IOS.

Угничу для привлечения нового мяса надо самому написать клиент к жуйку под IOS, и публика появится. Тока клёви клиент, а не такой как в андроеде. И с уведомлениями, да. Дизайнера надо завлечь, в дизайн радуги подбавить какой-нибудь, аутентичные кнопочки — и полсотни душ получим горячими.

Тренды в дизайне интерфейсов: от любви до ненависти

тут: habrahabr.ru

Поддерживаю товарищей. Перед нами БАО (*) на марше, и битва со здоровым рассудком — в разгаре.

Аффтары статьи не знают про феномен БАО, но формулируют/выводят его своими фразами:

— Apple заслужила репутацию диктатора [оккупация]
— Прозрачность создает визуальный беспорядок [хаос]
— Есть другая особенность, столь любимая Apple [анальность]
— в конце концов с этим можно смириться [подчиненность]
— ОС ведет себя непоследовательно [хаос]
— Меню, написанное приписными, является проклятием [бездна]

Такие дела, ребятки

(*) БАО = lurkmore.to

Локализация в iOS отстает от таковой андроедовской на много лет. Это просто для галочки сделано у них.

Короче, в первом варианте вы просто копируете весь XML с описанием гуя, и меняете в нем строки, а щедрость ОС состоит в том, что она просто подгружает тот файл что нужно. Просто офигенно придумано, потому что менять программу после процедуры локализации становится невозможно. Добавил полечко — открывай редахтур и добавляй в каждый из N языков, посредством всё того же драгомыжества.

Во втором варианте вроде бы строки токо можно вытащить и локализовать их. На этом варианте остановился.

После того, как локализовал таким способом файл интерфейса, оно на девайсе показывает по-старому, хотя я язык переключил.
После того, как, оказывается, сама ОС кеширует что-то и не будет показывать если включилась локализация, даже после деплоя обновленной скомпиленной версии, удалил предварительно апп на девайсе. Думаю, а шо ж юзеры-то будут делать?

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

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

В мануале офигенная привычка снабжать скриншотами (а шо им сердешным еще делать, когда ни шорткатов шоб сказать шо нажать, ни понятия "глобальное меню" или "локальное меню" или "action bar" — ничо нету, иконка может быть прилеплена где угодно просто от балды — приходится тупо скриншотить, и так у них всё!). Скриншота на эту иконку с языками, естественно, нету, предполагается, что всё ясно и так. Ищу глазами, ничо не нахожу. Возникает характерный для общения с яблопродукцией комплекс неполноценности и сожаление что я не гомосек, чтобы думать в ними в резонанс и иметь одинаковые "естественные" ожидания.

Стало быть, думаю, что я тупой. Решаю поглядеть, может разгадка будет в релиз нотах к новому 6 xcode который бета? И верно, большими буквами написано: теперь в шестерке можно посмотреть как оно будет выглядеть в разных языках. Понимаю, что доку выше писали совестливые люди, которые стыдились прямо сказать, что в 5 xcode (который вышел относительно недавно) посмотреть локализацию сделанную вторым образом, — невозможно.

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

Отвлекаясь на жуечку и семейство, уже трачу на это третий час.