Latest 0.0.6
Homepage https://github.com/concretesolutions/yosef-ios
License MIT
Platforms ios 9.0, requires ARC
Dependencies Kingfisher, lottie-ios
Frameworks UIKit
Authors , , , ,

CI Status
Version
License
Platform

A lib tem como função criar views a partir de jsons, de modo que seja possível (1) alterar a interface do app no servidor e (2) acrescentar novas funcionalidades sem a necessidade de atualizar o app.

Yosef

DynamicView

A lib tem uma class central DynamicView, cujo método createView(), que recebe um DynamicComponent e um DynamicActionDelegate, é um ponto central para qualquer user externo.

O DynamicComponent é a representação do JSON com as informações necessárias para a criação da View (o type, as properties e as children).

DynamicComponent

O DynamicComponent é o objeto que encapsula as informações sobre as views que serão criadas pela lib. Ele contém três principais informações:

  • type: uma String informando se é um "botão", "texto", etc.
  • properties: um Array<DynamicProperty> que contém informações como "textColor", "textSize", "action", etc.
  • children: um Array<DynamicComponent>? que contém componentes que devem ser exibidos, dentro do componente a ser criado.

O DynamicComponent possui um factory method parse(dictionary: [String: Any]) que deve ser usado para criar uma instância de um dicionário do json retornado pelo servidor.

Exemplo

Diagamos que temos um View Controller cuja View deve ser populada com as informações retornadas pelo servidor, representadas como um dicionário [String: Any]. O código ficaria assim:

func updateUI() {
    // 1
    let comp = ITDynamicComponent.parse(dictionary: info)
    // 2
    let view = ITDynamicView.createView(dynamicsComponent: comp, actionDelegate: self)
    // 3
    self.view.addSubview(view)
    view.translatesAutoresizingMaskIntoConstraints = false
    view.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 20).isActive = true
    view.leadingAnchor.constraint(equalTo: self.view.leadingAnchor, constant: 20).isActive = true
    view.trailingAnchor.constraint(equalTo: self.view.trailingAnchor, constant: -20).isActive = true
}

Uma explicação do código:

  1. É criado um DynamicComponent usando o parse factory method.
  2. A partir do componente criado, é criado a view usando o método createView.
  3. A view criada é adicionada como subview e é utilizado autolayout para fixá-la nas âncoras do topo, esquerda e direita da View Controller.

Instalação

O Yosef está disponível via CocoaPods.
Para instalar é necessário adicionar as linhas abaixo no seu Podfile e rodar o pod install:

pod "Yosef"

Requisitos para desenvolvimento

Para ter o ambiente de desenvolvimento adequado utilize o Bundler para instalar o Gemfile do projeto

O projeto pode ser acessado na pasta Example, abrindo o workspace Yosef.workspace.

Dependências

Testes

Testes unitários

Para os testes unitários, usamos XCTestCase. No caso de testes das views retornadas pela lib, usamos também a iOSSnapshotTestCase.

Cobertura

A cobertura de testes pode ser obtida rodando o script test.sh:

$ sh test.sh

Os resultados podem ser acessados abrindo a página index.html na pasta coverage_report

Equipe iOS

Guilherme Bayma, [email protected]
Emannuel Carvalho, [email protected]

License

Yosef is available under the MIT license. See the LICENSE file for more info.

Latest podspec

{
    "name": "Yosef",
    "version": "0.0.6",
    "summary": "Create views from JSON",
    "description": "Yosef reads JSON files to generate views, so that they can be created dynamically. Change the JSON to create different views.",
    "homepage": "https://github.com/concretesolutions/yosef-ios",
    "license": {
        "type": "MIT",
        "file": "LICENSE"
    },
    "authors": {
        "Guilherme Bayma": "[email protected]",
        "Emannuel Carvalho": "[email protected]",
        "Kaique Pantosi": "[email protected]",
        "Bruno Mazzo": "[email protected]",
        "Concrete": "[email protected]"
    },
    "source": {
        "git": "https://github.com/concretesolutions/yosef-ios.git",
        "tag": "0.0.6"
    },
    "platforms": {
        "ios": "9.0"
    },
    "requires_arc": true,
    "source_files": "Yosef/Classes/**/*.swift",
    "swift_version": "4.0",
    "frameworks": "UIKit",
    "dependencies": {
        "Kingfisher": [
            "~> 4.0"
        ],
        "lottie-ios": [
            "~> 2.0"
        ]
    }
}

Pin It on Pinterest

Share This