Zuckerberg ACABOU COM A APPLE e falou toda a VERDADE para o mundo!

No Mac OS, ele também usa o Padrão Unix *.sh

win.sh
#!/bin/sh
java -jar /home/computador/java/WindowJAR.jar

Primeiros Passos

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!

Como é a arquitetura de uma *.exe de um Mac OS?
Mac bundle structure
Observação: não use a extensão *.app ao programa, ou senão, dará erros, deixe a pasta sem extensão!

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 :


Estrutura Básica de um Mac Bundle

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


Descrição dos Componentes

  1. 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.

  2. Info.plist
    Um arquivo XML que contém metadados sobre o aplicativo, como identificadores, versão, permissões e dependências.

  3. 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.

  4. 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.).

  5. Frameworks/
    Contém bibliotecas e frameworks personalizados que o aplicativo pode usar.

  6. Plugins/
    Contém plug-ins ou extensões que o aplicativo pode carregar.

  7. _CodeSignature/
    Inclui os dados da assinatura de código, garantindo a integridade e proteção do aplicativo.

  8. PkgInfo
    Um arquivo de texto curto que fornece um identificador simples do tipo e criador do aplicativo. Geralmente contém algo como APPL????.


Funcionamento


Comparação com Executáveis ​​do Windows

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!

Como crio um *.app no Swift sem o Xcode?

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:


Passo 1: Configurar o Ambiente

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

Passo 2: Criar o Projeto

  1. Crie um Diretório para o Projeto

    mkdir MeuApp  cd MeuApp
  2. 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/
  3. 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!".


Passo 3: Compilar o Projeto

  1. 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

Passo 4: Criar o Bundle .app

  1. Estruturar o Bundle Crie a estrutura de diretórios do Mac bundle:

    mkdir -p MeuApp.app/Contents/MacOS  mkdir -p MeuApp.app/Contents/Resources
  2. Mover o Executável Copie o executável compilado para o bundle:

    cp .build/release/MeuApp MeuApp.app/Contents/MacOS/
  3. 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>
  4. Adicionar Recursos (opcional) Coloque imagens ou outros recursos na pasta MeuApp.app/Contents/Resources e referencie-os no código, se necessário.


Passo 5: Assinar o Aplicativo

Para evitar alertas de segurança no macOS, assine o aplicativo com um certificado de desenvolvedor (ou use um certificado de autoassinatura para testes):

  1. Criar um Certificado de Autoassinatura (opcional)

    codesign -s - MeuApp.app

Passo 6: Testar o .app

  1. Mover para a Pasta de Aplicativos

    mv MeuApp.app /Applications/
  2. Executar o Aplicativo Abra o Finder, navegue até /Applications e clique no MeuApp.app.


Passo 7: Distribuir

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.

Como criar um Atalho?

 

Pacote de aplicativo (.app)

Como distribuir?

 

Pacote de aplicativo (.app)

Como instalar no Linux?