Как узнать UDID с помощью iTunes 12

Теперь, что бы в последних версиях iTunes узнать UDID, нужно:

  1. Запустить iTunes
  2. Подсоединить iOS-устройство
  3. Кликать по пункту «Serial Number» до тех пор, пока не отобразится UDID

А чтобы узнать номер билда iOS, нужно также кликнуть по пункту версии iOS.

Как узнать UDID с помощью iTunes 12

[iOS] Еще один способ снятия логов

К сожалению, утилита iPhone Configuration Utility, с помощью которой можно было легко следить за логами, уже давно не обновлялась, и не поддерживает iOS 8.

В качестве альтернативы можно использовать стороннее решение – iOS Console (в отличии от iPhone Configuration Utility, приложение доступно только для OS X). Это простое решение, которое считывает и выводит в реальном времени логи с iOS, а также позволяет данный лог сохранить.

ios_console

[Android] Изменение цвета заголовка вкладки в Google Chrome

Обновление операционной системы Android до 5.0 принесло еще одну интересную «фишку» – теперь заголовки вкладок в браузере Google Chrome можно перекрашивать в кастомные цвета (по умолчанию они сероватого цвета).

Для того, чтобы установить цвет заголовка вкладки, достаточно в коде страницы прописать следующее:

<meta name="theme-color" content="#3F51B5">

[Android] Запись с экрана устройства

Начиная с Android 4.4 (KitKat) появилась возможность записывать видео с экрана устройства через adb.

Пример команды:

adb shell screenrecord --size 360x640 --bit-rate 2000000 --time-limit 30 /sdcard/file.mp4

Баг с наложением layout-ов в LinkedIn (iOS)

В iOS-версии приложения LinkedIn (v 8.3) для iPad обнаружил интересный баг, который может появится после возврата из встроенного браузера в приложение (к примеру, открыли ссылку из ленты коллег, почитали, а затем вернулись обратно в ленту). Баг заключается в том, что при скроллинге ленты двигается только как бы «верхний» слой, а нижний, по какой-то причине, остается закрепленным (на скриншоте это отчетливо видно).

А от куда взялся нижний и верхний слой? Я так понимаю, что нижний слой — это тот, который был до перехода во встроенный браузер, а «верхний» — тот, который срендерился уже после возврата из браузера.

Баг с наложением layout-ов в LinkedIn (iOS)

Про сторонние клавиатуры в iOS 8

С выходом новой операционной системы iOS 8 разработчикам было разрешено создавать собственные клавиатуры для системы.

Сейчас уже создано довольно большое количество сторонних клавиатур, на любой вкус и цвет. Я бы с радостью использовал клавиатуру SwiftKey, но она до сих пор не поддерживает русский язык (в отличии от версии для Android). Поэтому выбор остановился на не менее функциональной клавиатуре Swype.

Единственный момент, который добавляет ложку дегтя в использование сторонних клавиатур, это то, что для полей ввода, которые принимают пароль, все равно появляется стандартная клавиатура от Apple. Такое ограничение связано с безопасностью наиболее чувствительных пользовательских данных – вводимые пароли могут отправляться на сервера злоумышленников.

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

Проблемы с подключением к гостевому Wi-Fi на Android 5.0

После обновления своего телефона до Android 5.0, появилась проблема с подключением к гостевому Wi-Fi на работе.

Симптомы: выбираю гостевую Wi-Fi точку, ввожу пароль, жму подключиться. Идет подключение, потом сбрасывается и пишется «Сохранено».

Сначала грешил на проблемы на стороне сетевого оборудования, бегал по нашему Хелп-отделу, но максимум, что удалось выяснить, так это то, что подключение действительно не удается (по логам показывается статус Rejected).

Правда, сегодня смог выяснить, что проблема с невозможностью подключения к гостевому Wi-Fi лежит на стороне Android 5.0 (правда, возникает она не у всех пользователей, но я оказался в числе «счастливчиков»).

Баг-репорты на Google Code:

https://code.google.com/p/android/issues/detail?id=78702
https://code.google.com/p/android-developer-preview/issues/detail?id=1548

Лог с моего устройства, когда происходит попытка подключиться к гостевому Wi-Fi:

11-20 11:12:25.971: E/WiFiServiceImpl(748): CONNECT nid=-1 uid=1000
11-20 11:12:25.971: D/WifiService(748): Connect with config* ID: -1 SSID: "WiFi-guest" BSSID: null FQDN: null REALM: null PRIO: 0
11-20 11:12:25.971: D/WifiService(748): KeyMgmt: WPA_PSK Protocols:
11-20 11:12:25.971: D/WifiService(748): AuthAlgorithms:
11-20 11:12:25.971: D/WifiService(748): PairwiseCiphers:
11-20 11:12:25.971: D/WifiService(748): GroupCiphers:
11-20 11:12:25.971: D/WifiService(748): PSK: *
11-20 11:12:25.971: D/WifiService(748): Enterprise config:
11-20 11:12:25.971: D/WifiService(748): IP config:
11-20 11:12:25.971: D/WifiService(748): IP assignment: DHCP
11-20 11:12:25.971: D/WifiService(748): Proxy settings: NONE
11-20 11:12:25.971: D/WifiService(748): uid=1000
11-20 11:12:25.971: D/WifiService(748): triggeredLow: 0 triggeredBad: 0 triggeredNotHigh: 0
11-20 11:12:25.971: D/WifiService(748): ticksLow: 0 ticksBad: 0 ticksNotHigh: 0
11-20 11:12:25.971: D/WifiService(748): triggeredJoin: 0
11-20 11:12:25.971: D/WifiService(748): autoJoinBailedDueToLowRssi: false
11-20 11:12:25.971: D/WifiService(748): autoJoinUseAggressiveJoinAttemptThreshold: 0
11-20 11:12:26.024: I/PseudonymousIdIntentService(1249): getToken invoked
11-20 11:12:26.030: E/WifiConfigStore(748): remove deleted status netId=2 "WiFi-guest"WPA_PSK
11-20 11:12:26.030: E/WifiConfigStore(748): will read network variables netId=2
11-20 11:12:26.042: I/wpa_supplicant(14831): wlan0: Trying to associate with 48:bf:aa:60:7d:7e (SSID='WiFi-guest' freq=5785 MHz)
11-20 11:12:26.098: E/WifiStateMachine(748): CONNECT_NETWORK id=2 config="WiFi-guest" cnid=2 supstate=ScanState my state DisconnectedState uid = 1000
11-20 11:12:26.098: E/WifiConfigStore(748): saveWifiConfigBSSID Setting BSSID for "WiFi-guest"WPA_PSK to any
11-20 11:12:26.099: E/WifiConfigStore(748): saveWifiConfigBSSID Setting BSSID for "WiFi-guest"WPA_PSK to any
11-20 11:12:26.100: E/WifiAutoJoinController(748): updateConfigurationHistory found 0 networks
11-20 11:12:26.102: E/WifiConfigStore(748): setLastSelectedConfiguration 2
11-20 11:12:26.102: E/WifiConfigStore(748): will read network variables netId=2
11-20 11:12:26.145: I/wpa_supplicant(14831): wlan0: Associated with 48:bf:aa:60:7d:7e
11-20 11:12:26.145: I/wpa_supplicant(14831): wlan0: WPA: CCMP is used, but EAPOL-Key descriptor version (3) is not 2
11-20 11:12:27.330: I/wpa_supplicant(14831): wlan0: WPA: CCMP is used, but EAPOL-Key descriptor version (3) is not 2
11-20 11:12:28.330: I/wpa_supplicant(14831): wlan0: WPA: CCMP is used, but EAPOL-Key descriptor version (3) is not 2
11-20 11:12:29.333: I/wpa_supplicant(14831): wlan0: CTRL-EVENT-DISCONNECTED bssid=48:bf:aa:60:7d:7e reason=15

Осталось дождаться выхода исправления 🙁

UPD: исправлено в Android 5.0.1

Обновление до Android 5.0 (Lollipop)

Только что обновил Android на своем Nexus 5 — с 4.4.4 (KitKat) до 5.0 Developer Preview.

К большому сожалению, сегодня релизный Lollipop так и не вышел в качестве OTA-обновления для Nexus 5, и скорее всего, до конечных пользователей новая версия Android’а будет идти несколько недель.

Измучившись ждать, решил накатить последнюю dev-версию (LPX13D). Изначально установка была невозможна из-за следующей ошибки:

FAILED (remote: not supported in locked device)

Пришлось делать:

> fastboot oem unlock

И тут похоже я совершил большую ошибку — все данные на телефоне были удалены, но окончательно в этом я убедился после установки Android 5.0 🙁

> ./flash-all.sh

sending 'bootloader' (2579 KB)...
OKAY [ 0.309s]
writing 'bootloader'...
OKAY [ 0.479s]
finished. total time: 0.787s
rebooting into bootloader...
OKAY [ 0.001s]
finished. total time: 0.001s
target reported max download size of 1073741824 bytes
sending 'radio' (45521 KB)...
OKAY [ 1.811s]
writing 'radio'...
OKAY [ 3.132s]
finished. total time: 4.943s
rebooting into bootloader...
OKAY [ 0.001s]
finished. total time: 0.001s
target reported max download size of 1073741824 bytes
archive does not contain 'boot.sig'
archive does not contain 'recovery.sig'
archive does not contain 'system.sig'
archive does not contain 'vendor.img'
--------------------------------------------
Bootloader Version...: HHZ12d
Baseband Version.....: M8974A-2.0.50.2.21
Serial Number........: 0680177b2115b696
--------------------------------------------
checking product...
OKAY [ 0.100s]
checking version-bootloader...
OKAY [ 0.100s]
checking version-baseband...
OKAY [ 0.100s]
sending 'boot' (8888 KB)...
OKAY [ 0.610s]
writing 'boot'...
OKAY [ 0.756s]
sending 'recovery' (9588 KB)...
OKAY [ 0.674s]
writing 'recovery'...
OKAY [ 0.804s]
erasing 'system'...
OKAY [ 1.497s]
sending 'system' (679407 KB)...
OKAY [ 26.614s]
writing 'system'...
OKAY [ 46.306s]
rebooting...
finished. total time: 78.094s

Потерял СМС, фотографии и прочую важную информацию. Жаль, что в Google до сих пор нет функции ПОЛНОГО бэкапа информации, как это сделано у Apple.

[Решение] To open “Android Studio” you need to install the legacy Java SE 6 runtime

Если в Mac OS вы установили более новую версию Java (скажем, 1.7), чем стоит по умолчанию (1.6), то возможно, что при запуске Android Studio появится следующее сообщение:

To open “Android Studio” you need to install the legacy Java SE 6 runtime.
Click “More Info…” to visit the legacy Java SE 6 download website.

Решение:

В директории /Applications/Android Studio/Contents открываем файл Info.plist, находим строчку <key>JVMVersion</key> и меняем версию <string>1.6*</string> на <string>1.7*</string>.

To open Android Studio you need to install the legacy Java SE 6 runtime

Данный трюк подходит для всех продуктов JetBrains, основанных на IntelliJ IDEA.

[Android] Обновление SDK через командную строку

Android SDK можно обновлять не только через UI-оболочку, но и через командную строку.

android update sdk --no-ui — собственно, вызывает процесс обновления:

Refresh Sources:
Fetching https://dl-ssl.google.com/android/repository/addons_list-2.xml
Validate XML
Parse XML
...
Installing Archives:
Preparing to install archives
Downloading Android SDK Tools, revision 23.0.5
Installing Android SDK Tools, revision 23.0.5
Installed Android SDK Tools, revision 23.0.599%)
Downloading Documentation for Android 'L' Preview SDK, revision 1
...

Есть еще команда:

android list sdk — загружает и показывает весь список доступных пакетов (по индексам):

Packages available for installation or update: 47
1- Documentation for Android 'L' Preview SDK, revision 1
2- SDK Platform Android L Preview, revision 4
3- SDK Platform Android 4.4.2, API 19, revision 4
4- SDK Platform Android 4.3.1, API 18, revision 3
5- SDK Platform Android 4.2.2, API 17, revision 3
...

Благодаря индексам через параметр —filter можно указать, какие пакеты следует установить:

android update sdk --no-ui --filter 2,5