| win.sh |
| #!/bin/sh java -jar /home/computador/java/WindowJAR.jar |
| main.swift |
| // Crie uma pasta teste // mkdir teste // Entre na pasta teste // cd teste // Gere o código na pasta teste // swift package init --name teste --type executable // Vai gerar o seguinte pacote na pasta teste // /teste // + // |--Package.swift // +--/Sources // |--main.swift // Abra um editor de sua preferência com o seguinte comando // notepad Sources/main.swift // Insira o código a seguir na pasta Sources no arquivo main.swift print("Hello, world!") // Compile o código na pasta teste com o seguinte comando // swift run teste // Executando o programa se for no Windows // .build\x86_64-unknown-windows-msvc\debug\teste.exe // Resultado // Hello, world! |
Os aplicativos no macOS geralmente são distribuídos como pacotes (bundles), que são diretórios organizados de forma hierárquica com uma estrutura específica. Um pacote de aplicativo no macOS tem extensão .app, mas, por baixo, é uma pasta disfarçada. Essa estrutura facilita a organização dos recursos e a execução do aplicativo. A seguir, detalhe a arquitetura de um pacote Mac :
Um pacote é uma hierarquia de diretórios que geralmente segue este modelo:
MyApp.app/
+-- Contents/
+-- Info.plist
+-- MacOS/
¦ +-- MyApp (executável principal)
+-- Resources/
¦ +-- Images/
¦ +-- Sounds/
¦ +-- Localizations/
¦ +-- Outros recursos
+-- Frameworks/
+-- Plugins/
+-- _CodeSignature/
+-- PkgInfo
Contents/
O diretório principal dentro do pacote do aplicativo. Ele contém todas as subpastas e arquivos necessários para o funcionamento do aplicativo.
Info.plist
Um arquivo XML que contém metadados sobre o aplicativo, como identificadores, versão, permissões e dependências.
Exemplos de chaves comuns:
CFBundleName: Nome do aplicativo.
CFBundleExecutable: Nome do seguintevel principal.
CFBundleIdentifier: Identificador único do aplicativo.
NSHighResolutionCapable: Indica se há suporte para telas Retina.
MacOS/
Contém o seguinte nível principal do aplicativo. Este é o arquivo binário que o sistema carrega e executa quando o usuário abre o aplicativo.
Resources/
Contém recursos usados pelo aplicativo, como imagens, ícones, arquivos de áudio, arquivos de ajuda e strings localizadas (nas subpastas de localização como en.lproj, pt-BR.lproj, etc.).
Frameworks/
Contém bibliotecas e frameworks personalizados que o aplicativo pode usar.
Plugins/
Contém plug-ins ou extensões que o aplicativo pode carregar.
_CodeSignature/
Inclui os dados da assinatura de código, garantindo a integridade e proteção do aplicativo.
PkgInfo
Um arquivo de texto curto que fornece um identificador simples do tipo e criador do aplicativo. Geralmente contém algo como APPL????.
Quando um aplicativo .appé aberto no macOS, o sistema localiza o arquivo encontrado no diretório MacOS/(referenciado pela chave CFBundleExecutableno Info.plist) e o executa.
Recursos como imagens ou strings localizadas são carregados dinamicamente no diretório Resources/.
Enquanto no Windows um seguimentovel ( .exe) é geralmente um arquivo único que contém todos os recursos internos ou referenciados externamente, no macOS, uma abordagem de pacotes organiza tudo em uma posição clara e modular. Isso permite maior flexibilidade e facilita a distribuição e gerenciamento de recursos.
Se precisar de um exemplo prático ou quiser mais detalhes sobre algum componente, avise!
Embora o Xcode seja o ambiente padrão para desenvolver aplicativos macOS, você pode criar um .app usando Swift diretamente no terminal com ferramentas como o Swift Package Manager (SPM) e os comandos disponíveis no macOS. Aqui está como fazer:
Certifique-se de que o Swift está instalado no seu macOS. Ele já vem pré-instalado em sistemas recentes. Verifique a versão executando:
swift --version
Crie um Diretório para o Projeto
mkdir MeuApp cd MeuApp
Inicialize um Novo Projeto com o Swift Package Manager
swift package init --type executable
Isso cria uma estrutura básica com arquivos como:
MeuApp/ +-- Package.swift +-- Sources/ ¦ +-- MeuApp/ ¦ +-- main.swift +-- Tests/
Edite o Arquivo main.swift Abra Sources/MeuApp/main.swift no seu editor de texto favorito (como nano, vim, ou qualquer editor gráfico).
Insira o seguinte código Swift básico:
import Cocoa
let app = NSApplication.shared
app.setActivationPolicy(.regular)
let window = NSWindow(
contentRect: NSRect(x: 0, y: 0, width: 400, height:
300),
styleMask: [.titled, .closable, .resizable],
backing: .buffered,
defer: false
)
window.title = "MeuApp"
window.makeKeyAndOrderFront(nil)
let label = NSTextField(labelWithString: "Olá, mundo!")
label.frame = NSRect(x: 150, y: 140, width: 100, height: 40)
window.contentView?.addSubview(label)
app.run()
Esse código cria uma janela simples com o texto "Olá, mundo!".
Compilar para um Executável Execute o seguinte comando na raiz do projeto:
swift build -c release
O executável será gerado em:
.build/release/MeuApp
Estruturar o Bundle Crie a estrutura de diretórios do Mac bundle:
mkdir -p MeuApp.app/Contents/MacOS mkdir -p MeuApp.app/Contents/Resources
Mover o Executável Copie o executável compilado para o bundle:
cp .build/release/MeuApp MeuApp.app/Contents/MacOS/
Criar o Info.plist Crie o arquivo MeuApp.app/Contents/Info.plist com o seguinte conteúdo:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleName</key>
<string>MeuApp</string>
<key>CFBundleIdentifier</key>
<string>com.meuapp.bundle</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>CFBundleExecutable</key>
<string>MeuApp</string>
<key>NSHighResolutionCapable</key>
<true/>
<key>LSMinimumSystemVersion</key>
<string>10.13</string>
</dict>
</plist>
Adicionar Recursos (opcional) Coloque imagens ou outros recursos na pasta MeuApp.app/Contents/Resources e referencie-os no código, se necessário.
Para evitar alertas de segurança no macOS, assine o aplicativo com um certificado de desenvolvedor (ou use um certificado de autoassinatura para testes):
Criar um Certificado de Autoassinatura (opcional)
codesign -s - MeuApp.app
Mover para a Pasta de Aplicativos
mv MeuApp.app /Applications/
Executar o Aplicativo Abra o Finder, navegue até /Applications e clique no MeuApp.app.
Você pode compactar o bundle .app em um arquivo ZIP, DMG ou PKG para compartilhar.
Este método é mais manual, mas ideal para quem deseja controlar cada detalhe ou criar aplicativos leves e personalizados.