I can use the prebuilt framework provided on the plcrashreporter project page when compiling for the device, but not for the simulator. I have the same problem described here.
I assume the prebuilt framework does not support the simulator’s architecture, so I downloaded out the plcrashreporter source. I opened the Xcode project and selected the CrashReporter-iOS-Simulator > iPhone 4.3 Simulator target. When I try to build the project, I get this error:
libtool: unknown option character `D' in: -D__IPHONE_OS_VERSION_MIN_REQUIRED=30000
I get the same error when I try to build most of the other targets (such as for device).
My next step was to try adding the source files to my project. I no longer have the aforementioned problem; however, I get this error when I try to compile:
fatal error: 'crash_report.pb-c.h' file not found [2]
#import "crash_report.pb-c.h"
^
1 error generated.
Command clang failed with exit code 1
The crash_report.pb-c.h file which is mentioned in the error message simply does not exist; I’ve searched the plcrashreporter source tree and the internet. Therefore, I have to assume that this file is supposed to be generated somehow, but I cannot figure out how.
(Commenting out the line in PLCrashReport.m on which crash_report.pb-c.h is included results in numerous other compilation errors.)
You are correct in that the file does not exist normally, nor does
crash_report.pb-c.cexist, which will be your next error after this one.The
crash_report.pb.handcrash_report.pb.cfiles are generated at compile time through a build rule. You need to add a custom script to your build process to make them.First, make sure you have protoc-c in the plcrashreporter folder of your project (
plcrashreporter-1.0/Dependencies/protobuf-2.0.3/bin/protoc-c). They buried it deep. This is what your script will be running.Then find your
crash_report.protofile. This is the main input thatprotoc-cwill be using to create your missing files. You can take this directory and put it manually into your script, OR you can make a rule to run the script on every*.protofile. I do the latter.Then edit your build rules to include a script that runs
protoc-cwith the flag--c_out="${DERIVED_FILES_DIR}"and yourcrash_report.protofile as two inputs, this will outputcrash_report.pb-c.handcrash_report.pb-c.cinto the same directory as where your crash_report.proto file is, which should already be accessible in your project.The build rules in Xcode 4 (and above) are under your project’s target’s build rules tab. You add a build rule before all your other build rules. Here’s what mine looks like in Xcode:
You’ll probably have to fiddle with the directory