Coder Social home page Coder Social logo

afnetworkactivitylogger's Introduction

AFNetworkActivityLogger

AFNetworkActivityLogger is an extension for AFNetworking 3.0 that logs network requests as they are sent and received.

AFNetworkActivityLogger listens AFNetworkingTaskDidStartNotification and AFNetworkingTaskDidFinishNotification notifications, which are posted by AFNetworking as session tasks are started and finish. For further customization of logging output, users are encouraged to implement desired functionality by creating new objects that conform to AFNetworkActivityLoggerProtocol.

2.x -> 3.x Migration

3.0.0 featured the following breaking API changes:

  • The log level property is now found on the individual unique loggers, rather than the shared logger. This allows for more advanced customization options for logging level.
  • The filterPredicate property is now found on the individual unique loggers, rather than the shared logger. This allows for more advanced customization options for logging specific requests.

Usage

Add the following code to AppDelegate.m -application:didFinishLaunchingWithOptions::

[[AFNetworkActivityLogger sharedLogger] startLogging];

Now all NSURLSessionTask objects created by an AFURLSessionManager will have their request and response logged to the console, a la:

GET http://example.com/foo/bar.json
200 http://example.com/foo/bar.json [0.1860 s]

If the default logging level is too verbose—say, if you only want to know when requests fail—then changing it is as simple as:

[[AFNetworkActivityLogger sharedLogger] setLevel:AFLoggerLevelError];

Logging Levels

By default, the shared logger is configured with an AFNetworkActivityConsoleLogger with a debug level set to AFLoggerLevelInfo. To change the level, simply access the logger through the loggers property, and adjust the level. The following levels are provided:

  • AFLoggerLevelOff: Do not log requests or responses.
  • AFLoggerLevelDebug :Logs HTTP method, URL, header fields, & request body for requests, and status code, URL, header fields, response string, & elapsed time for responses.
  • AFLoggerLevelInfo: Logs HTTP method & URL for requests, and status code, URL, & elapsed time for responses.
  • AFLoggerLevelError: Logs HTTP method & URL for requests, and status code, URL, & elapsed time for responses, but only for failed requests.

Filtering Requests

To limit the requests that are logged by a unique logger, each object that conforms to AFNetworkActivityLoggerProtocol has a filterPredicate property. If the predicate returns true, the request will not be forwarded to the logger. For example, a custom file logger could be created that only logs requests for http://httpbin.org, while a console logger could be used to log all errors in the application.

AFNetworkActivityConsoleLogger *testLogger = [AFNetworkActivityConsoleLogger new];
NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(NSURLRequest *  _Nonnull request, NSDictionary<NSString *,id> * _Nullable bindings) {
    return !([[request URL] baseURL] isEqualToString:@"httpbin.org"])
}];
[testLogger setFilterPredicate:predicate];

Custom Loggers

By default, the shared logger is configured with an AFNetworkActivityConsoleLogger.

To create a custom logger, create a new object that conforms to AFNetworkActivityLoggerProtocol, and add it to the shared logger. Be sure and configure the proper default logging level.

License

AFNetworkActivityLogger is available under the MIT license. See the LICENSE file for more info.

afnetworkactivitylogger's People

Contributors

arlophoenix avatar dzenbot avatar fabiopelosin avatar ishchenkoandriy avatar mattt avatar rcarlsen avatar slaunchaman avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

afnetworkactivitylogger's Issues

Logger doesn't work well in AFHTTPSessionManager

I changed operation manager from AFHTTPRequestOperationManager to AFHTTPSessionManager.
In the case of AFHTTPRequestOperationManager, Logger worked well.
But, after changing, Logger doesn't output JSON response which APIServer return.
I'm sure that AFHTTPSessionManager is a subclass of AFURLSessionManager, so I expected that Logger did well.

AFNetworkActivityLogger embed nasted framework

Due to the Run Script carthage copy-frameworks the framework embed nasted framework which prevent from using it in application deployed in app store.

[Transporter Error Output]: ERROR ITMS-90205: "Invalid Bundle. The bundle at 'MyApp.app/Frameworks/AFNetworkActivityLogger.framework' contains disallowed nested bundles."
[Transporter Error Output]: ERROR ITMS-90206: "Invalid Bundle. The bundle at 'MyApp.app/Frameworks/AFNetworkActivityLogger.framework' contains disallowed file 'Frameworks'."

Dependency to AFNetworking 4.0.0

AFNetworking has been updated to 4.0.0 to replace UIWebView with WKWebView. Using current latest AFNetworkActivityLogger and AFNetworking (= 4.0.0) will have confict.

GET notification shown twice

Not sure if this is an issue or by design, but I see the log for GET twice in the log window, and the resulting log for '200' only once. By putting an NSLog I can see that sessionManager GET: parameters: success: is only called once.

Edit: this is on iOS7.x, on iOS6.1, GET is logged only once.

Set Logger to AFLoggerLevelDebug

For the v3.0.0 branch, is the documentation correct to change the logger level to debug?

XCode seems to say that setLogger doesn't exist. The docs say it does.
yet the docs also state at the top some other way to set the logger.

How to use the FilterPredicate ?

Hi,

How to use the FilterPredicate ?

I want discard everything with domains "abc.com" and "xyz.com".

Can anyone help me?

[AFNetworkActivityLogger sharedLogger].filterPredicate = ???

Latest Release 3.0.0 is not working with AFNetworking 3.1

Was using below hack to support AFNetworking 3.1, but is doesn't work anymore as 3.0.0 branch was merged 2 days ago!

pod 'AFNetworkActivityLogger', git: 'https://github.com/AFNetworking/AFNetworkActivityLogger.git', branch: '3_0_0'
Tried to fix it by doing
pod 'AFNetworkActivityLogger', '3.0.0'
but doesn't work..

Also tried to change podfile by removing the version but that is defaulting to AFNetworkingActivityLogger version 2.0.1 which starts throwing incompatibility errors.

App crash with version 3.0.0

Hi,
I'm with problem when I started the AFNetworkActivityLogger. When init the AFNetworkActivityConsoleLogger I received the message:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[AFNetworkActivityLogger loggers]: unrecognized selector sent to instance 0x7fd392e6d060'

My code is:

AFNetworkActivityConsoleLogger *logger = [AFNetworkActivityLogger sharedLogger].loggers.anyObject;
        logger.level = AFLoggerLevelDebug;
[[AFNetworkActivityLogger sharedLogger] addLogger:logger];   
[[AFNetworkActivityLogger sharedLogger] startLogging];

AFNetworkActivityLogger, source of deadlock?

I've been dealing with my app locking up when I make a lot of asynchronous remote requests. I'm using a combination of ReactiveCocoa and AFNetworking. For a week I've been trying to figure it out.

I've now traced it back to AFNetworkActivityLogger, I think at least, because when I comment it out, it doesn't deadlock anymore.

//[[AFNetworkActivityLogger sharedLogger] startLogging];

I'm using the latest version from cocoapods:
Using AFNetworkActivityLogger (2.0.4)

Here's what my stack trace looks like while my app is frozen and when I enable a symbolic breakpoint on __psynch_mutexwait

screen shot 2017-03-21 at 6 34 06 pm

Request body is nil

I am using the following code to form up a request, and then have the ActivityLogger set to debug level. When I send the request, the activity logger always shows the body as nil. Here is the code:

    NSMutableURLRequest *request = [self.requestSerializer multipartFormRequestWithMethod:@"PUT"
                                                                                URLString:urlString
                                                                               parameters:params
                                                                constructingBodyWithBlock: ^(id < AFMultipartFormData > formData) {
        [formData appendPartWithFileData:imageData name:@"upload"
                                fileName:[NSString stringWithFormat:@"%@.jpg", params[@"id"]] mimeType:@"image/jpeg"];
    } error:nil];

In the activity logger source, the body is always nil:

    NSString *body = nil;
    if ([request HTTPBody]) {
        body = [[NSString alloc] initWithData:[request HTTPBody] encoding:NSUTF8StringEncoding];
    }

The parameters are not null, and the image post completes successfully.
params

can't compile for Target version 6.0

fix:

  • (void)startLogging {
    [self stopLogging];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkRequestDidStart:) name:AFNetworkingOperationDidStartNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkRequestDidFinish:) name:AFNetworkingOperationDidFinishNotification object:nil];

if (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000) || (defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090)

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkRequestDidStart:) name:AFNetworkingTaskDidStartNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkRequestDidFinish:) name:AFNetworkingTaskDidFinishNotification object:nil];

endif

}

CocoaLumberjack

Hello,
Can you add CocoaLumberjack support for logging?
Thanks

TaskDidResume notification not working - AFNetworking 3.1

I found out that the AFNetworkingTaskDidResumeNotification is not posted by AFNetworking 3.1.0.
A short lookup showed me that there is however a notification with the following name instead:

static NSString * const AFNSURLSessionTaskDidResumeNotification = @"com.alamofire.networking.nsurlsessiontask.resume";

I think the ActivityLogger should therefore adapted to use this notification instead in AFNetworkActivityLogger.m:100.

Property with retain or strong attribute must be of object type

Im not being able to compile my project when i add AFNetworkActivityLogger. I double checked and the target is using iOS 7 SDK. What can be the issue with this?

app/Pods/AFNetworkActivityLogger/AFNetworkActivityLogger.m:24:
/Users/fmartin91/Development/loovin/loovin-invitation-app/Pods/AFNetworking/AFNetworking/AFURLConnectionOperation.h:186:1: error: property with 'retain (or strong)' attribute must be of object type
@property (nonatomic, strong) dispatch_queue_t completionQueue;
^
app/Pods/AFNetworking/AFNetworking/AFURLConnectionOperation.h:191:1: error: property with 'retain (or strong)' attribute must be of object type
@property (nonatomic, strong) dispatch_group_t completionGroup;
^
app/Pods/AFNetworkActivityLogger/AFNetworkActivityLogger.m:25:
/Users/fmartin91/Development/loovin/loovin-invitation-app/Pods/AFNetworking/AFNetworking/AFURLSessionManager.h:153:1: error: property with 'retain (or strong)' attribute must be of object type
@property (nonatomic, strong) dispatch_queue_t completionQueue;
^
app/Pods/AFNetworking/AFNetworking/AFURLSessionManager.h:158:1: error: property with 'retain (or strong)' attribute must be of object type
@property (nonatomic, strong) dispatch_group_t completionGroup;
^

Response body is null

I'm getting (null) instead of the response body with AFLoggerLevelDebug. There is definitely a JSON response from the server because I can read it from the responseObject object. Also "Content-Length" is 18. Maybe because of POST ?

2013-11-28 20:14:11.497 eHaj[3464:70b] -[AFNetworkActivityLogger networkRequestDidStart:] line 108 $ POST 'http://xxxxxxxxxxxx.com/api/something': {
    "Accept-Language" = "en;q=1, fr;q=0.9, de;q=0.8, zh-Hans;q=0.7, zh-Hant;q=0.6, ja;q=0.5";
    Application = xxxxxx;
    Authorization = "Token token=\"xxxxxxxxxxxxxx\"";
    "Content-Type" = "application/json; charset=utf-8";
    "User-Agent" = "eKesh/1 (iPhone Simulator; iOS 7.0.3; Scale/2.00)";
    Version = "1.0";
} {"deviceID":"xxxxxxxxx"}

2013-11-28 20:14:11.523 eHaj[3464:70b] -[AFNetworkActivityLogger networkRequestDidFinish:] line 158 $ 200 'http://xxxxxxxxxxxx.com/api/something' [0.0258 s]: {
    Connection = "Keep-Alive";
    "Content-Length" = 18;
    "Content-Type" = "application/json";
    Date = "Thu, 28 Nov 2013 19:12:37 GMT";
    "Keep-Alive" = "timeout=2, max=100";
    Server = "Apache/2.2.16 (Debian)";
    Status = 200;
    "X-Powered-By" = "PHP/5.4.20-1~dotdeb.0";
} (null)

Label basic HTTP Components

The logger logs a bunch of output, however it does not label the major portions of the request, leaving it up to guessing from the reader.

Example output:

{"key":"someKey","source":"something","q":"Klon Mofield - A Mo Mo","target":"th"}
iOSApplication[24702:4851073] POST 'https://translation.googleapis.com/language/translate/v2': {
"Accept-Language" = "en-US;q=1";
"Content-Type" = "application/json";
"User-Agent" = "iOSApplication"; }

For instance, taking the output above.

  1. If you're familiar with HTTP headers, it is obvious that the dictionary at the bottom are the headers. Unfortunately, this is not labeled and is just output as a dictionary preceded by a colon ":", which is not helpful.
  2. The dictionary in the front - who knows. These could be query parameters, or objects set in the request body, or this could even be the response body. Who knows what its logging! It doesn't tell us what its sending - it just outputs a bunch of dictionaries and leave the reader guessing.

A typical POST call can contain request query params, a request body, request headers, response headers, and a response body. If you're troubleshooting failed API calls, removing all ambiguity by labeling the logs would certainly add a lot of value to this library.

Error logging is broken

Currently in AFNetworking we have this:

- (void)finish {
    [self.lock lock];
    self.state = AFOperationFinishedState;
    [self.lock unlock];

    dispatch_async(dispatch_get_main_queue(), ^{
        [[NSNotificationCenter defaultCenter] postNotificationName:AFNetworkingOperationDidFinishNotification object:self];
    });
}

and this

    self.completionBlock = ^{
        if (self.completionGroup) {
            dispatch_group_enter(self.completionGroup);
        }

        dispatch_async(http_request_operation_processing_queue(), ^{
            if (self.error) {
                if (failure) {
                    dispatch_group_async(self.completionGroup ?: http_request_operation_completion_group(), self.completionQueue ?: dispatch_get_main_queue(), ^{
                        failure(self, self.error);
                    });
                }
            } else {
                id responseObject = self.responseObject;

                if (self.error) {
                    if (failure) {
                        dispatch_group_async(self.completionGroup ?: http_request_operation_completion_group(), self.completionQueue ?: dispatch_get_main_queue(), ^{
                            failure(self, self.error);
                        });
                    }
                } else {
                    if (success) {
                        dispatch_group_async(self.completionGroup ?: http_request_operation_completion_group(), self.completionQueue ?: dispatch_get_main_queue(), ^{
                            success(self, responseObject);
                        });
                    }
                }
            }

            if (self.completionGroup) {
                dispatch_group_leave(self.completionGroup);
            }
        });
    };

i.e. when operation is finished, NSOperation calls completion block which immediatedly dispatches async to http_request_operation_processing_queue(), so the AFNetworkingOperationDidFinishNotification is sent before an actual error is formed by this line: id responseObject = self.responseObject;


Demonstration

It is just AppDelegate.m - use it with any App having AFNetworking linked:

#import "AppDelegate.h"
#import <AFNetworking/AFNetworking.h>

static inline void runLoopIfNeeded() {
    // https://developer.apple.com/library/mac/#documentation/CoreFOundation/Reference/CFRunLoopRef/Reference/reference.html

    while (CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.1, YES) == kCFRunLoopRunHandledSource);
}

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    NSURLRequest *urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com/afnetworking"]];
    AFHTTPRequestOperation *requestOperation = [[AFHTTPRequestOperation alloc] initWithRequest:urlRequest];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkRequestDidFinish:) name:AFNetworkingOperationDidFinishNotification object:nil];

    [requestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"We are here because it's indeed a 404: %@", operation.error);
    }];

    [requestOperation start];

    runLoopIfNeeded();


    return YES;
}

- (void)networkRequestDidFinish:(NSNotification *)notification {
    NSLog(@"Wow! AFNetworking(AFNetworkingOperationDidFinishNotification phase) does not treat 404 response as error response: %@", [notification.object error]);
}

@end

gives the following output:

2014-03-25 16:58:57.255 AFNetworkingMeterApp[11085:907] Wow! AFNetworking(AFNetworkingOperationDidFinishNotification phase) does not treat 404 response as error response: (null)
2014-03-25 16:58:57.259 AFNetworkingMeterApp[11085:907] We are here because it's indeed a 404: Error Domain=AFNetworkingErrorDomain Code=-1011 "Request failed: not found (404)" UserInfo=0x768c600 {NSErrorFailingURLKey=http://www.google.com/afnetworking, AFNetworkingOperationFailingURLResponseErrorKey=<NSHTTPURLResponse: 0x79b22d0>, NSLocalizedDescription=Request failed: not found (404)}

Can't print 'Authenticate' content in request !!!

Response:
{ status code: 401, headers {
"Cache-Control" = private;
"Content-Language" = en;
"Content-Length" = 951;
"Content-Type" = "text/html;charset=utf-8";
Date = "Tue, 29 May 2018 07:32:43 GMT";
Expires = "Thu, 01 Jan 1970 08:00:00 CST";
Server = "Apache-Coyote/1.1";
"Www-Authenticate" = "Digest realm="My Realm", qop="auth", nonce="1527579163026:3643c85f69be9ac55a4a42d87fe69dab", opaque="A09625523209ADC9E967098F1F0C1491"";
} }

After above response, I can't print next Request content, include ‘Authenticate’!

This is deal Challenge code:
[self.sessionManager setSessionDidReceiveAuthenticationChallengeBlock:^NSURLSessionAuthChallengeDisposition(NSURLSession * _Nonnull session, NSURLAuthenticationChallenge * _Nonnull challenge, NSURLCredential *__autoreleasing _Nullable * _Nullable credential) {
*credential = [[NSURLCredential alloc] initWithUser:@"tomcat" password:@"tomcat" persistence:NSURLCredentialPersistenceForSession];
return NSURLSessionAuthChallengeUseCredential;
}];
[self.sessionManager setTaskDidReceiveAuthenticationChallengeBlock:^NSURLSessionAuthChallengeDisposition(NSURLSession * _Nonnull session, NSURLSessionTask * _Nonnull task, NSURLAuthenticationChallenge * _Nonnull challenge, NSURLCredential *__autoreleasing _Nullable * _Nullable credential) {
*credential = [[NSURLCredential alloc] initWithUser:@"tomcat" password:@"tomcat" persistence:NSURLCredentialPersistenceForSession];
return NSURLSessionAuthChallengeUseCredential;
}];
image

[Xcode 7beta6] build issue

Hi,
This is my pod file :
platform :ios, '8.0'
use_frameworks!
pod 'AFNetworkActivityLogger', '2.0.4'

This is build fail result :
ld: embedded dylibs/frameworks are only supported on iOS 8.0 and later (@rpath/AFNetworkActivityLogger.framework/AFNetworkActivityLogger) for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Can you help ?
Thanks

carthage

how to use carthage?

when I have add github "AFNetworking/AFNetworkActivityLogger" "3_0_0" in mine carthage file
then run carthage update in the command get this error

The following build commands failed:
PhaseScriptExecution Run\ Script /Users/lizhihui/Library/Developer/Xcode/DerivedData/AFNetworkActivityLogger-ggidisnayfprzedgumpirqxiaxzz/Build/Intermediates/AFNetworkActivityLogger.build/Release-iphoneos/AFNetworkActivityLogger\ iOS.build/Script-29D96E771BCC36E700F571A5.sh
(1 failure)

Carthage for 3_0_0 branch

May i know why i cant get the 3_0_0 branch by carthage?
I am importing it by the cartfile adding
github "AFNetworking/AFNetworkActivityLogger" "3_0_0"

but the below error found
The following build commands failed:
PhaseScriptExecution Run\ Script /Users/kt/Library/Developer/Xcode/DerivedData/AFNetworkActivityLogger-helhhbodwgykeqcmbxpfeotwtokk/Build/Intermediates/AFNetworkActivityLogger.build/Release-iphoneos/AFNetworkActivityLogger\ iOS.build/Script-29D96E771BCC36E700F571A5.sh
(1 failure)

The branch should be here but cannot get it ?
Is there any mistake in my cartfile?
Many thanks!

HTTPMessage::ensureParserFinished() + 108 (HTTPMessage.cpp:418)

Thread 0 name:
Thread 0 Crashed:
0 libsystem_platform.dylib 0x0000000182c25e60 _os_unfair_lock_unowned_abort + 36 (lock.c:514)
1 libsystem_platform.dylib 0x0000000182c26d34 _os_unfair_lock_unlock_slow + 144 (lock.c:587)
2 libsystem_malloc.dylib 0x0000000182ad9fc8 free_tiny_botch + 56 (locking.h:63)
3 CFNetwork 0x000000018365a5a8 HTTPMessage::ensureParserFinished() + 108 (HTTPMessage.cpp:418)
4 CFNetwork 0x000000018365b6c0 HTTPMessage::copyBody() + 20 (HTTPMessage.cpp:465)
5 CFNetwork 0x0000000183775040 -[NSURLRequest(NSHTTPURLRequest) HTTPBody] + 36 (NSURLRequest.mm:695)
6 SydneyToday 0x0000000100e6649c -[AFNetworkActivityConsoleLogger URLSessionTaskDidStart:] + 72 (AFNetworkActivityConsoleLogger.m:43)
7 SydneyToday 0x0000000100e670d4 -[AFNetworkActivityLogger networkRequestDidStart:] + 492 (AFNetworkActivityLogger.m:122)
8 CoreFoundation 0x0000000182f98c3c CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER + 20 (CFNotificationCenter.c:662)
9 CoreFoundation 0x0000000182f981b8 _CFXRegistrationPost + 428 (CFNotificationCenter.c:163)
10 CoreFoundation 0x0000000182f97f14 ___CFXNotificationPost_block_invoke + 216 (CFNotificationCenter.c:1075)
11 CoreFoundation 0x000000018301584c -[_CFXNotificationRegistrar find:object:observer:enumerator:] + 1408 (CFXNotificationRegistrar.m:170)
12 CoreFoundation 0x0000000182ecef38 _CFXNotificationPost + 384 (CFNotificationCenter.c:1065)
13 Foundation 0x000000018393fbbc -[NSNotificationCenter postNotificationName:object:userInfo:] + 68 (NSNotification.m:543)
14 SydneyToday 0x0000000100e7e3c8 __37-[AFURLSessionManager taskDidResume:]_block_invoke + 72 (AFURLSessionManager.m:573)
15 libdispatch.dylib 0x00000001828f8b24 _dispatch_call_block_and_release + 24 (init.c:994)
16 libdispatch.dylib 0x00000001828f8ae4 _dispatch_client_callout + 16 (object.m:507)
17 libdispatch.dylib 0x00000001829056e0 _dispatch_main_queue_callback_4CF$VARIANT$mp + 1012 (inline_internal.h:2500)
18 CoreFoundation 0x0000000182faf070 CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE + 12 (CFRunLoop.c:1815)
19 CoreFoundation 0x0000000182facbc8 __CFRunLoopRun + 2272 (CFRunLoop.c:3111)
20 CoreFoundation 0x0000000182eccda8 CFRunLoopRunSpecific + 552 (CFRunLoop.c:3245)
21 GraphicsServices 0x0000000184eaf020 GSEventRunModal + 100 (GSEvent.c:2245)
22 UIKit 0x000000018cead78c UIApplicationMain + 236 (UIApplication.m:3965)
23 SydneyToday 0x00000001007b47f4 main + 88 (main.m:14)
24 libdyld.dylib 0x000000018295dfc0 start + 4

设置环境 iPhone 7 11.3.1 (15E302) 崩溃软件监控的 在本地暂时未复现,请求怎么处理
AFNetworkActivityConsoleLogger 使用的是3.0.0.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.