How to get the build UUID in runtime and the image base address

后端 未结 3 1025
臣服心动
臣服心动 2020-12-09 06:53

Is there away to get the build UUID, the one that you can check in the dSYM generated file and the image base address in iOS.

Not so good when it comes to low level

3条回答
  •  天命终不由人
    2020-12-09 07:33

    Your own suggestion is way too complicated.

    Check this code from HockeySDK which does the same with just a couple of lines of code: https://github.com/bitstadium/HockeySDK-iOS/blob/develop/Classes/BITHockeyBaseManager.m#L136

    - (NSString *)executableUUID {
      // This now requires the testing of this feature to be done on an actual device, since it returns always empty strings on the simulator
    #if !TARGET_IPHONE_SIMULATOR
      const uint8_t *command = (const uint8_t *)(&_mh_execute_header + 1);
      for (uint32_t idx = 0; idx < _mh_execute_header.ncmds; ++idx) {
        const struct load_command *load_command = (const struct load_command *)command;
        if (load_command->cmd == LC_UUID) {
          const struct uuid_command *uuid_command = (const struct uuid_command *)command;
          const uint8_t *uuid = uuid_command->uuid;
          return [[NSString stringWithFormat:@"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
                   uuid[0], uuid[1], uuid[2], uuid[3],
                   uuid[4], uuid[5], uuid[6], uuid[7],
                   uuid[8], uuid[9], uuid[10], uuid[11],
                   uuid[12], uuid[13], uuid[14], uuid[15]]
                  lowercaseString];
        } else {
          command += load_command->cmdsize;
        }
      }
    #endif
      return @"";
    }
    

提交回复
热议问题