@ -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!",