Swift HockeyApp: пользовательский журнал сбоев не отображается на консоли - PullRequest
0 голосов
/ 25 апреля 2019

Я изучаю возможность загрузки журнала сбоев в HockeyApp, но журнал сбоев не отображается на панели консоли HockeyApp.

Формат журнала сбоев копируется из их демонстрационного кода на их веб-сайте как таковой, с модификациями Package и CrashReporter Key:

Package: //Bundle ID as shown on HockeyApp console
Version: 1.3
OS: Mac OS X 10.14.2 (18C54)
Manufacturer: Apple
Model: MacBookPro12,1
Date: Wed Apr 24 15:35:08 GMT+08:00 2019
CrashReporter Key: //Incident key generated in the crash log

java.lang.RuntimeException: Unable to start activity ComponentInfo\{de.codenauts.hockeyapp/de.codenauts.hockeyapp.MainActivity\}: java.lang.NullPointerException
  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2787)
  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2803)
  at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4066)
  at android.app.ActivityThread.access$2400(ActivityThread.java:135)
  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2140)
  at android.os.Handler.dispatchMessage(Handler.java:99)
  at android.os.Looper.loop(Looper.java:144)
  ...

Этот пост предполагает, что поле date может быть неправильным, но я внес коррективы изДемо-код, поэтому я думаю, что все должно быть в порядке.

В этом посте также предлагается проверить поле версии.Версии, доступные в HockeyApp, как показано здесь, и я нацеливаюсь на версию 1.3: enter image description here

Я пробовал 1.3, 1.3(3), 3, но все непохоже, не работает.

Мой запрос POST возвращает statusCode из 201 созданного, поэтому я полагаю, что сетевой запрос выполнен успешно.Я что-то упустил?

РЕДАКТИРОВАТЬ: функция POST

Это функция POST, которую я использую для загрузки пользовательского отчета о сбое.

func postLog(filename: String) {
    let urlString = "https://rink.hockeyapp.net/api/2/apps/APP_ID/crashes/upload"
    guard let url = URL(string: urlString) else {return}

    guard let filepath = Bundle.main.url(forResource: filename, withExtension: nil) else {
        print("Filepath nil")
        return
    }

    let fileData = NSData(contentsOf: filepath)

    var request = URLRequest(url: url)
    request.httpMethod = "POST"
    let boundary = "Boundary-\(UUID().uuidString)"
    request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
    request.httpBody = createBody(parameters: [:], boundary: boundary, data: fileData! as Data, mimeType: "text/plain", filename: filename)

    let dataTask = session.dataTask(with: request) { (data, response, error) in
        if let error = error {
            print(error.localizedDescription)
            return
        }

        if let response = response {
            print(response)
        }
    }

    dataTask.resume()

}

1 Ответ

0 голосов
/ 09 мая 2019

После обращения в службу поддержки HockeyApp проблема была в функции createBody.

Параметр name должен быть log вместо file.

func createBody(parameters: [String: String],
                boundary: String,
                data: Data,
                mimeType: String,
                filename: String) -> Data {
    let body = NSMutableData()

    let boundaryPrefix = "--\(boundary)\r\n"

    for (key, value) in parameters {
        body.appendString(boundaryPrefix)
        body.appendString("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n")
        body.appendString("\(value)\r\n")
    }

    body.appendString(boundaryPrefix)

    //Problem was on this line, previously it was name=\"file\". After changing to log, it worked
    body.appendString("Content-Disposition: form-data; name=\"log\"; filename=\"\(filename)\"\r\n")

    body.appendString("Content-Type: \(mimeType)\r\n\r\n")
    body.append(data)
    body.appendString("\r\n")
    body.appendString("--".appending(boundary.appending("--")))

    return body as Data
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...