Які найкращі налаштування JVM ви знайшли для запуску Eclipse?
Які найкращі налаштування JVM ви знайшли для запуску Eclipse?
Відповіді:
Це знову рік року: "eclipse.ini take 3" налаштування завдають удару!
alt text http://www.eclipse.org/home/promotions/friends-helios/helios.png
Після налаштувань для Eclipse Ganymede 3.4.x та Eclipse Galileo 3.5.x , ось глибокий огляд "оптимізованого" файлу налаштувань eclipse.ini для Eclipse Helios 3.6.x:
( під «оптимізованим» я маю на увазі можливість запускати повноцінний Eclipse на нашій хитрій робочій станції на роботі, старий P4 від 2002 року з 2Go оперативної пам’яті та XPSp3. Але я також перевірив ці самі налаштування на Windows7 )
ПОПЕРЕДЖЕННЯ : для платформи, яка не має вікон, використовуйте фірмовий варіант Sun -XX:MaxPermSize
замість власного параметра Eclipse --launcher.XXMaxPermSize
.
Тобто, якщо ви не використовуєте останню jdk6u21 build 7 . Дивіться розділ Oracle нижче.
-data
../../workspace
-showlocation
-showsplash
org.eclipse.platform
--launcher.defaultAction
openFile
-vm
C:/Prog/Java/jdk1.6.0_21/jre/bin/server/jvm.dll
-vmargs
-Dosgi.requiredJavaVersion=1.6
-Declipse.p2.unsignedPolicy=allow
-Xms128m
-Xmx384m
-Xss4m
-XX:PermSize=128m
-XX:MaxPermSize=384m
-XX:CompileThreshold=5
-XX:MaxGCPauseMillis=10
-XX:MaxHeapFreeRatio=70
-XX:+CMSIncrementalPacing
-XX:+UnlockExperimentalVMOptions
-XX:+UseG1GC
-XX:+UseFastAccessorMethods
-Dcom.sun.management.jmxremote
-Dorg.eclipse.equinox.p2.reconciler.dropins.directory=C:/Prog/Java/eclipse_addons
Примітка:
адаптуйте p2.reconciler.dropins.directory
до зовнішнього каталогу на ваш вибір.
Дивіться цю відповідь ТАК . Ідея полягає в тому, щоб мати можливість викидати нові плагіни в каталог незалежно від будь-якої установки Eclipse.
У наступних розділах детально описано, що є у цьому eclipse.ini
файлі.
Ендрю Ніфер не попередив мене про цю ситуацію і написав повідомлення в блозі про нестандартний аргумент vm ( -XX:MaxPermSize
) і може спричинити не запуск vms від інших постачальників.
Але версія затемнення цього параметра ( --launcher.XXMaxPermSize
) не працює з новим JDK (6u21, якщо ви не використовуєте 6u21 build 7, див. Нижче).
The остаточнийрішення знаходиться на Eclipse Wiki , а для Helios в Windows з 6u21 попередньою збіркою 7 :
(eclipse_home) /plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.0.v20100503
Це воно. Тут немає налаштувань для налаштування (знову ж таки, лише для Helios в Windows із попередньою збіркою 6u21 7 ).
Для платформи операційної системи, то вам необхідно повернутися до власної опції Sun -XX:MaxPermSize
.
Проблема заснована на одній регресії: ідентифікація JVM не вдається через ребрендинг Oracle у java.exe та спровокував помилку 319514 на Eclipse.
Ендрю подбав про помилку 320005 - [запускник] --launcher.XXMaxPermSize: isSunVM
повинен повернути true для Oracle , але це буде лише для Helios 3.6.1.
Френсіс Уптон , ще один уповноважений із затемнення, розмірковує над усією ситуацією .
Оновлення u21b7, 27 липня :
Oracle регресував зміни для наступного випуску Java 6 і не буде реалізовувати її знову до JDK 7 .
Якщо ви використовуєте jdk6u21 build 7 , ви можете повернутися до --launcher.XXMaxPermSize
(eclipse option) замість -XX:MaxPermSize
(нестандартний варіант). Автоматичне виявлення відбувається в C пусковий прокладки буде ще шукати « » рядок, але з 6u21b7, він тепер буде працювати - знову.eclipse.exe
Sun Microsystems
Поки що я досі зберігаю -XX:MaxPermSize
версію (тому що я не маю уявлення, коли всі запускають затемнення правильного JDK).
На відміну від попередніх налаштувань, точний шлях для цих модулів більше не встановлений, що зручно, оскільки він може змінюватися між різними випусками Eclipse 3.6.x:
org.eclipse.equinox.launcher
пакет із найвищою версією.plugins
каталозі відповідний org.eclipse.equinox.launcher.[platform]
фрагмент із найвищою версією та використовує спільну бібліотеку, названу eclipse_*
всередині.Тепер JDK6 явно необхідний для запуску Eclipse:
-Dosgi.requiredJavaVersion = 1.6
Це запитання ТА повідомляє про позитивну частоту розвитку на Mac OS.
Наведені нижче варіанти є частиною експериментальних варіантів СВ Сонця.
-XX:+UnlockExperimentalVMOptions
-XX:+UseG1GC
-XX:+UseFastAccessorMethods
Про них повідомлялося в цьому дописі про блог, щоб потенційно прискорити затемнення.
Перегляньте всі параметри JVM тут, а також на офіційній сторінці параметрів Java Hotspot .
Примітка: докладний список звітів про параметри, які UseFastAccessorMethods
можуть бути активними за замовчуванням.
Дивіться також "Оновлення JVM" :
Нагадування, G1 - це новий сміттєзбірник для підготовки до JDK 7, але вже використовується у версії 6 випуску з u17.
Дивіться повідомлення в блозі від Ендрю Ніфера, який повідомляє про цей новий варіант:
--launcher.defaultAction
openFile
Це повідомляє запуску, що якщо він викликається командним рядком, який містить лише аргументи, які не починаються з "
-
", то до цих аргументів слід ставитися так, ніби вони дотримуються "--launcher.openFile
".
eclipse myFile.txt
Це такий тип командного рядка, який пускач отримає у Windows, коли ви двічі клацніть файл, пов’язаний із затемненням, або ви вибираєте файли та вибираєте "
Open With
" або "Send To
" затемнення.Відносні шляхи будуть вирішені спочатку проти поточного робочого каталогу та другого проти каталогу програм eclipse.
Див. Помилку 301033 для довідки. Спочатку помилка 4922 (жовтень 2001, виправлено 9 років пізніше).
Якщо ви втомилися від цього діалогового вікна під час встановлення багатьох плагінів:
, додайте у свій eclipse.ini
:
-Declipse.p2.unsignedPolicy=allow
Дивіться цю публікацію в блозі від Chris Aniszczy та повідомлення про помилку 235526 .
Я хочу сказати, що дослідження безпеки підтримують той факт, що менше підказок краще.
Люди ігнорують речі, які спливають у потоці чогось, що вони хочуть зробити.Для 3.6 ми не повинні з'являти попередження в середині потоку - скільки б ми не спрощували, люди просто їх ігнорують.
Натомість нам слід зібрати всі проблеми, не встановлювати ці пакети з проблемами, а замість цього повернути користувача до точки робочого процесу, де він може налаштувати - додавати довіру, налаштовувати політику безпеки більш вільно тощо. Це називається "безпечним інсценування ' .
---------- http://www.eclipse.org/home/categories/images/wiki.gif alt текст http://www.eclipse.org/home/categories/images/wiki.gif alt текст http://www.eclipse.org/home/categories/images/wiki.gif
Ці варіанти безпосередньо не eclipse.ini
описані вище, але можуть стати в нагоді у разі потреби.
Коли затемнення починається, він прочитає файл зберігання ключів (де зберігаються паролі), файл, розташований у user.home
.
Якщо з якоїсь причини, user.home
яка не вирішила себе належним чином до повноцінного шляху, Eclipse не запуститься.
Спочатку піднімався в цьому запитанні ТА , якщо ви відчуваєте це, вам потрібно буде визначити файл зберігання ключів явним шляхом (більше не користувач.дома вирішувати на початку)
Додайте свої eclipse.ini
:
-eclipse.keyring
C:\eclipse\keyring.txt
Це було відстежено помилкою 300577 , це було вирішено в цьому іншому питанні .
Зачекайте, у програмі Eclipse є декілька файлів налаштувань.
якщо ви додасте до eclipse.ini
цього параметра:
-debug
, ви включаєте режим налагодження, і Eclipse буде шукати інший файл налаштування: .options
файл, де ви можете вказати деякі параметри OSGI.
І це чудово, коли ви додаєте нові плагіни через папку "Droins".
Додайте у свій .option файл такі параметри, як описано в цій публікації щоденника " Діагностика крапель " :
org.eclipse.equinox.p2.core/debug=true
org.eclipse.equinox.p2.core/reconciler=true
P2 інформує вас про те, які пакети були знайдені в
dropins/
папці, який запит був згенерований і який план встановлення. Можливо, це не детальне пояснення того, що насправді сталося, а що пішло не так, але це повинно дати точну інформацію про те, з чого почати:
- чи був ваш план в плані?
- Чи була це проблема встановлення (помилка P2)
- чи, можливо, просто не оптимально включати вашу функцію?
Це походить від помилки 264924 - [примирення] Немає діагнозу проблем із краплями , що врешті вирішує таке питання, як:
Unzip eclipse-SDK-3.5M5-win32.zip to ..../eclipse
Unzip mdt-ocl-SDK-1.3.0M5.zip to ..../eclipse/dropins/mdt-ocl-SDK-1.3.0M5
Це проблемна конфігурація, оскільки OCL залежить від ЕРС, якої немає.
3.5M5 не забезпечує діагностики цієї проблеми.Почніть затемнення.
Очевидних проблем немає. Нічого в журналі помилок.
Help / About / Plugin
деталі показуєorg.eclipse.ocl.doc
, але ніorg.eclipse.ocl
.Help / About / Configuration
Деталі не мають (діагностичної) згадки проorg.eclipse.ocl
.Help / Installation / Information Installed Software
не має жодної згадки проorg.eclipse.ocl
.Де приємні маркери помилок?
Дивіться цю публікацію в блозі :
- У Galileo (він же Eclipse 3.5) JDT почав розв'язувати маніфестний класний шлях у бібліотеках, доданих до шляху збирання проекту. Це спрацьовувало, чи додано бібліотеку до шляху збирання проекту безпосередньо або через контейнер classpath, наприклад, об'єкт бібліотеки користувачів, що надається JDT, або один, реалізований третьою стороною.
- У Helios цю поведінку було змінено, щоб виключити контейнери classpath з явної роздільної здатності classpath.
Це означає, що деякі ваші проекти можуть більше не збиратися в Helios.
Якщо ви хочете повернутися до поведінки Галілея, додайте:
-DresolveReferencedLibrariesForContainers=true
Див. Помилку 305037 , помилку 313965 та помилку 313890 для довідок.
У цьому запитанні ТА згадується потенційне виправлення, коли немає доступу до сайтів оновлення плагінів:
-Djava.net.preferIPv4Stack=true
Тут згадується про всяк випадок, якщо це може допомогти у вашій конфігурації.
Ця стаття повідомляє:
Для запису, найшвидші варіанти, які я знайшов поки що для мого стендового тесту з версією 1.7 x64 JVM n Windows, є:
-Xincgc
-XX:-DontCompileHugeMethods
-XX:MaxInlineSize=1024
-XX:FreqInlineSize=1024
Але я все ще працюю над цим ...
-XX:CompileThreshold=5
причини жахливих вповільнень для мене. Позбувшись цієї опції, скоротити час запуску Eclipse до 17 секунд від> 1 хв !! Не кажучи вже про те, як жахливо сповільнився ІДЕ загалом. Дивіться це посилання
-XX:CompileThreshold=5
- це дуже низьке значення (за замовчуванням = 10000). Це значення представляє кількість викликів / гілок методів перед його компілюванням. Занадто низьке значення призведе до того, що ваш CodeCache заповниться передчасно, і консоль може повідомити: CodeCache is full. Compiler has been disabled
Після того, як компілятор відключений, ви помітите повільність у програмі. Виправити це можна двома способами: 1. Використовуйте -XX:CompileThreshold=1000
(чітко налаштуйте це число) або 2. Спробуйте збільшити розмір кешу коду, використовуючи -XX:ReservedCodeCacheSize=64m
(подвійне від 32 м за замовчуванням)
В даний час (листопад 2009 р.) Я тестую з оновленням jdk6 17 наступний набір параметрів конфігурації (з Galileo - eclipse 3.5.x, див. Нижче для 3.4 або вище для Helios 3.6.x ):
(звичайно, адаптувати відносні шляхи представити в цьому eclipse.ini правильні шляхи для вашої установки)
Примітка: для eclipse3.5 замініть startup
та launcher.library
рядки:
-startup
plugins/org.eclipse.equinox.launcher_1.0.200.v20090520.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.0.200.v20090519
-data
../../workspace
-showlocation
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
384m
-startup
plugins/org.eclipse.equinox.launcher_1.0.201.R35x_v20090715.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.0.200.v20090519
-vm
../../../../program files/Java/jdk1.6.0_17/jre/bin/client/jvm.dll
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms128m
-Xmx384m
-Xss4m
-XX:PermSize=128m
-XX:MaxPermSize=384m
-XX:CompileThreshold=5
-XX:MaxGCPauseMillis=10
-XX:MaxHeapFreeRatio=70
-XX:+UseConcMarkSweepGC
-XX:+CMSIncrementalMode
-XX:+CMSIncrementalPacing
-Dcom.sun.management.jmxremote
-Dorg.eclipse.equinox.p2.reconciler.dropins.directory=C:/jv/eclipse/mydropins
Дивіться також мою оригінальну відповідь вище для отримання додаткової інформації.
org.eclipse.equinox.p2.reconciler.dropins.directory
опція.Була помилка з ігнорованими точками перерви, фактично пов’язаними з JDK.
Використовуйте JDK6u16 або новішу версію для запуску затемнення (Ви можете визначити стільки JDK, які ви хочете скласти під час затемнення: це не тому, що ви запускаєте затемнення з JDK6, вам доведеться компілювати з тим самим JDK).
Зверніть увагу на використання:
--launcher.XXMaxPermSize
384m
-vmargs
-XX:MaxPermSize=128m
Як зафіксовано у Вікі Eclipse ,
Eclipse 3.3 підтримує новий аргумент в пускову:
--launcher.XXMaxPermSize
.
Якщо використовувана VM - це VM Sun, а-XX:MaxPermSize=
аргумент VM вже не існує , то запускається програма автоматично додасть-XX:MaxPermSize=256m
до списку використовуваних аргументів VM.
3.3 пускова установка здатна ідентифікувати лише віртуальну машину Sun у Windows.
Як детально в цьому записі :
Не всі vms приймають
-XX:MaxPermSize
аргумент, саме тому він передається таким чином. Можуть (або можуть не існувати) проблеми з ідентифікацією Sun vms.
Примітка: Eclipse 3.3.1 має помилку, коли пусковий механізм не може виявити Sun VM, а тому не використовує правильний розмір PermGen. Здається, це також була відома помилка на Mac OS X для 3.3.0 .
Якщо ви використовуєте будь-яку з цих комбінацій платформи, додайте-XX
прапор доeclipse.ini
описаного вище.Примітки:
384m
рядок " " перекладається на "=384m
" частину аргументу VM, якщо VM чутливий до регістру на "m
", то так це аргумент.--launcher.
префікс " ", це вказує, що аргумент споживається самим пусковим пристроєм і додається до специфічних аргументів для запуску, щоб уникнути зіткнень імен з аргументами програми. (Інші приклади є--launcher.library
,--launcher.suppressErrors
)
-vmargs -XX:MaxPermSize=384m
Частина аргумент передається безпосередньо в VM, минаючи пусковий цілик і ніякої перевірки на постачальника VM не використовується.
Більш пізні параметри див. У розділі Налаштування Eclipse Galileo 3.5 вище .
Найкращий параметр JVM завжди , на мою думку, включає найновіший JDK, який ви можете знайти (так, на даний момент jdk1.6.0_b07 до b16, крім b14 та b15 )
Навіть з тими досить низькими налаштуваннями пам’яті, я можу запускати великі проекти Java (разом із веб-сервером) на своєму старому (2002 р.) Робочому столі з 2Go ОЗУ.
-showlocation
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256M
-framework
plugins\org.eclipse.osgi_3.4.2.R34x_v20080826-1230.jar
-vm
jdk1.6.0_10\jre\bin\client\jvm.dll
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms128m
-Xmx384m
-Xss2m
-XX:PermSize=128m
-XX:MaxPermSize=128m
-XX:MaxGCPauseMillis=10
-XX:MaxHeapFreeRatio=70
-XX:+UseConcMarkSweepGC
-XX:+CMSIncrementalMode
-XX:+CMSIncrementalPacing
-XX:CompileThreshold=5
-Dcom.sun.management.jmxremote
Див SO відповідь GKelly в і запис в блозі Петра Gabryanczyk в більш детальну інформацію про нові можливості.
Ви також можете розглянути можливість запуску:
C:\[jdk1.6.0_0x path]\bin\jconsole.exe
Як було сказано в попередньому запитанні про споживання пам'яті .
Налаштування для версії Java / Sun 1.6 Oracle "1.6.0_31" та Eclipse 3.7, що працює на x86-64 Linux:
-nosplash
-vmargs
-Xincgc
-Xss500k
-Dosgi.requiredJavaVersion=1.6
-Xms64m
-Xmx200m
-XX:NewSize=8m
-XX:PermSize=80m
-XX:MaxPermSize=150m
-XX:MaxPermHeapExpansion=10m
-XX:+UseConcMarkSweepGC
-XX:CMSInitiatingOccupancyFraction=70
-XX:+UseCMSInitiatingOccupancyOnly
-XX:+UseParNewGC
-XX:+CMSConcurrentMTEnabled
-XX:ConcGCThreads=2
-XX:ParallelGCThreads=2
-XX:+CMSIncrementalPacing
-XX:CMSIncrementalDutyCycleMin=0
-XX:CMSIncrementalDutyCycle=5
-XX:GCTimeRatio=49
-XX:MaxGCPauseMillis=20
-XX:GCPauseIntervalMillis=1000
-XX:+UseCMSCompactAtFullCollection
-XX:+CMSClassUnloadingEnabled
-XX:+DoEscapeAnalysis
-XX:+UseCompressedOops
-XX:+AggressiveOpts
-XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses
Зауважте, що для цього використовується лише 200 МБ для купи і 150 Мб для негромади. Якщо ви використовуєте величезні плагіни, ви можете збільшити межі "-Xmx200m" та "-XX: MaxPermSize = 150м".
Основною метою оптимізації для цих прапорів було мінімізація затримки у всіх випадках, а як вторинна оптимізаційна ціль мінімізація використання пам'яті.
-показ
Щоб було легше двічі запускати затемнення і знати, з яким робочим простором ви маєте справу
Eclipse 3.6 додає параметр налаштувань, щоб вказати, що показувати, Workspace name (shown in window title)
що працює набагато краще, ніж -showlocation
з трьох причин:
Якщо ви збираєтесь з оновленням jdk6 14, я б запропонував використовувати сміттєзбірник G1, який, здається, допомагає зробити його ефективнішим.
Для цього видаліть ці налаштування:
-XX: + UseConcMarkSweepGC
-XX: + CMSIncrementalMode
-XX: + CMSIncrementalPacing
і замініть їх такими:
-XX: + UnlockExperimentalVMOptions
-XX: + UseG1GC
Якщо ви використовуєте Linux + Sun JDK / JRE 32bit , змініть "-vm" на:
-vm
[your_jdk_folder]/jre/lib/i386/client/libjvm.so
Якщо ви використовуєте Linux + Sun JDK / JRE 64bit , змініть "-vm" на:
-vm
[your_jdk_folder]/jre/lib/amd64/server/libjvm.so
Це добре працює для мене на Ubuntu 8.10 та 9.04
Ви також можете спробувати працювати з JRockit . Це JVM, оптимізований для серверів, але багато довгих клієнтських додатків, як IDE, дуже добре працюють на JRockit. Затемнення не є винятком. У JRockit немає простір-проміжок, тому вам не потрібно його налаштовувати.
Можна встановити ціль часу паузи (мс), щоб уникнути довгих пауз gc, що зупиняють інтерфейс користувача.
-showsplash
org.eclipse.platform
-vm
C:\jrmc-3.1.2-1.6.0\bin\javaw.exe
-vmargs
-XgcPrio:deterministic
-XpauseTarget:20
Зазвичай я не переймаюся налаштуваннями -Xmx і -Xms і дозволяю JRockit вирощувати купу, як вважає за потрібне. Якщо ви запускаєте програму Eclipse за допомогою JRockit, ви також можете відстежувати, профілювати та знаходити витоки пам’яті у вашій програмі, використовуючи інструменти інструментів контролю місії JRockit. Ви завантажуєте плагіни з цього веб-сайту оновлення . Зауважте, працює лише для Eclipse 3.3 та Eclipse 3.4
Ось моя власна установка для мого Eclipse, який працює на i7 2630M 16 Гб оперативної пам’яті, цей параметр використовується вже тиждень, без жодного збою, і Eclipse 3.7 працює безперебійно.
-startup
plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.100.v20110502
-product
org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms1024m
-Xmx4096m
-XX:MaxPermSize=256m
Розрахунки: Для Win 7 x64
-startup
../../../plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar
--launcher.library
../../../plugins/org.eclipse.equinox.launcher.cocoa.macosx_1.1.100.v20110502
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-vmargs
-Xms128m
-Xmx512m
-XX:MaxPermSize=256m
-Xdock:icon=../Resources/Eclipse.icns
-XstartOnFirstThread
-Dorg.eclipse.swt.internal.carbon.smallFonts
-Dcom.sun.management.jmxremote
-Declipse.p2.unsignedPolicy=allow
І ці налаштування спрацювали як шарм для мене. У мене працює ОС X10.6, Eclipse 3.7 Indigo, JDK1.6.0_24
Мої власні налаштування (Java 1.7, змінити для 1.6):
-vm
C:/Program Files (x86)/Java/jdk1.7.0/bin
-startup
plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.100.v20100628
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-vmargs
-server
-Dosgi.requiredJavaVersion=1.7
-Xmn100m
-Xss1m
-XgcPrio:deterministic
-XpauseTarget:20
-XX:PermSize=400M
-XX:MaxPermSize=500M
-XX:CompileThreshold=10
-XX:MaxGCPauseMillis=10
-XX:MaxHeapFreeRatio=70
-XX:+UnlockExperimentalVMOptions
-XX:+DoEscapeAnalysis
-XX:+UseG1GC
-XX:+UseFastAccessorMethods
-XX:+AggressiveOpts
-Xms512m
-Xmx512m
Якщо ви схожі на мене і у вас виникли проблеми з поточним випуском Oracle 1.6, тоді ви можете оновити JDK або встановити
-XX: MaxPermSize. Більше інформації можна отримати тут: http://java.dzone.com/articles/latest-java-update-fixes
XX: + UseParallelGC - це найдивовижніший варіант коли-небудь !!!
-vm
C: \ програмні файли \ Java \ jdk1.6.0_07 \ jre \ bin \ client \ jvm.dll
Щоб вказати версію Java, яку ви використовуєте, і використовуйте dll замість запуску процесу javaw
eclipse.ini
налаштування для Helios 3.6 тут (нижче, в новому відповіді): stackoverflow.com/questions/142357 / ...