Mobile

29 dez, 2020

Como ajudar seu time mobile a consumir uma api de forma mais rápida

Publicidade

Quando estamos em um projeto onde o mobile trabalha em paralelo com o backend numa determinada funcionalidade, muitas vezes nos deparamos com um problema: `preciso fazer minha camada de serviços e agora?` No projeto em que estou trabalhando decidi testar subir um serviço em vapor que retornasse um mock das respostas para consumo de nossos desenvolvedores.

Post original em meu blog oficial

vapor new hello-jumpper -n

Criando seu projeto Vapor

Aproveito a oportunidade do post para apresentar a mini biblioteca que estou desenvolvendo para escrever HTML com Swift o jumpper

vapor new hello-jumpper -n

Image for post

cd 'hello-jumpper'
// swift-tools-version:5.2
import PackageDescriptionlet package = Package(
    name: "hello-jumpper",
    platforms: [
       .macOS(.v10_15)
    ],
    dependencies: [
        .package(url: "https://github.com/vapor/vapor.git", from: "4.0.0"),
        .package(url: "https://github.com/jumpper/jumpper.git", from: "0.0.5"),
        .package(url: "https://github.com/vapor/leaf.git", from: "4.0.0-rc.1.4")
    ],
    targets: [
        .target(
            name: "App",
            dependencies: [
                .product(name: "Vapor", package: "vapor"),
                .product(name: "Leaf", package: "leaf"),
                .product(name: "jumpper", package: "jumpper")
            ],
            swiftSettings: [
                .unsafeFlags(["-cross-module-optimization"], .when(configuration: .release))
            ]
        ),
        .target(name: "Run", dependencies: [.target(name: "App")]),
        .testTarget(name: "AppTests", dependencies: [
            .target(name: "App"),
            .product(name: "XCTVapor", package: "vapor"),
        ])
    ]
)

Image for post

import XCTest#if os(Linux) || os(FreeBSD)
    @testable import AsyncHTTPClientTests    XCTMain([
        testCase(AppTests.testHelloWorld)
    ])
#endif

Configurando Leaf e jumpper

Vamos configurar o projeto para que possamos usar o Leaf e, consequentemente, o jumpper.

app.middleware.use(FileMiddleware(publicDirectory: app.directory.publicDirectory))// Configure Leaf
app.views.use(.leaf)
app.leaf.cache.isEnabled = app.environment.isRelease
/*...*/

Criando pasta publica para css

Para deixar a cara do Hello um pouco mais amigável, vamos usar um css simples e funcional. Recomendo esta biblioteca milligram.io

Image for post

Image for post

Image for post

import Leaf
import jumpper
func routes(_ app: Application) throws {
    app.get { req in
        return req.view.render("index", [
            "title": ":: Hello jumpper",
            "body": H1("Hello jumpper").getString()
        ])    }
}

Image for post

Erros comuns

Como não configuramos o custom working directory e nem criamos um Xcode project.

{"error":true,"reason":"LeafError(file: \"\/Users\/michel\/Library\/Developer\/Xcode\/DerivedData\/hello-jumpper-djoytftxxnsisrcssinrjjasjovd\/SourcePackages\/checkouts\/leaf-kit\/Sources\/LeafKit\/LeafSource\/LeafSources.swift\", function: \"searchSources(t:on:s:)\", line: 73, column: 69, reason: LeafKit.LeafError.Reason.noTemplateExists(\"index\"))"}sudo vapor run serve --hostname 0.0.0.0 --port 80

Criando repositório no Git

Vamos criar um novo repositório no GitHub para controlar nossas modificações.

Heroku Deploy

Com essa configuração do Git pronta, podemos começar a parte do Heroku. Com sua conta já criada e a CLI instalada na sua maquina, siga a sequência de comandos abaixo:

heroku login
heroku: Press any key to open up the browser to login or q to exit:

Image for post

Image for post

Image for post

Logging in... done
Logged in as myemail@mydomain.com
heroku create hellojumpper
heroku create hellojumpperCreating ⬢ hellojumpper... done
https://hellojumpper.herokuapp.com/ | https://git.heroku.com/hellojumpper.git
heroku git:remote -a hellojumpper
set git remote heroku to https://git.heroku.com/hellojumpper.git
heroku buildpacks:set vapor/vapor
Buildpack set. Next release on hellojumpper will use vapor/vapor.
Run git push heroku main to create a new release using this buildpack.
web: Run serve --env production --hostname 0.0.0.0 --port $PORT
git add Procfile
git commit -m "Adicionando Procfile"
git push origin main
git push heroku main

Image for post

remote: [873/873] Linking Run
remote: -----> Installing dynamic libraries
remote: -----> Installing binaries
remote: -----> Cleaning up after build
remote: -----> Discovering process types
remote:        Procfile declares types -> web
remote: 
remote: -----> Compressing...
remote:        Done: 44.8M
remote: -----> Launching...
remote:        Released v10
remote:        https://hellojumpper.herokuapp.com/ deployed to Heroku
remote: 
remote: Verifying deploy... done.
To https://git.heroku.com/hellojumpper.git
   8a45ab6..0d269b8  main -> main