Sobre o projeto

# Sobre o Realm Database O Realm é um banco de dados móvel que é executado diretamente em telefones, tablets ou wearables. Este repositório contém o código-fonte das versões para iOS, macOS, tvOS e watchOS do Realm Swift e do Realm Objective-C. ## Por que usar o Realm * **Intuitivo para desenvolvedores:** O modelo de dados orientado a objetos do Realm é simples de aprender, não precisa de um ORM e permite escrever menos código. * **Feito para mobile:** O Realm é completo, leve e usa memória, espaço em disco e bateria de forma eficiente. * **Projetado para uso offline:** O banco de dados local do Realm persiste os dados em disco, então os apps funcionam tão bem offline quanto online. ## Orientado a objetos: simplifique seu código O Realm foi criado para desenvolvedores mobile, com simplicidade em mente. O modelo de dados idiomático e orientado a objetos pode economizar milhares de linhas de código. ```swift // Defina seus modelos como classes Swift comuns class Dog: Object { @Persisted var name: String @Persisted var age: Int } class Person: Object { @Persisted(primaryKey: true) var _id: String @Persisted var name: String @Persisted var age: Int // Crie relacionamentos apontando um campo Object para outra Classe @Persisted var dogs: List<Dog> } // Use-os como objetos Swift comuns let dog = Dog() dog.name = "Rex" dog.age = 1 print("name of dog: \(dog.name)") // Obtenha o Realm padrão let realm = try! Realm() // Persista seus dados facilmente com uma transação de escrita try! realm.write { realm.add(dog) } ``` ## Objetos vivos: crie apps reativos Os objetos vivos do Realm significam que dados atualizados em qualquer lugar são atualizados automaticamente em todos os lugares. ```swift // Abra o realm padrão. let realm = try! Realm() var token: NotificationToken? let dog = Dog() dog.name = "Max" // Crie um cachorro no realm. try! realm.write { realm.add(dog) } // Configure o listener e observe as notificações do objeto. token = dog.observe { change in switch change { case .change(let properties): for property in properties { print("Property '\(property.name)' changed to '\(property.newValue!)'"); } case .error(let error): print("An error occurred: (error)") case .deleted: print("The object was deleted.") } } // Atualize o nome do cachorro para ver o efeito. try! realm.write { dog.name = "Wolfie" } ``` ### SwiftUI O Realm se integra diretamente ao SwiftUI, atualizando suas views para que você não precise fazer isso. ```swift struct ContactsView: View { @ObservedResults(Person.self) var persons var body: some View { List { ForEach(persons) { person in Text(person.name) } .onMove(perform: $persons.move) .onDelete(perform: $persons.remove) }.navigationBarItems(trailing: Button("Add") { $persons.append(Person()) } ) } } ``` ## Totalmente criptografado Os dados podem ser criptografados em trânsito e em repouso, mantendo seguros até os dados mais sensíveis. ```swift // Gere uma chave de criptografia aleatória var key = Data(count: 64) _ = key.withUnsafeMutableBytes { (pointer: UnsafeMutableRawBufferPointer) in guard let baseAddress = pointer.baseAddress else { fatalError("Failed to obtain base address") } SecRandomCopyBytes(kSecRandomDefault, 64, baseAddress) } // Adicione a chave de criptografia à configuração e abra o realm let config = Realm.Configuration(encryptionKey: key) let realm = try Realm(configuration: config) // Use o Realm normalmente let dogs = realm.objects(Dog.self).filter("name contains 'Fido'") ``` ## Primeiros passos Oferecemos suporte à instalação do Realm via Swift Package Manager, CocoaPods, Carthage ou importando um XCFramework dinâmico. Para mais informações, consulte nosso [Quick Start](docs/guides/quick-start.md). ## Documentação A documentação pode ser encontrada no diretório [docs/](docs/README.md). A referência da API pode ser gerada a partir do código-fonte usando [jazzy](https://github.com/realm/jazzy/) executando `sh build.sh docs` na raiz deste repositório. ## Obtendo ajuda - **Precisa de ajuda com seu código?**: Procure perguntas anteriores com a [tag `realm`](https://stackoverflow.com/questions/tagged/realm?sort=newest) no Stack Overflow ou [faça uma nova pergunta](https://stackoverflow.com/questions/ask?tags=realm). Para discussões gerais que possam ser consideradas amplas demais para o Stack Overflow, use o [Fórum da Comunidade](https://developer.mongodb.com/community/forums/tags/c/realm-sdks/58/swift/). - **Tem um bug para relatar?** [Abra uma issue no GitHub](https://github.com/realm/realm-swift/issues/new). Se possível, inclua a versão do Realm, um log completo, o arquivo do Realm e um projeto que mostre o problema. - **Tem uma solicitação de recurso?** [Abra uma issue no GitHub](https://github.com/realm/realm-swift/issues/new). Diga o que o recurso deve fazer e por que você o deseja. ## Compilando o Realm Caso você não queira usar a versão pré-compilada, pode compilar o Realm a partir do código-fonte. Pré-requisitos: * Compilar o Realm requer Xcode 15.3 ou mais recente. * Compilar a documentação do Realm requer [jazzy](https://github.com/realm/jazzy) Depois de ter todos os pré-requisitos necessários, compilar o Realm leva apenas um único comando: `sh build.sh build`. Você precisará de uma conexão com a internet na primeira vez que compilar o Realm para baixar o binário principal. Isso produzirá Realm.xcframework e RealmSwift.xcframework em `build/Release/`. Execute `sh build.sh help` para ver todas as ações que você pode realizar (build ios/osx, gerar docs, testar, etc.). ## Contribuindo Consulte [CONTRIBUTING.md](CONTRIBUTING.md) para mais detalhes! ## Código de Conduta Este projeto adere ao [MongoDB Code of Conduct](https://www.mongodb.com/community-code-of-conduct). Ao participar, espera-se que você siga este código. Por favor, reporte comportamentos inaceitáveis para [community-conduct@mongodb.com](mailto:community-conduct@mongodb.com). ## Licença Realm Objective-C e Realm Swift são publicados sob a licença Apache 2.0. O Realm Core também é publicado sob a licença Apache 2.0 e está disponível [aqui](https://github.com/realm/realm-core). ## Feedback **_Se você usa o Realm e está satisfeito com ele, considere enviar um tweet mencionando [@realm](https://twitter.com/realm) para compartilhar sua opinião!_** **_E se você não gostou, por favor nos diga o que você gostaria que fosse melhorado, para que possamos corrigir!_**