summaryrefslogtreecommitdiff
path: root/objectivec/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'objectivec/README.md')
-rw-r--r--objectivec/README.md188
1 files changed, 0 insertions, 188 deletions
diff --git a/objectivec/README.md b/objectivec/README.md
deleted file mode 100644
index 06118349..00000000
--- a/objectivec/README.md
+++ /dev/null
@@ -1,188 +0,0 @@
-Protocol Buffers - Google's data interchange format
-===================================================
-
-[![Build Status](https://travis-ci.org/google/protobuf.svg?branch=master)](https://travis-ci.org/google/protobuf)
-
-Copyright 2008 Google Inc.
-
-This directory contains the Objective C Protocol Buffers runtime library.
-
-Requirements
-------------
-
-The Objective C implementation requires:
-
-- Objective C 2.0 Runtime (32bit & 64bit iOS, 64bit OS X).
-- Xcode 7.0 (or later).
-- The library code does *not* use ARC (for performance reasons), but it all can
- be called from ARC code.
-
-Installation
-------------
-
-The full distribution pulled from github includes the sources for both the
-compiler (protoc) and the runtime (this directory). To build the compiler
-and run the runtime tests, you can use:
-
- $ objectivec/DevTools/full_mac_build.sh
-
-This will generate the `src/protoc` binary.
-
-Building
---------
-
-There are two ways to include the Runtime sources in your project:
-
-Add `objectivec/\*.h` & `objectivec/GPBProtocolBuffers.m` to your project.
-
-*or*
-
-Add `objectivec/\*.h` & `objectivec/\*.m` except for
-`objectivec/GPBProtocolBuffers.m` to your project.
-
-
-If the target is using ARC, remember to turn off ARC (`-fno-objc-arc`) for the
-`.m` files.
-
-The files generated by `protoc` for the `*.proto` files (`\*.pbobjc.h' and
-`\*.pbobjc.m`) are then also added to the target.
-
-Usage
------
-
-The objects generated for messages should work like any other Objective C
-object. They are mutable objects, but if you don't change them, they are safe
-to share between threads (similar to passing an NSMutableDictionary between
-threads/queues; as long as no one mutates it, things are fine).
-
-There are a few behaviors worth calling out:
-
-A property that is type NSString\* will never return nil. If the value is
-unset, it will return an empty string (@""). This is inpart to align things
-with the Protocol Buffers spec which says the default for strings is an empty
-string, but also so you can always safely pass them to isEqual:/compare:, etc.
-and have deterministic results.
-
-A property that is type NSData\* also won't return nil, it will return an empty
-data ([NSData data]). The reasoning is the same as for NSString not returning
-nil.
-
-A property that is another GPBMessage class also will not return nil. If the
-field wasn't already set, you will get a instance of the correct class. This
-instance will be a temporary instance unless you mutate it, at which point it
-will be attached to its parent object. We call this pattern *autocreators*.
-Similar to NSString and NSData properties it makes things a little safer when
-using them with isEqual:/etc.; but more importantly, this allows you to write
-code that uses Objective C's property dot notation to walk into nested objects
-and access and/or assign things without having to check that they are not nil
-and create them each step along the way. You can write this:
-
-```
-- (void)updateRecord:(MyMessage *)msg {
- ...
- // Note: You don't have to check subMessage and otherMessage for nil and
- // alloc/init/assign them back along the way.
- msg.subMessage.otherMessage.lastName = @"Smith";
- ...
-}
-```
-
-If you want to check if a GPBMessage property is present, there is always as
-`has\[NAME\]` property to go with the main property to check if it is set.
-
-A property that is of an Array or Dictionary type also provides *autocreator*
-behavior and will never return nil. This provides all the same benefits you
-see for the message properties. Again, you can write:
-
-```
-- (void)updateRecord:(MyMessage *)msg {
- ...
- // Note: Just like above, you don't have to check subMessage and otherMessage
- // for nil and alloc/init/assign them back along the way. You also don't have
- // to create the siblingsArray, you can safely just append to it.
- [msg.subMessage.otherMessage.siblingsArray addObject:@"Pat"];
- ...
-}
-```
-
-If you are inspecting a message you got from some other place (server, disk,
-etc), you may want to check if the Array or Dictionary has entries without
-causing it to be created for you. For this, there is always a `\[NAME\]_Count`
-property also provided that can return zero or the real count, but won't trigger
-the creation.
-
-For primitive type fields (ints, floats, bools, enum) in messages defined in a
-`.proto` file that use *proto2* syntax there are conceptual differences between
-having an *explicit* and *default* value. You can always get the value of the
-property. In the case that it hasn't been set you will get the default. In
-cases where you need to know whether it was set explicitly or you are just
-getting the default, you can use the `has\[NAME\]` property. If the value has
-been set, and you want to clear it, you can set the `has\[NAME\]` to `NO`.
-*proto3* syntax messages do away with this concept, thus the default values are
-never included when the message is encoded.
-
-The Objective C classes/enums can be used from Swift code.
-
-Objective C Generator Proto File Options
-----------------------------------------
-
-**objc_class_prefix=\<prefix\>** (no default)
-
-Since Objective C uses a global namespace for all of its classes, there can
-be collisions. This option provides a prefix that will be added to the Enums
-and Objects (for messages) generated from the proto. Convention is to base
-the prefix on the package the proto is in.
-
-Objective C Generator `protoc` Options
---------------------------------------
-
-When generating Objective C code, `protoc` supports a `--objc_opt` argument; the
-argument is comma-delimited name/value pairs (_key=value,key2=value2_). The
-_keys_ are used to change the behavior during generation. The currently
-supported keys are:
-
- * `generate_for_named_framework`: The `value` used for this key will be used
- when generating the `#import` statements in the generated code. Instead
- of being plain `#import "some/path/file.pbobjc.h"` lines, they will be
- framework based, i.e. - `#import <VALUE/file.pbobjc.h>`.
-
- _NOTE:_ If this is used with `named_framework_to_proto_path_mappings_path`,
- then this is effectively the _default_ to use for everything that wasn't
- mapped by the other.
-
- * `named_framework_to_proto_path_mappings_path`: The `value` used for this key
- is a path to a file containing the listing of framework names and proto
- files. The generator uses this to decide if another proto file referenced
- should use a framework style import vs. a user level import
- (`#import <FRAMEWORK/file.pbobjc.h>` vs `#import "dir/file.pbobjc.h"`).
-
- The format of the file is:
- * An entry is a line of `frameworkName: file.proto, dir/file2.proto`.
- * Comments start with `#`.
- * A comment can go on a line after an entry.
- (i.e. - `frameworkName: file.proto # comment`)
-
- Any number of files can be listed for a framework, just separate them with
- commas.
-
- There can be multiple lines listing the same frameworkName incase it has a
- lot of proto files included in it; and having multiple lines makes things
- easier to read.
-
-Contributing
-------------
-
-Please make updates to the tests along with changes. If just changing the
-runtime, the Xcode projects can be used to build and run tests. If your change
-also requires changes to the generated code,
-`objectivec/DevTools/full_mac_build.sh` can be used to easily rebuild and test
-changes. Passing `-h` to the script will show the addition options that could
-be useful.
-
-Documentation
--------------
-
-The complete documentation for Protocol Buffers is available via the
-web at:
-
- https://developers.google.com/protocol-buffers/