В наушниках по жизни

В наушниках по жизни

Здесь я пишу свои идеи, мысли, описываю события своей жизни и просто делаю личные и рабочие заметки. «А Вы что, собираетесь жить вечно?»

Ctrl + ↑ Позднее

Ошибки и косяки Delphi XE10 Seattle и xCode 7

И так, пока русскоязычная и англоязычная части интернета молчат по поводу работы в новой Delphi XE10 Seattle в связке с xCode 7, а компании представители описывают, какое замечательное вышло обновление, пользователи столкнулись с проблемой, что приложения, сделанные на XE10 Seattle, xCode 7 + SDK9, не запускаются на предыдущих платформах.

Не совсем понятно, почему в упомянутых сегментах интернета нет совершенно никакой информации по данному поводу. Опять впереди планеты все Китай.

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

Коротко о главном. Если вы хотите, как можно скорей перейти на новую Delphi XE10 Seattle с целью писать свежие приложения\обновления для iOS, спешу вас разочаровать. Ваши программы перестанут работать на предыдущих версиях iOS. Статистика испытаний такова, что приложения собранные на XE10 Seattle, xCode 7 + SDK9 будут работать только на устройствах под управлением iOS9.

Вторая проблема, состоит в том, что недавнего времени AppStore при проверке приложений стала проверять их именно на iOS 9, а приложения собранные на XE8.1 такую проверку не проходят, так как зависают на стартовой заставке приложения и как следствие их отклоняют. Вот так то. Прошла уже целая неделя, а интернет по данному поводу ничего сказать нам особо не может.

На днях появилась статья от Сарины Дю Понт, о том, как всё же запустить приложение сделанные в XE8.1 на iOS9.

В результате изысканий Китайских друзей, получаем на данный момент такую картину:

XE8 + iOS 6 = полёт нормальный
XE8 + iOS 7 = полёт нормальный
XE8 + iOS 8 = полёт нормальный
XE8 + iOS 9 = зависание на экране заставки (если не воспользоваться советом Сарины)

XE10 + iOS 6 = приложение вылетает
XE10 + iOS 7 = приложение вылетает
XE10 + iOS 8 = приложение вылетает
XE10 + iOS 9 = полёт нормальный

Таким образом в XE10 Seattle и xCode 7 можно получить на данный момент только приложение, работающее на iOS9.

Ждём Delphi XE10 Seattle Update 1.

P.S. А в на Android в Delphi XE10 Seattle приложение с компонентами для отправки Push не запускается в режиме Release — Application Store. Что тоже, очень и очень печально.

Ошибка ERROR ITMS-90507 при публикации приложения в AppStore

Преамбула

В последнее время всё реже и реже встречаются статьи связанные с Delphi, при том, что язык в принципе развивается и появляются большие возможности в плане создания кроссплатформенных мобильных приложений. При этом в русскоязычной части интернета информации крайне мало, люди делятся знаниями крайне неохотно и большая часть ответов носит поверхностный характер. И это при том, что большая часть программистов училась именно на pascal и регулярно пишет приложения с использованием продуктов Borland (Embarcadero).

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

Соль

Apple регулярно ужесточает требования к описанию программ публикуемых в AppStore. И большое количество проблем, вызывает правильность формирования и описания содержимого файла Info.plist. В файле описывается приложение, версия, билд, наименование модулей и пр. С проблемами сталкиваются не только те, кто программирует на Delphi, но пользователи других сред.

С недавнего времени при публикации приложения стала появляться ошибка ERROR ITMS-90507: Missing Info.plist value. A value for the key ’DTPlatformName’ is required, которая сообщает программисту о том, что необходимый ключ DTPlatformName не найден в файле Info.plist.

Для исправления ошибки, необходимо выполнить следующие действия:

Открываем настройки проекта и добавляем ключ для настроек «iOS 64 bits — Release».

Имя ключа DTPlatformName

Указываем значение ключа «iphoneos». И сохраняем настройки. Теперь приложение должно без проблем быть принято к публикации в AppStore.

МФУ HP LaserJet Pro M125ra и работа по сети

Сегодня впервые за время работы столкнулся с проблемой работы по сети серии новых МФУ, конкретно, модель M125ra.

Проблема заключалась в том, что МФУ с родными драйверами, отказывалось печатать по сети с других компьютеров. При этом с хоста, к которому оно подключено по USB, всё печатается без проблем.

После поисков в сети решения данной проблемы, выяснилось, что виной всему, новая серия драйвером PCLmS. Проблема возникает вариативно, кто-то с этим сталкивается, кого-то сия участь минует. Тем не менее, решить проблему надо было. В результате решается она достаточно просто. Необходимо использовать драйвера для серии принтеров HP 1100, 1560, 1600. С драйверами для принтеров данной серии МФУ печатает отлично, при этом замечательно работает по сети.

Драйвера можно скачать с официального сайта, после чего,просто распаковать полученный файл любым архиватором и в диспетчере устройств подсунуть МФУ распакованные драйвера (лучше распаковать драйвера архиватором, при установке установщик попросит подключить принтер, который по факту отсутствует).

Проверено на Windows 7 и Windows XP, полёт нормальный.

Аудио-плеер на Delphi для Android с применением библиотеки BASS.

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

И так, сегодня я подробно опишу, как создать простой плеер потокового вещания.

Для работы нам понадобятся среда программирования Code Gear RAD Studio XE7, работать я рекомендую именно в данной версии программы, т. к. в используемых библиотеках, имеются некоторые не стыковки в работе с предыдущими версиями.

По причине того, что встроенных средств проигрывания интернет потока не имеется, мы воспользуемся замечательной библиотекой BASS, для написания приложения для Android (для iOS следует использовать другие компоненты).

Для корректной работы библиотеки BASS я рекомендую так же установить компоненты DPF Android Native Components, я в своём примере буду использовать версию 2.8.6.

Начало

Ну я думаю процесс установки Code Gear RAD Studio XE7 описывать не стоит, поэтому сразу переходим к установке дополнительных компонентов и библиотек, потому что именно эта часть вызывает наибольшие проблемы, и именно поэтому данный этап я опишу наиболее подробно.

BASS

Идём на официальный сайт un4seen.com библиотеки, нажимаем в левом меню на ссылку BASS и скачиваем там последнюю версию для Android. На момент написания данной статьи на сайте опубликована версия 2.4 от 13 марта 2015 года. Прямая ссылка на скачивание библиотеки с официального сайта. Ссылка на скачивание с моего сайта.

Сайт библиотеки BASS Ссылки на скачивание библиотек

Примечание: я рекомендую использовать именно данную версию библиотеки, потому что предыдущие версии не работают с XE7, и при инициализации библиотеки появляется ошибка.

BASSFunctions

Для корректной работы с библиотекой, нам потребуется ещё один дополнительный файл, это BASSFunctions.pas. Данный файл опубликовал на форуме пользователь с ником 3delite.Ссылка на оригинальный файл.

DPF Android Native Components

Для корректной работы библиотек BASS, часто требуется установка компонентов DPF Android Native Components, т. к. в их составе имеется компонент для работы с аудио, без которого компилятор будет просто выдавать ошибку.

Идём на официальный сайт и скачиваем последнюю версию компонентов. Или вы можете скачать версию 2.8.6 с моего сайта.

Поехали

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

Начнём с DPF Android Native Components. Я рекомендую (во избежании дополнительных проблем с подключением) распаковать файлы в папку DPF.Android.Native.Components.v2.8.6 в корень диска C.

Распаковываем файлы

В каталоге с файлами, имеется файл Install.txt. У кого хорошо с английским, могут сделать всё по инструкции описанной в файле, для тех кто в школе учил немецкий, я опишу процесс установки компонентов подробно.

Запускаем Codegear RAD Studio. Далее в верхнем меню открываем Tools->Options->Delphi Options->Library.

В выпадающем списке справа выбираем платформу «32-bit Windows» и добавляем в раздел «Library path» путь к нашим компонентам.

Теперь то же самое проделываем для платформы «Android».

Теперь нам потребуется скомпилировать и установить компоненты. Для этого нажимаем File -> Open Project. Открываем проект из папки компонентов, соответствующий вашей среде программирования.

Открываем проект DPFAndroidPackagesXE7.dproj

Далее нам надо скомпилировать проект и установить полученные компоненты.

Нажимаем правой кнопкой на проекте в инспекторе проекта и выбираем пункт «Build», начнётся построение проекта.

Выполняем Build

После завершение построение, опять нажимаем правой кнопкой на проекте в инспекторе и выбираем пункт «Install».

Компоненты готовы к работе. Приступим к созданию проекта.

Я набросал уже небольшой проект с парой кнопок для запуска и остановки проигрывателя и картинкой для привлечения внимания :)

Пробный проект.

Для работы в библиотекой BASS, нам потребуется в каталог с проектом добавить файл BASSFunctions.pas и указать его в разделе uses.

Добавляем файл BASSFunctions.pas. Добавляем в раздел uses.

Теперь собственно сама библиотека libbass.so. Нам необходимо добавить данную библиотек в наш проект, иначе ничего не заработает.

Открываем архив bass24-android.zip и видим... Множество папок, нас интересует на данный момент только одна libs. Распаковываем её в каталог нашего проекта.

В каталоге libs, есть три подкаталога, нас интересуют 2 из них:

  • armeabi-v7a
  • armeabi

В них находятся два разных файла libbass.so.

После того, как мы скопировали данный каталог в каталог проекта, снова возвращаемся к среде программирования и открываем раздел Deployment, для добавления наших библиотек в программу.

Deployment Добавляем библиотеки

После того, как мы добавили библиотеки в наш проект, надо поменять параметр «Remote Path» для каждой библиотеки соответственно на «library\lib\armeabi» и на «library\lib\armeabi-v7a». Данную процедуру надо проделать для обеих конфигураций «Debug» и «Release».

Библиотеки Конфигурации

Ну что, вот всё и готово к началу написания кода, а код на самом деле достаточно простой.

Объявляем глобальную переменную.

var
  uStream:HSTREAM;

В момент создания формы инициализируем библиотеку.

procedure TmainForm.FormCreate(Sender: TObject);
begin
  // Загружаем и инициализируем библиотеку
  Loadbass;
  BASS_Init(-1,44100,0,Handle,nil);
end;

На кнопку «Играть» вещаем обработчик:

procedure TmainForm.mainToolbarBarItems1Click(Sender: TObject);
var
  otStream : TStringStream;
  Result : integer;
begin
  try

    // Включаем индикатор загрузки контента
    ind1.Enabled := True;
    ind1.Visible := True;

    // Код проигрывателя
    Result := 0;

    // Закрываем старый поток
    BASS_StreamFree(uStream);

    // Создаём новый поток
    uStream :=
      BASS_StreamCreateURL(PChar('http://motochelyabinsk.ru:8000/play'),0,BASS_STREAM_STATUS or BASS_UNICODE,nil,nil);

    // Включаем проигрывание
    BASS_ChannelPlay(uStream, True);

    // Получаем и выводим название текущего трека из скрипта на сайте
    // Создаём поток UTF8
    otStream := TStringStream.Create('', CP_UTF8);
    // Делаем запрос к скрипту сайта
    IdHTTP1.Get('motochelyabinsk.ru/current-track.php', otStream);
    IdHTTP1.Disconnect;
    // Записываем название трека в Label
    Label1.Text := otStream.DataString;
    // Очищаем переменную потока
    otStream.Free;

    // Запустить таймер отслеживания изменений названия трека
    Timer1.Enabled := True;

    // Включаем и отключаем кнопки
    btn1.Enabled := False;
    btn2.Enabled := True;

  except on E: Exception do
    begin
      ShowMessage('Ошибка доступа к сети!');
    end;
  end;

end;

Ну вот в общем самый простой и работающий пример создания проигрывателя интернет радиостанций.
P.S. Чуть позже, выложу готовый пример данного приложения.

BSOD 0x00000051 Registry Error. Windows Server 2003

На днях столкнулся с проблемой загрузки сервера Windows Server 2003 после того, как развалился RAID 1 в результате поломки дисков. После долгих поисков в интернете и перепробовав кучу методов, случайно наткнулся на один совет по исправлению данной ошибки.

Симптомы
После загрузки сервера при попытке входа в систему появляется синий «экран смерти» с кодом 0x00000051 с ошибкой Registry Error.

Решение проблемы

  1. Запускаемся в безопасном режиме.
  2. Запускаем редактор реестра (regedit.exe)
  3. Открываем ветку HKEY_LOCAL_MACHINE\SYSTEM\Select
  4. Заменяем ключ LastKnownGood на 3
  5. Заменяем ключ Failed 2.
  6. Перезагружаемся.

Должно получиться, как представлено на рисунке.

Редактирование реестра

После перезагрузки и входа в систему появится ошибка, что ветка реестра была повреждена и восстановлена. Закрываем окно ошибки и работаем. Так такой вот несложный метод восстановления работоспособности сервера.

Ctrl + ↓ Ранее