我正在尝试使用firebase实现崩溃报告。我跟着documentation here。并将下载的子文件重命名为ServiceAccount.json
。然后将其复制到项目目录。还改了剧本。现在我的构建阶段运行脚本看起来像
# Replace this with the GOOGLE_APP_ID from your GoogleService-Info.plist file
GOOGLE_APP_ID=1:.....#my app id
# Replace the /Path/To/ServiceAccount.json with the path to the key you just downloaded
"${PODS_ROOT}"/FirebaseCrash/upload-sym "ServiceAccount.json"
但是当我尝试构建项目时,它给出了构建错误
Unexpected argument 'ServiceAccount.json'
usage: /Users/<full path>/Pods/FirebaseCrash/upload-sym [-h] [-v] [-w|-e]
Command /bin/sh failed with exit code 2
我的步骤出了什么问题?
答案 0 :(得分:22)
这是我在练习项目中使用的脚本。
//The program will read a file with the name of endereco, and create a matrix contPx3 out of it
int ** cria_matrix(char endereco[], int contP)
{
FILE *fPointer;
int i, contE, auxIndex, auxNum, **processos, cont_line = 0;
char line[100];
bool flag = true, flag2;
fPointer = fopen(endereco, "r");
//Here the creation of the matrix
processos = (int**)malloc(sizeof(int*) * contP);
for (i = 0; i < contP; i++)
processos[i] = malloc(sizeof(int) * 3);
//For now and on, is the rules of how the data will be placed on the matrix
contP = 0;
while (!feof(fPointer) && flag)
{
memset(&line[0], 'Ì', sizeof(line));
fgets(line, 100 , fPointer);
//Bassicaly is that in each line there will be 3 numbers only, diveded but as many spaces you want. The numbeer will be placed on the matrix on the determined line they are.
auxIndex = 0;
flag2 = false;
if(line[0] != '#')
for (i = 0; i < 100; i++)
{
if (line[i] != ' ' && line[i] != '\n' && line[i] != '\0' && line[i] != 'Ì')//&& line[i] != 'à'
{
auxNum = line[i] - '0';
processos[contP][auxIndex] = auxNum;
auxIndex++;
flag2 = true;
}
}
if (flag2)
contP++;
cont_line++;
if (auxIndex != 3 && auxIndex != 0)
{
flag = false;
printf("ERRO na linha: %d No processo: %d\nProvavelmente mais ou menos que 3 numeros separado por espacos\n", cont_line, contP);
}
}
fclose(fPointer);
if (!flag)
system("PAUSE");
return processos;
}
如果您的JSON文件位于项目文件夹“XYZ”中,那么您只需要这个“JSON_FILE = $ {SRCROOT} /XYZ/ServiceAccount.json”,或者如果它位于XYZ的子文件夹中,那么就像这样“ JSON_FILE = $ {SRCROOT} /XYZ/subFolder/ServiceAccount.json“
并设置GOOGLE_APP_ID就是这样。 抱歉英语不好。希望它有所帮助:)
答案 1 :(得分:6)
这对我有用。刚从Firebase文档中描述的方法中删除了"
。
GOOGLE_APP_ID=1:**********:ios:************
"${PODS_ROOT}"/FirebaseCrash/upload-sym ${SRCROOT}/******/GoogleCrashKey.json
答案 2 :(得分:3)
自FirebaseCrash 1.0.7以来,似乎已将upload-sym脚本更改为采用一个参数。
按for element in aCounter:
print(element)
检查您的FirebaseCrash pod版本,如果您使用旧版本,请更新它。
答案 3 :(得分:3)
就我而言,脚本无法找到&#39; FirebaseCrash / upload-sym&#39;因为Google文章只建议我们添加&#39; Firebase / Core&#39;到Podfile。
我补充说:'Firebase/Crash'
库然后它有效,希望这有帮助!
答案 4 :(得分:3)
Abdul的解决方案为我工作但我必须将 upload-sym 替换为 upload-sym-util.bash 脚本,所以最终看起来像这样:
JSON_FILE=${SRCROOT}/Pods/FirebaseCrash/ServiceAccount.json
GOOGLE_APP_ID=1:*:ios:*
defaults write com.google.SymbolUpload version -integer 1
JSON=$(cat "${JSON_FILE}")
/usr/bin/plutil -replace "app_${GOOGLE_APP_ID//:/_}" -json "${JSON}" "$HOME/Library/Preferences/com.google.SymbolUpload.plist"
"${PODS_ROOT}"/FirebaseCrash/upload-sym-util.bash
答案 5 :(得分:3)
我刚刚在我的脚本中将/ FirebaseCrash / upload-sym更改为/FirebaseCrash/upload-sym-util.bash,它有效
GOOGLE_APP_ID = 1:1234567830:IOS:7sjghd66373hbdd2 “$ {PODS_ROOT}”/ FirebaseCrash / upload-sym-util.bash“/Users/iosteam/Documents/MYLES-iOS-a86994a092e8.json”
答案 6 :(得分:2)
更新:最新的FirebaseCrash修复此问题,现在使用情况不同了。
说明错了。您需要手动生成PLIST文件,但仅限ONCE。以下是我对阿卜杜勒剧本的补充:
# Replace this with the GOOGLE_APP_ID from your GoogleService-Info.plist file
GOOGLE_APP_ID=1:*:iOS:*
# Insert this code BETWEEN the GOOGLE_APP_ID declaration and the
# call to FirebaseCrash/upload-sym, to generate PLIST file if needed
# Note the PLIST_FILE location is hard-coded in firebase script, do not change
PLIST_FILE="${HOME}/Library/Preferences/com.google.SymbolUpload.plist" # DO NOT CHANGE
if [ ! -f "${PLIST_FILE}" ]; then
JSON_FILE="${PODS_ROOT}/FirebaseSymbolUploadKey.json" # Change to location of your file
defaults write com.google.SymbolUpload version -integer 1 # Required by script
JSON=$(cat "${JSON_FILE}")
/usr/bin/plutil -replace "app_${GOOGLE_APP_ID//:/_}" -json "${JSON}" "${PLIST_FILE}"
fi
# Instructions WRONG, don't pass any args, script hard-codes where it looks
# for credentials, which is handled by the JSON conversion above
"${PODS_ROOT}"/FirebaseCrash/upload-sym
答案 7 :(得分:1)
最新的firebase crash upload-sym脚本可以在不指定任何路径的情况下找到服务帐户json,只需将其放在Xcode xcproject文件旁边的同一文件夹中即可。
如果你正在使用CocoaPods,这个简单的脚本示例就可以了:
let index = state.books.findIndex(book => book.id === updateBook.id);
console.log(foundBook);
if (index !== -1) {
// update existing book
Object.assign(state.book[index], updateBook);
} else {
// insert new book
}
如果您不希望每次运行时都上传符号,请改用以下脚本,以减少编译时间:
GOOGLE_APP_ID=1:1234567890:ios:ab123cd456ef789
"${PODS_ROOT}"/FirebaseCrash/upload-sym crash-service-account.json
答案 8 :(得分:1)
我有FirebaseCrash 1.0.6。我的解决方案只是使用
"${PODS_ROOT}"/FirebaseCrash/upload-sym
没有任何参数。
答案 9 :(得分:0)
首先:添加到文件ServiceAccount“.json” - &gt; ServiceAccount.json
并将该文件复制到项目的根文件夹中。
第二:在“Build Phases”
中的运行脚本中设置此代码GOOGLE_APP_ID= copy here your "GOOGLE_APP_ID" from GoogleService-Info.plist
"${PODS_ROOT}"/FirebaseCrash/upload-sym "${ROOT}"ServiceAccount.json
注意GoogleService-Info.plist有“API_KEY”
如果没有去firebase并再次下载此文件。
答案 10 :(得分:0)
在我的情况下,我执行了与firebase crash report tutorial相同的所有步骤,但我仍然得到相同的错误。后来,我意识到一旦我在Firebase Analytics和Crash Report之前在同一个项目上实施了Google Analytics。所以我遇到了崩溃,因为我从'
删除了Google Analytics
并在终端中通过Podfile
命令重新安装了pod。
答案 11 :(得分:0)
我有同样的错误;我将upload-sym片段放入&#34; Archive&#34;的后期动作中引起的。而不是&#34; Build&#34;
但是上传符号在Archive Post-Action中不起作用。它需要仅在Build actions中可用的环境变量。
(p.s。我每次构建时都不希望它上传,只是每次我为AppStore构建时都会上传。)
答案 12 :(得分:0)
我遇到了同样的问题。我的podfile中有以下几行:
pod'Fabric','〜> 1.7.2' pod'Crashlytics','〜> 3.9.3'
我已通过以下替换Pod文件中的上述行来解决此问题:
pod“ Firebase /崩溃”