프로토콜 버퍼 사용

다음은 프로젝트에 프로토콜 버퍼를 포함하는 방법을 보여주는 간단한 예입니다.

다음은 간단한 프로토콜 버퍼 정의인 geo.proto입니다.

syntax = "proto2";

message Location {
  optional string name = 1;
  optional double latitude = 2;
  optional double longitude = 3;
}

기본 자바 프로그램인 Hello.java

class Hello {
  public static void main(String[] args) {
    Geo.Location.Builder locationBuilder = Geo.Location.newBuilder();
    locationBuilder.setName("CN Tower");
    locationBuilder.setLatitude(43.6412172);
    locationBuilder.setLongitude(-79.3884058);
    Geo.Location location = locationBuilder.build();
    System.out.println(location.toString());
  }
}

먼저 '프로젝트' 설정을 다음과 같이 설정합니다.

export J2OBJC_HOME=~/j2objc    # Change to where the j2objc distribution was unzipped.
ls $J2OBJC_HOME/j2objc         # Fix above definition until this command works.
mkdir java objc classes        # Output directories

다음으로 j2objc_protoc를 사용하여 프로토콜 버퍼를 생성합니다. --java_out를 사용하여 자바 코드를 생성하고 --j2objc_out를 사용하여 Objective-C 코드를 생성합니다. 각 플래그에 지정된 값은 도착어의 출력 디렉터리입니다. 두 출력 언어 모두 동일한 명령어로 생성할 수 있습니다.

$J2OBJC_HOME/j2objc_protoc --java_out=java --j2objc_out=objc geo.proto
ls java
Geo.java
ls objc
Geo.h Geo.m

생성된 자바 proto 파일을 컴파일해야 Hello에서 이에 대한 참조가 확인됩니다. javac를 사용하여 수행되므로 다음 단계에서 목표 C로 변환되지 않습니다.

javac -source 1.8 -target 1.8 -bootclasspath $J2OBJC_HOME/lib/jre_emul.jar -cp $J2OBJC_HOME/lib/protobuf_runtime.jar -d classes java/*.java
ls classes/
Geo$1.class                 Geo$Location$Builder.class  Geo$LocationOrBuilder.class
Geo$Location$1.class        Geo$Location.class          Geo.class

평소와 같이 자바 소스를 번역하여 컴파일된 자바 proto를 클래스 경로에 추가합니다.

$J2OBJC_HOME/j2objc -cp classes:$J2OBJC_HOME/lib/protobuf_runtime.jar -d objc Hello.java
ls objc
Geo.h   Geo.m   Hello.h Hello.m

이제 모든 Objective-C 소스를 컴파일하고 링크할 수 있습니다. protobuf 런타임을 포함하려면 libprotobuf_runtime.a 라이브러리와 연결해야 합니다.

$J2OBJC_HOME/j2objcc -lprotobuf_runtime -o hello objc/*.m
./hello Hello
name: "CN Tower"
latitude: 43.6412
longitude: -79.3884