|
|
|
@ -58,8 +58,50 @@ NSData *GPBEmptyNSData(void) { |
|
|
|
|
return defaultNSData; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// -- About Version Checks -- |
|
|
|
|
// There's actually 3 places these checks all come into play: |
|
|
|
|
// 1. When the generated source is compile into .o files, the header check |
|
|
|
|
// happens. This is checking the protoc used matches the library being used |
|
|
|
|
// when making the .o. |
|
|
|
|
// 2. Every place a generated proto header is included in a developer's code, |
|
|
|
|
// the header check comes into play again. But this time it is checking that |
|
|
|
|
// the current library headers being used still support/match the ones for |
|
|
|
|
// the generated code. |
|
|
|
|
// 3. At runtime the final check here (GPBCheckRuntimeVersionsInternal), is |
|
|
|
|
// called from the generated code passing in values captured when the |
|
|
|
|
// generated code's .o was made. This checks that at runtime the generated |
|
|
|
|
// code and runtime library match. |
|
|
|
|
|
|
|
|
|
void GPBCheckRuntimeVersionSupport(int32_t objcRuntimeVersion) { |
|
|
|
|
// NOTE: This is passing the value captured in the compiled code to check |
|
|
|
|
// against the values captured when the runtime support was compiled. This |
|
|
|
|
// ensures the library code isn't in a different framework/library that |
|
|
|
|
// was generated with a non matching version. |
|
|
|
|
if (GOOGLE_PROTOBUF_OBJC_VERSION < objcRuntimeVersion) { |
|
|
|
|
// Library is too old for headers. |
|
|
|
|
[NSException raise:NSInternalInconsistencyException |
|
|
|
|
format:@"Linked to ProtocolBuffer runtime version %d," |
|
|
|
|
@" but code compiled needing atleast %d!", |
|
|
|
|
GOOGLE_PROTOBUF_OBJC_VERSION, objcRuntimeVersion]; |
|
|
|
|
} |
|
|
|
|
if (objcRuntimeVersion < GOOGLE_PROTOBUF_OBJC_MIN_SUPPORTED_VERSION) { |
|
|
|
|
// Headers are too old for library. |
|
|
|
|
[NSException raise:NSInternalInconsistencyException |
|
|
|
|
format:@"Proto generation source compiled against runtime" |
|
|
|
|
@" version %d, but this version of the runtime only" |
|
|
|
|
@" supports back to %d!", |
|
|
|
|
objcRuntimeVersion, |
|
|
|
|
GOOGLE_PROTOBUF_OBJC_MIN_SUPPORTED_VERSION]; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// This api is no longer used for version checks. 30001 is the last version |
|
|
|
|
// using this old versioning model. When that support is removed, this function |
|
|
|
|
// can be removed (along with the declaration in GPBUtilities_PackagePrivate.h). |
|
|
|
|
void GPBCheckRuntimeVersionInternal(int32_t version) { |
|
|
|
|
if (version != GOOGLE_PROTOBUF_OBJC_GEN_VERSION) { |
|
|
|
|
GPBInternalCompileAssert(GOOGLE_PROTOBUF_OBJC_MIN_SUPPORTED_VERSION == 30001, |
|
|
|
|
time_to_remove_this_old_version_shim); |
|
|
|
|
if (version != GOOGLE_PROTOBUF_OBJC_MIN_SUPPORTED_VERSION) { |
|
|
|
|
[NSException raise:NSInternalInconsistencyException |
|
|
|
|
format:@"Linked to ProtocolBuffer runtime version %d," |
|
|
|
|
@" but code compiled with version %d!", |
|
|
|
|