From a4d757fe957f856e6b28059a2e0db5bfa999ec8f Mon Sep 17 00:00:00 2001 From: Klemens Muthmann Date: Thu, 9 Jun 2022 09:11:58 +0200 Subject: [PATCH 1/4] [CIA-79] Add support for building as Cocoa Pod (#26) * Add temporary files from Mac to gitignore * Add podspec file to make this includable via CocoaPods * Update Readme file to include Swift Code Generation --- .gitignore | 3 ++ Protos.podspec | 135 +++++++++++++++++++++++++++++++++++++++++++++++++ README.adoc | 14 ++++- 3 files changed, 151 insertions(+), 1 deletion(-) create mode 100644 Protos.podspec diff --git a/.gitignore b/.gitignore index 98544c8..dea4c7f 100644 --- a/.gitignore +++ b/.gitignore @@ -56,3 +56,6 @@ gradle.properties # Vertx Config files **/config.json + +# Temporary Mac Files +**/.DS_Store diff --git a/Protos.podspec b/Protos.podspec new file mode 100644 index 0000000..72fb725 --- /dev/null +++ b/Protos.podspec @@ -0,0 +1,135 @@ +# +# Be sure to run `pod spec lint Protos.podspec' to ensure this is a +# valid spec and to remove all comments including this before submitting the spec. +# +# To learn more about Podspec attributes see https://guides.cocoapods.org/syntax/podspec.html +# To see working Podspecs in the CocoaPods repo see https://github.com/CocoaPods/Specs/ +# + +Pod::Spec.new do |spec| + + # ――― Spec Metadata ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # + # + # These will help people to find your library, and whilst it + # can feel like a chore to fill in it's definitely to your advantage. The + # summary should be tweet-length, and the description more in depth. + # + + spec.name = "Protos" + spec.version = "1.0.0" + spec.summary = "The protocol buffer specification to create the Cyface binary format" + + # This description is used to generate tags and improve search results. + # * Think: What does it do? Why did you write it? What is the focus? + # * Try to keep it short, snappy and to the point. + # * Write the description between the DESC delimiters below. + # * Finally, don't worry about the indent, CocoaPods strips it! + spec.description = <<-DESC +This Project contains the measurement.proto file. +It serves as input description for the Cyface binary format, starting with version 2. + DESC + + spec.homepage = "https://github.com/cyface-de/protos" + # spec.screenshots = "www.example.com/screenshots_1.gif", "www.example.com/screenshots_2.gif" + + + # ――― Spec License ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # + # + # Licensing your code is important. See https://choosealicense.com for more info. + # CocoaPods will detect a license file if there is a named LICENSE* + # Popular ones are 'MIT', 'BSD' and 'Apache License, Version 2.0'. + # + + spec.license = "GPLv3" + # spec.license = { :type => "GPLv3", :file => "LICENSE" } + + + # ――― Author Metadata ――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # + # + # Specify the authors of the library, with email addresses. Email addresses + # of the authors are extracted from the SCM log. E.g. $ git log. CocoaPods also + # accepts just a name if you'd rather not provide an email address. + # + # Specify a social_media_url where others can refer to, for example a twitter + # profile URL. + # + + spec.author = { "Cyface GmbH" => "mail@cyface.de" } + + # ――― Platform Specifics ――――――――――――――――――――――――――――――――――――――――――――――――――――――― # + # + # If this Pod runs only on iOS or OS X, then specify the platform and + # the deployment target. You can optionally include the target after the platform. + # + + # spec.platform = :ios + # spec.platform = :ios, "5.0" + + # When using multiple platforms + spec.ios.deployment_target = "12.0" + spec.osx.deployment_target = "10.9" + # spec.watchos.deployment_target = "2.0" + # spec.tvos.deployment_target = "9.0" + + + # ――― Source Location ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # + # + # Specify the location from where the source should be retrieved. + # Supports git, hg, bzr, svn and HTTP. + # + + spec.source = { :git => "https://github.com/cyface-de/protos.git", :tag => "#{spec.version}" } + + + # ――― Source Code ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # + # + # CocoaPods is smart about how it includes source code. For source files + # giving a folder will include any swift, h, m, mm, c & cpp files. + # For header files it will include any header in the folder. + # Not including the public_header_files will make all headers public. + # + + # spec.source_files = "src/main/proto/**/*.proto" + + # spec.public_header_files = "Classes/**/*.h" + + + # ――― Resources ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # + # + # A list of resources included with the Pod. These are copied into the + # target bundle with a build phase script. Anything else will be cleaned. + # You can preserve files from being cleaned, please don't preserve + # non-essential files like tests, examples and documentation. + # + + # spec.resource = "icon.png" + spec.resources = "src/main/proto/**/*.proto" + + # spec.preserve_paths = "FilesToSave", "MoreFilesToSave" + + + # ――― Project Linking ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # + # + # Link your library with frameworks, or libraries. Libraries do not include + # the lib prefix of their name. + # + + # spec.framework = "SomeFramework" + # spec.frameworks = "SomeFramework", "AnotherFramework" + + # spec.library = "iconv" + # spec.libraries = "iconv", "xml2" + + + # ――― Project Settings ――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # + # + # If your library depends on compiler flags you can set them in the xcconfig hash + # where they will only apply to your library. If you depend on other Podspecs + # you can include multiple dependencies to ensure it works. + + # spec.requires_arc = true + + # spec.xcconfig = { "HEADER_SEARCH_PATHS" => "$(SDKROOT)/usr/include/libxml2" } + # spec.dependency "JSONKit", "~> 1.4" + +end diff --git a/README.adoc b/README.adoc index b97e8a0..984615e 100644 --- a/README.adoc +++ b/README.adoc @@ -45,7 +45,9 @@ Other message types: == Compiling the Message Definitions -Generates serializer, deserializer, etc. in a chosen language, e.g. `.java` files for Java. +Generates serializer, deserializer, etc. in a chosen language, e.g. `.java` files for Java, or `.swift` files for Swift. + +### Java Java classes can be compiled with link:https://developers.google.com/protocol-buffers/docs/javatutorial#compiling-your-protocol-buffers[protoc] (Protocol Buffers, version: see `protobufVersion` in `build.gradle`): @@ -64,6 +66,16 @@ Or you can download the `proto` link:protoc --java_out=./src/main/java/ src/main The serializers encode the data in an efficient way, the decision process is documented link:https://cyface.atlassian.net/wiki/spaces/IM/pages/1535148033/Datenformat+bertragungsprotokoll+API+V3[internally]. +### Swift +Swift classes may be generated using link:https://github.com/apple/swift-protobuf[Swift Protobuf] from Apple. + +You can include the `.proto` file with your Swift project from the Cyface custom Pod repository: `https://github.com/cyface-de/ios-podspecs.git` using CocoaPods: + +``` +pod 'Protos', '~> 1.0.0' +``` + +Using a custom Pods repository is explained on the link:https://guides.cocoapods.org/making/private-cocoapods.html[CocoaPods Website]. == Using the generated Code From 07d66a01de42d1ed112472beccaee1f85d04163c Mon Sep 17 00:00:00 2001 From: Klemens Muthmann Date: Thu, 9 Jun 2022 11:16:44 +0200 Subject: [PATCH 2/4] [CY-6040] Add version to central file (#27) This commit makes sure that there is only one place for the project version, used by podspec and gradle file. --- Protos.podspec | 8 +++++++- VERSION | 1 + build.gradle | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 VERSION diff --git a/Protos.podspec b/Protos.podspec index 72fb725..7d15ed0 100644 --- a/Protos.podspec +++ b/Protos.podspec @@ -5,6 +5,12 @@ # To learn more about Podspec attributes see https://guides.cocoapods.org/syntax/podspec.html # To see working Podspecs in the CocoaPods repo see https://github.com/CocoaPods/Specs/ # +load_version = Proc.new do + file = File.open("VERSION") + version = file.read + file.close + version +end Pod::Spec.new do |spec| @@ -16,7 +22,7 @@ Pod::Spec.new do |spec| # spec.name = "Protos" - spec.version = "1.0.0" + spec.version = load_version.call spec.summary = "The protocol buffer specification to create the Cyface binary format" # This description is used to generate tags and improve search results. diff --git a/VERSION b/VERSION new file mode 100644 index 0000000..77d6f4c --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +0.0.0 diff --git a/build.gradle b/build.gradle index a6e6f50..b411461 100644 --- a/build.gradle +++ b/build.gradle @@ -40,7 +40,7 @@ plugins { } group = 'de.cyface' -version = '2.0.0' +version = rootProject.file('VERSION').text.trim() tasks.withType(JavaCompile) { options.encoding = 'UTF-8' From 8b3eaa286c9634c4cc8899179273ce83b2252930 Mon Sep 17 00:00:00 2001 From: Klemens Muthmann Date: Thu, 9 Jun 2022 14:52:31 +0200 Subject: [PATCH 3/4] Increase version to 2.1.0 --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 77d6f4c..7ec1d6d 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.0.0 +2.1.0 From 2daeea573488d88b7f45cf5570673fe5a1d31843 Mon Sep 17 00:00:00 2001 From: Klemens Muthmann Date: Thu, 9 Jun 2022 14:52:50 +0200 Subject: [PATCH 4/4] Increase version in readme example --- README.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.adoc b/README.adoc index 984615e..313042c 100644 --- a/README.adoc +++ b/README.adoc @@ -72,7 +72,7 @@ Swift classes may be generated using link:https://github.com/apple/swift-protobu You can include the `.proto` file with your Swift project from the Cyface custom Pod repository: `https://github.com/cyface-de/ios-podspecs.git` using CocoaPods: ``` -pod 'Protos', '~> 1.0.0' +pod 'Protos', '~> 2.1.0' ``` Using a custom Pods repository is explained on the link:https://guides.cocoapods.org/making/private-cocoapods.html[CocoaPods Website].