Rails и iOS Enterprise Distribution

Бих искал да внедря безжично разпространение на iOS Enterprise, интегрирано с Rails приложение.

Тъй като приложенията за разпространение на Enterprise могат да бъдат инсталирани на всяко iOS устройство, Apple (разбираемо) изисква потребителите, които изтеглят приложението, първо да влязат, за да се удостоверят. След това те кликват върху връзка към файл на манифест (manifest,plist), който се използва за иницииране на изтеглянето от директорията, посочена в манифеста (която трябва да е ясно достъпна, но защитена чрез същата привилегия за влизане).

Използвам HTTP BASIC удостоверяване в моето приложение Rails и мога да създам статични страници, ако е необходимо.

Въпросът ми е как мога да посоча връзка към файла на манифеста, който минава през удостоверяването на Rails, но не е достъпен чрез динамичен маршрут (дори статичните страници са достъпни чрез динамичен маршрут). Вярвам, че ако мога да намеря начин да се свържа с файла на манифеста, който е защитен с парола, тогава това решение ще работи и за изображението за инсталиране на приложението.

Не мога да ги публикувам публично, тъй като се нуждаят от защита с парола. Не мога да ги поставя в йерархиите на контролера / модела / изгледа, тъй като всички те зависят от динамични пътища и т.н.

Също така предпочитам да избягвам необходимостта да актуализирам файл routes.rb всеки път, когато актуализирам приложението.

Съвети относно това ще бъдат оценени, благодаря.


person Snips    schedule 14.12.2011    source източник
comment
Ами някак сте в затруднено положение. Ако искате уникален фиксиран път към всяка версия на изображението, тогава няма друг начин освен просто да променяте файла с маршрути всеки път. Можете също така да направите YAML файл, накарайте routes.rb да го зареди правилно. Така че просто трябва да промените YAML файла и да рестартирате приложението, вместо да актуализирате кода.   -  person agmcleod    schedule 14.12.2011
comment
Благодаря. Дори и да отида с фиксиран път, как мога да поставя това зад удостоверяването?   -  person Snips    schedule 14.12.2011


Отговори (1)


Просто препрочитам въпроса ви и мисля, че го разбирам правилно. Когато качвате нов файл на манифест и нов файл на приложение, искате връзката да бъде актуализирана, сочеща към новия файл, като в същото време запазвате старите версии онлайн. Основното нещо тук е да запазите някакъв вид идентификационен номер за версия както в манифеста, така и в имената на клиентските файлове. След това използвайте това в URL адреса.

Настройте това във вашия файл с маршрути:

match '/getclient/:id.plist' => 'clients#show', :as => 'show_client'
match '/getclient/latest' => 'clients#latest', :as => 'lastest_client'

Кодът в следния контролер зависи от файловете на plist на манифеста и клиентите на приложението, които са в папка app/clients.

Сега във вашия контролер имайте нещо като:

class ClientsController < ApplicationController
  before_filter :basic_authentication

  def show
    render :xml => IO.read(File.join(Rails.root, "app/clients/manifest_#{params[:id]}.plist"))
  end

  def latest
    file = plist_files.last
    latest_id = "#{file.split('manifest_')[1].split('.plist')[0]}"
    redirect_to show_client_url(lastest_id)
  end

  private

  def basic_authentication
    authenticate_or_request_with_http_basic do |username, password|
      username == "username" && password == "password"
    end
  end

  def plist_files
    # assuming file format is like: manifest_versionid.plist
    Dir.glob(File.join(Rails.root, "app/clients/*.plist"))
  end
end

Тук определено правя някои предположения как работи това. Не мога да кажа, че съм свързвал plist файл преди, за да изтегля приложение. Моля, коментирайте, ако имате въпроси.

person agmcleod    schedule 14.12.2011