33 Commits

Author SHA1 Message Date
Leo Vandriel c91a8e08c4 Merge pull request #62 from ClementPadovani/hotfix/make_plain_text_great_again
Removed all notions of rich text and disabled “smart” additions
2018-01-26 12:52:31 -08:00
Clément Padovani 6a8a48dfd9 Removed all notions of rich text and disabled “smart” additions 2017-12-30 20:50:11 +01:00
Leo 5b46a5c6de add certificate type to description 2017-04-26 11:06:32 -07:00
Leo a854649e09 bump version 2017-04-25 15:27:20 -07:00
Leo 36de866909 update changelog 2017-04-25 15:27:14 -07:00
Leo Vandriel 9371147fd1 Add support for new certificate type (passes) 2017-04-25 13:59:17 -07:00
Leonard van Driel 60288f8454 Merge pull request #49 from ClementPadovani/hotfix/rich_text_copy_paste
Disabled rich text.
2017-04-04 10:07:37 -07:00
Clément Padovani 5b4a2e5e94 Disabled rich text. 2017-04-01 13:07:33 +02:00
Leo Vandriel 2d1b534f4d fix app name in menu, issue #47 2017-03-20 11:43:42 -07:00
Leo Vandriel 26d42ca585 add docs pushing to macOS (issue by dylib) 2017-03-13 15:22:49 -07:00
Leo Vandriel 900b107dc0 bump version 2017-01-16 12:53:03 -08:00
Leo Vandriel 65738cad39 add support for ssl handshake internal error 2017-01-16 12:43:47 -08:00
Leo Vandriel ff5768048c add detection for p12 without password 2017-01-16 12:24:29 -08:00
Leonard van Driel 9b6770afe1 Merge pull request #35 from JanC/fix_umbrella_header
Fixed missing umbrella header
2016-12-04 11:29:20 -08:00
Jan Chaloupecky b4c0e1e72b Fixed missing umbrella header 2016-11-09 16:32:56 +01:00
Leo Vandriel 5bab81d099 add firewall info in readme 2016-09-26 09:16:50 -07:00
Leo Vandriel 3622125a62 bump version 2016-09-19 11:21:28 -07:00
Leo Vandriel 4850bfbb38 update touch project 2016-09-19 10:56:35 -07:00
Leo Vandriel 9dd461a972 add support for unknown certificate error 2016-09-19 10:55:14 -07:00
Leo Vandriel 0469f7ae05 update changelog
\ 2016-09-19 10:40:40 -07:00
Leonard van Driel fc18d96ff4 Merge pull request #24 from DanielFontes/master
Add support for WatchKit certificates
2016-09-19 10:38:25 -07:00
Leonard van Driel bd5d2e80f5 Merge pull request #25 from ReadmeCritic/master
Update README URLs based on HTTP redirects
2016-08-23 11:05:43 -07:00
ReadmeCritic bdbeb1be5f Update README URLs based on HTTP redirects 2016-08-08 08:40:57 -07:00
Daniel Fontes d0868e486c Add support for WatchKit certificates 2016-08-05 15:22:09 +02:00
Leo Vandriel 766aee9700 bump version 2016-07-19 16:12:41 -07:00
Leonard van Driel 8c4e208eda Merge pull request #23 from zats/master
Update readme
2016-07-18 15:52:35 -07:00
Sash Zats 9325a4ac64 Update README.md 2016-07-18 15:10:42 -07:00
Sash Zats bee2611e60 Update README.md 2016-07-18 15:09:39 -07:00
Leonard van Driel e638a42547 Merge pull request #22 from zats/master
Extract OS X and iOS frameworks to allow modularity
2016-07-18 14:52:28 -07:00
Sash Zats a8c6176b04 Add shared schemes 2016-07-17 16:22:08 -07:00
Sash Zats b5d1acba22 Extract functionality into corresponding frameworks 2016-07-17 16:17:10 -07:00
Leo Vandriel 7474d4fba4 bump version 2016-04-27 13:52:13 -07:00
Leo Vandriel 9570efd717 remove mac enum from touch target 2016-04-27 13:52:00 -07:00
20 changed files with 940 additions and 102 deletions
+27
View File
@@ -3,6 +3,33 @@ Change Log
### master (unreleased)
* add certificate type to description
### 0.7.5 (2017-04-25)
* Add support for new certificate type (passes)
* Fix rich text (#49)
* Fix app name (#47)
* Update docs pushing to macOS
### 0.7.4 (2017-01-16)
* Add support for handshake error (internal error)
* Add detection of p12 without password
### 0.7.3 (2016-09-19)
* Add support for Watch Kit certificates (DanielFontes)
* Add support for handshake error (certificate unknown)
### 0.7.2 (2016-07-19)
* Added support for Carthage, thanks to @zats
### 0.7.1 (2016-04-27)
* Remove Mac enum from Touch target
### 0.7.0 (2016-01-07)
* Add support for simplified certificates (pull request by 666tos)
+4
View File
@@ -142,7 +142,11 @@ OSStatus NWSSLWrite(SSLConnectionRef connection, const void *data, size_t *lengt
case errSSLServerAuthCompleted: return [NWErrorUtil noWithErrorCode:kNWErrorSSLHandshakeServerAuthCompleted error:error];
case errSSLPeerCertExpired: return [NWErrorUtil noWithErrorCode:kNWErrorSSLHandshakePeerCertExpired error:error];
case errSSLPeerCertRevoked: return [NWErrorUtil noWithErrorCode:kNWErrorSSLHandshakePeerCertRevoked error:error];
case errSSLPeerCertUnknown: return [NWErrorUtil noWithErrorCode:kNWErrorSSLHandshakePeerCertUnknown error:error];
case errSSLInternal: return [NWErrorUtil noWithErrorCode:kNWErrorSSLHandshakeInternalError error:error];
#if !TARGET_OS_IPHONE
case errSecInDarkWake: return [NWErrorUtil noWithErrorCode:kNWErrorSSLInDarkWake error:error];
#endif
case errSSLClosedAbort: return [NWErrorUtil noWithErrorCode:kNWErrorSSLHandshakeClosedAbort error:error];
}
return [NWErrorUtil noWithErrorCode:kNWErrorSSLHandshakeFail reason:status error:error];
+3
View File
@@ -43,6 +43,9 @@
/** @name Inspection */
/** Extracts the type and summary string. */
+ (NWCertType)typeWithCertificate:(NWCertificateRef)certificate summary:(NSString **)summary;
/** Extracts the summary string. */
+ (NSString *)summaryWithCertificate:(NWCertificateRef)certificate;
+11 -25
View File
@@ -7,29 +7,6 @@
#import "NWSecTools.h"
/** Types of push certificates. */
typedef NS_ENUM(NSInteger, NWCertType) {
/** None. */
kNWCertTypeNone = 0,
/** iOS Development. */
kNWCertTypeIOSDevelopment = 1,
/** iOS Production. */
kNWCertTypeIOSProduction = 2,
/** OS X Development. */
kNWCertTypeMacDevelopment = 3,
/** OS X Production. */
kNWCertTypeMacProduction = 4,
/** Simplified Certificate Handling. */
kNWCertTypeSimplified = 5,
/** Web Push Production. */
kNWCertTypeWebProduction = 6,
/** VoIP Services. */
kNWCertTypeVoIPServices = 7,
/** Unknown. */
kNWCertTypeUnknown = 8,
};
@implementation NWSecTools
#pragma mark - Initialization
@@ -136,6 +113,8 @@ typedef NS_ENUM(NSInteger, NWCertType) {
case kNWCertTypeSimplified:
case kNWCertTypeWebProduction:
case kNWCertTypeVoIPServices:
case kNWCertTypeWatchKitServices:
case kNWCertTypePasses:
return NWEnvironmentOptionAny;
case kNWCertTypeNone:
case kNWCertTypeUnknown:
@@ -154,6 +133,8 @@ typedef NS_ENUM(NSInteger, NWCertType) {
case kNWCertTypeSimplified:
case kNWCertTypeWebProduction:
case kNWCertTypeVoIPServices:
case kNWCertTypeWatchKitServices:
case kNWCertTypePasses:
return YES;
case kNWCertTypeNone:
case kNWCertTypeUnknown:
@@ -172,6 +153,8 @@ typedef NS_ENUM(NSInteger, NWCertType) {
case kNWCertTypeSimplified: return @"Apple Push Services: ";
case kNWCertTypeWebProduction: return @"Website Push ID: ";
case kNWCertTypeVoIPServices: return @"VoIP Services: ";
case kNWCertTypeWatchKitServices: return @"WatchKit Services: ";
case kNWCertTypePasses: return @"Pass Type ID: ";
case kNWCertTypeNone:
case kNWCertTypeUnknown:
break;
@@ -244,7 +227,7 @@ typedef NS_ENUM(NSInteger, NWCertType) {
+ (NSArray *)allIdentitiesWithPKCS12Data:(NSData *)data password:(NSString *)password error:(NSError *__autoreleasing *)error
{
NSDictionary *options = @{(__bridge id)kSecImportExportPassphrase: password};
NSDictionary *options = password ? @{(__bridge id)kSecImportExportPassphrase: password} : @{};
CFArrayRef items = NULL;
OSStatus status = data ? SecPKCS12Import((__bridge CFDataRef)data, (__bridge CFDictionaryRef)options, &items) : errSecParam;
NSArray *dicts = CFBridgingRelease(items);
@@ -254,6 +237,7 @@ typedef NS_ENUM(NSInteger, NWCertType) {
case errSecAuthFailed: return [NWErrorUtil nilWithErrorCode:kNWErrorPKCS12AuthFailed error:error];
#if !TARGET_OS_IPHONE
case errSecPkcs12VerifyFailure: return [NWErrorUtil nilWithErrorCode:kNWErrorPKCS12Password error:error];
case errSecPassphraseRequired: return [NWErrorUtil nilWithErrorCode:kNWErrorPKCS12PasswordRequired error:error];
#endif
}
return [NWErrorUtil nilWithErrorCode:kNWErrorPKCS12Import reason:status error:error];
@@ -339,11 +323,13 @@ typedef NS_ENUM(NSInteger, NWCertType) {
case kNWCertTypeSimplified:
case kNWCertTypeWebProduction:
case kNWCertTypeVoIPServices:
case kNWCertTypeWatchKitServices:
case kNWCertTypePasses:
case kNWCertTypeNone:
case kNWCertTypeUnknown:
break;
}
return NWEnvironmentOptionNone;
return NWEnvironmentNone;
}
@end
+33
View File
@@ -17,6 +17,32 @@ typedef NS_ENUM(NSInteger, NWNotificationType) {
kNWNotificationType2 = 2,
};
/** Types of push certificates. */
typedef NS_ENUM(NSInteger, NWCertType) {
/** None. */
kNWCertTypeNone = 0,
/** iOS Development. */
kNWCertTypeIOSDevelopment = 1,
/** iOS Production. */
kNWCertTypeIOSProduction = 2,
/** OS X Development. */
kNWCertTypeMacDevelopment = 3,
/** OS X Production. */
kNWCertTypeMacProduction = 4,
/** Simplified Certificate Handling. */
kNWCertTypeSimplified = 5,
/** Web Push Production. */
kNWCertTypeWebProduction = 6,
/** VoIP Services. */
kNWCertTypeVoIPServices = 7,
/** WatchKit Services. */
kNWCertTypeWatchKitServices = 8,
/** Pass Type ID. */
kNWCertTypePasses = 9,
/** Unknown. */
kNWCertTypeUnknown = 10,
};
/** An ARC-friendly replacement of SecIdentityRef. */
typedef id NWIdentityRef;
@@ -109,6 +135,10 @@ typedef NS_ENUM(NSInteger, NWError) {
kNWErrorSSLHandshakePeerCertExpired = -229,
/** SSL handshake certificate revoked. */
kNWErrorSSLHandshakePeerCertRevoked = -230,
/** SSL handshake certificate unknown. */
kNWErrorSSLHandshakePeerCertUnknown = -233,
/** SSL handshake internal error. */
kNWErrorSSLHandshakeInternalError = -234,
/** SSL handshake in dark wake. */
kNWErrorSSLInDarkWake = -231,
/** SSL handshake connection closed via error. */
@@ -149,6 +179,8 @@ typedef NS_ENUM(NSInteger, NWError) {
kNWErrorPKCS12AuthFailed = -312,
/** PKCS12 data wrong password. */
kNWErrorPKCS12Password = -313,
/** PKCS12 data password required. */
kNWErrorPKCS12PasswordRequired = -314,
/** PKCS12 data contains no identities. */
kNWErrorPKCS12NoItems = -307,
/** PKCS12 data contains multiple identities. */
@@ -187,6 +219,7 @@ extern NSString * const NWErrorReasonCodeKey;
/** Returns string for given environment, for logging purposes */
NSString * descriptionForEnvironentOptions(NWEnvironmentOptions environmentOptions);
NSString * descriptionForEnvironent(NWEnvironment environment);
NSString * descriptionForCertType(NWCertType type);
@interface NWErrorUtil : NSObject
+21
View File
@@ -31,6 +31,24 @@ NSString * descriptionForEnvironent(NWEnvironment environment)
return nil;
}
NSString * descriptionForCertType(NWCertType type)
{
switch (type) {
case kNWCertTypeNone: return @"none";
case kNWCertTypeIOSDevelopment:
case kNWCertTypeIOSProduction: return @"iOS";
case kNWCertTypeMacDevelopment:
case kNWCertTypeMacProduction: return @"macOS";
case kNWCertTypeSimplified: return @"All";
case kNWCertTypeWebProduction: return @"Website";
case kNWCertTypeVoIPServices: return @"VoIP";
case kNWCertTypeWatchKitServices: return @"WatchKit";
case kNWCertTypePasses: return @"Pass";
case kNWCertTypeUnknown: return @"unknown";
}
return nil;
}
@implementation NWErrorUtil
+ (NSString *)stringWithCode:(NWError)code
@@ -79,6 +97,8 @@ NSString * descriptionForEnvironent(NWEnvironment environment)
case kNWErrorSSLHandshakeServerAuthCompleted : return @"SSL handshake auth interrupted";
case kNWErrorSSLHandshakePeerCertExpired : return @"SSL handshake certificate expired";
case kNWErrorSSLHandshakePeerCertRevoked : return @"SSL handshake certificate revoked";
case kNWErrorSSLHandshakePeerCertUnknown : return @"SSL handshake certificate unknown";
case kNWErrorSSLHandshakeInternalError : return @"SSL handshake internal error";
case kNWErrorSSLInDarkWake : return @"SSL handshake in dark wake";
case kNWErrorSSLHandshakeClosedAbort : return @"SSL handshake connection closed via error";
case kNWErrorSSLHandshakeTimeout : return @"SSL handshake timeout";
@@ -101,6 +121,7 @@ NSString * descriptionForEnvironent(NWEnvironment environment)
case kNWErrorPKCS12Decode : return @"PKCS12 data cannot be read or is malformed";
case kNWErrorPKCS12AuthFailed : return @"PKCS12 data password incorrect";
case kNWErrorPKCS12Password : return @"PKCS12 data wrong password";
case kNWErrorPKCS12PasswordRequired : return @"PKCS12 data password required";
case kNWErrorPKCS12NoItems : return @"PKCS12 data contains no identities";
case kNWErrorPKCS12MultipleItems : return @"PKCS12 data contains multiple identities";
+19 -19
View File
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="6254" systemVersion="14C109" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="13771" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="6254"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="13771"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner">
@@ -63,7 +64,7 @@
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="kCx-OE-vgT"/>
<menuItem title="Quit NewApplication" keyEquivalent="q" id="4sb-4s-VLi">
<menuItem title="Pusher" keyEquivalent="q" id="4sb-4s-VLi">
<connections>
<action selector="terminate:" target="-1" id="Te7-pn-YzF"/>
</connections>
@@ -158,7 +159,7 @@
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
<rect key="contentRect" x="196" y="240" width="600" height="300"/>
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1417"/>
<rect key="screenRect" x="0.0" y="0.0" width="1920" height="1177"/>
<value key="minSize" type="size" width="500" height="200"/>
<view key="contentView" id="se5-gp-TjO">
<rect key="frame" x="0.0" y="0.0" width="600" height="300"/>
@@ -232,7 +233,7 @@
</popUpButtonCell>
</popUpButton>
<segmentedControl verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="EnU-aP-5PD">
<rect key="frame" x="461" y="177" width="121" height="24"/>
<rect key="frame" x="456" y="177" width="126" height="24"/>
<segmentedCell key="cell" borderStyle="border" alignment="left" style="rounded" trackingMode="selectOne" id="Olm-G5-Man">
<font key="font" metaFont="system"/>
<segments>
@@ -268,11 +269,11 @@
<scrollView horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Q6j-iu-9I9">
<rect key="frame" x="20" y="45" width="560" height="130"/>
<clipView key="contentView" id="e4e-ov-ymY">
<rect key="frame" x="1" y="1" width="558" height="150"/>
<rect key="frame" x="1" y="1" width="558" height="128"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textView importsGraphics="NO" findStyle="panel" continuousSpellChecking="YES" allowsUndo="YES" usesRuler="YES" usesFontPanel="YES" verticallyResizable="YES" allowsNonContiguousLayout="YES" quoteSubstitution="YES" dashSubstitution="YES" spellingCorrection="YES" smartInsertDelete="YES" id="ad5-lb-L5u">
<rect key="frame" x="0.0" y="0.0" width="558" height="150"/>
<textView importsGraphics="NO" richText="NO" verticallyResizable="YES" findStyle="panel" allowsCharacterPickerTouchBarItem="NO" allowsUndo="YES" allowsNonContiguousLayout="YES" textCompletion="NO" id="ad5-lb-L5u">
<rect key="frame" x="0.0" y="0.0" width="558" height="128"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<size key="minSize" width="558" height="128"/>
@@ -286,8 +287,9 @@
</fragment>
</attributedString>
<color key="insertionPointColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
<size key="minSize" width="558" height="128"/>
<size key="maxSize" width="573" height="10000000"/>
<allowedInputSourceLocales>
<string>NSAllRomanInputSourcesLocaleIdentifier</string>
</allowedInputSourceLocales>
<connections>
<outlet property="delegate" destination="kaW-YJ-UA5" id="bUh-Oq-w5B"/>
</connections>
@@ -300,7 +302,7 @@
<autoresizingMask key="autoresizingMask"/>
</scroller>
<scroller key="verticalScroller" verticalHuggingPriority="750" doubleValue="1" horizontal="NO" id="sbz-Qw-fOe">
<rect key="frame" x="543" y="1" width="16" height="150"/>
<rect key="frame" x="543" y="1" width="16" height="128"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
</scrollView>
@@ -318,18 +320,16 @@
<scrollView hidden="YES" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="z4n-XE-cfI">
<rect key="frame" x="20" y="45" width="560" height="130"/>
<clipView key="contentView" id="uaF-sl-etn">
<rect key="frame" x="1" y="1" width="558" height="150"/>
<rect key="frame" x="1" y="1" width="558" height="128"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textView importsGraphics="NO" findStyle="panel" continuousSpellChecking="YES" allowsUndo="YES" usesRuler="YES" usesFontPanel="YES" verticallyResizable="YES" allowsNonContiguousLayout="YES" quoteSubstitution="YES" dashSubstitution="YES" spellingCorrection="YES" smartInsertDelete="YES" id="pi6-RR-ayT">
<rect key="frame" x="0.0" y="0.0" width="558" height="150"/>
<textView importsGraphics="NO" richText="NO" verticallyResizable="YES" usesFontPanel="YES" findStyle="panel" continuousSpellChecking="YES" allowsUndo="YES" usesRuler="YES" allowsNonContiguousLayout="YES" quoteSubstitution="YES" dashSubstitution="YES" spellingCorrection="YES" smartInsertDelete="YES" id="pi6-RR-ayT">
<rect key="frame" x="0.0" y="0.0" width="558" height="128"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" name="windowBackgroundColor" catalog="System" colorSpace="catalog"/>
<size key="minSize" width="558" height="128"/>
<size key="maxSize" width="573" height="10000000"/>
<color key="insertionPointColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
<size key="minSize" width="558" height="128"/>
<size key="maxSize" width="573" height="10000000"/>
</textView>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
@@ -339,12 +339,12 @@
<autoresizingMask key="autoresizingMask"/>
</scroller>
<scroller key="verticalScroller" verticalHuggingPriority="750" doubleValue="1" horizontal="NO" id="pny-Of-exT">
<rect key="frame" x="543" y="1" width="16" height="150"/>
<rect key="frame" x="543" y="1" width="16" height="128"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
</scrollView>
<button translatesAutoresizingMaskIntoConstraints="NO" id="hU6-Ym-KR3">
<rect key="frame" x="18" y="235" width="228" height="18"/>
<rect key="frame" x="18" y="235" width="223" height="18"/>
<buttonCell key="cell" type="check" title="Should use sandbox environment" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="ros-Zj-bni">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
+9 -9
View File
@@ -6,12 +6,7 @@
//
#import "NWAppDelegate.h"
#import "NWHub.h"
#import "NWNotification.h"
#import "NWSecTools.h"
#import "NWLCore.h"
#import "NWPushFeedback.h"
#import <PusherKit/PusherKit.h>
@interface NWAppDelegate () <NWHubDelegate> @end
@@ -175,11 +170,13 @@
NWCertificateRef certificate = pair[0];
BOOL hasIdentity = (pair[1] != NSNull.null);
NWEnvironmentOptions environmentOptions = [NWSecTools environmentOptionsForCertificate:certificate];
NSString *summary = [NWSecTools summaryWithCertificate:certificate];
NSString *summary = nil;
NWCertType certType = [NWSecTools typeWithCertificate:certificate summary:&summary];
NSString *type = descriptionForCertType(certType);
NSDate *date = [NWSecTools expirationWithCertificate:certificate];
NSString *expire = [NSString stringWithFormat:@" [%@]", date ? [formatter stringFromDate:date] : @"expired"];
// summary = @"com.example.app";
[_certificatePopup addItemWithTitle:[NSString stringWithFormat:@"%@%@ (%@)%@%@", hasIdentity ? @"imported: " : @"", summary, descriptionForEnvironentOptions(environmentOptions), expire, suffix]];
[_certificatePopup addItemWithTitle:[NSString stringWithFormat:@"%@%@ (%@ %@)%@%@", hasIdentity ? @"imported: " : @"", summary, type, descriptionForEnvironentOptions(environmentOptions), expire, suffix]];
[suffix appendString:@" "];
}
[_certificatePopup addItemWithTitle:@"Import PKCS #12 file (.p12)..."];
@@ -211,6 +208,9 @@
NSData *data = [NSData dataWithContentsOfURL:url];
NSError *error = nil;
NSArray *ids = [NWSecTools identitiesWithPKCS12Data:data password:password error:&error];
if (!ids && password.length == 0 && error.code == kNWErrorPKCS12Password) {
ids = [NWSecTools identitiesWithPKCS12Data:data password:nil error:&error];
}
if (!ids) {
NWLogWarn(@"Unable to read p12 file: %@", error.localizedDescription);
return;
@@ -410,7 +410,7 @@
if (read) {
if (!failed) NWLogInfo(@"Payload has been pushed");
} else {
NWLogWarn(@"Unable to read failed: %@", error.localizedDescription);
NWLogWarn(@"Unable to read: %@", error.localizedDescription);
}
[_hub trimIdentifiers];
});
+2 -2
View File
@@ -17,11 +17,11 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>0.7.0</string>
<string>0.7.5</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>15</string>
<string>19</string>
<key>LSApplicationCategoryType</key>
<string>public.app-category.developer-tools</string>
<key>LSMinimumSystemVersion</key>
+1 -1
View File
@@ -1,6 +1,6 @@
Pod::Spec.new do |s|
s.name = 'NWPusher'
s.version = '0.7.0'
s.version = '0.7.5'
s.summary = 'OS X and iOS application and framework to play with the Apple Push Notification service (APNs).'
s.homepage = 'https://github.com/noodlewerk/NWPusher'
s.license = { :type => 'BSD', :file => 'LICENSE.txt' }
+499 -35
View File
@@ -7,9 +7,45 @@
objects = {
/* Begin PBXBuildFile section */
5C7803881D3C4668002107FB /* PusherKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C7803861D3C4668002107FB /* PusherKit.h */; settings = {ATTRIBUTES = (Public, ); }; };
5C78038B1D3C4668002107FB /* PusherKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C7803841D3C4668002107FB /* PusherKit.framework */; };
5C78038C1D3C4668002107FB /* PusherKit.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 5C7803841D3C4668002107FB /* PusherKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
5C7803911D3C4683002107FB /* NWHub.m in Sources */ = {isa = PBXBuildFile; fileRef = B3F232A1189682D30043DA98 /* NWHub.m */; };
5C7803921D3C4683002107FB /* NWNotification.m in Sources */ = {isa = PBXBuildFile; fileRef = B3F232A3189682D30043DA98 /* NWNotification.m */; };
5C7803931D3C4683002107FB /* NWPusher.m in Sources */ = {isa = PBXBuildFile; fileRef = B3F232A5189682D30043DA98 /* NWPusher.m */; };
5C7803941D3C4683002107FB /* NWPushFeedback.m in Sources */ = {isa = PBXBuildFile; fileRef = B3F232A7189682D30043DA98 /* NWPushFeedback.m */; };
5C7803951D3C4683002107FB /* NWSecTools.m in Sources */ = {isa = PBXBuildFile; fileRef = B3F232A9189682D30043DA98 /* NWSecTools.m */; };
5C7803961D3C4683002107FB /* NWSSLConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = B3F232AB189682D30043DA98 /* NWSSLConnection.m */; };
5C7803971D3C4683002107FB /* NWType.m in Sources */ = {isa = PBXBuildFile; fileRef = B34BF1B318DDF401004BA9F7 /* NWType.m */; };
5C7803981D3C4698002107FB /* NWLCore.c in Sources */ = {isa = PBXBuildFile; fileRef = B3376A61172BB71200242EBB /* NWLCore.c */; };
5C7803991D3C4749002107FB /* NWHub.h in Headers */ = {isa = PBXBuildFile; fileRef = B3F232A0189682D30043DA98 /* NWHub.h */; settings = {ATTRIBUTES = (Public, ); }; };
5C78039A1D3C4749002107FB /* NWNotification.h in Headers */ = {isa = PBXBuildFile; fileRef = B3F232A2189682D30043DA98 /* NWNotification.h */; settings = {ATTRIBUTES = (Public, ); }; };
5C78039B1D3C4749002107FB /* NWPusher.h in Headers */ = {isa = PBXBuildFile; fileRef = B3F232A4189682D30043DA98 /* NWPusher.h */; settings = {ATTRIBUTES = (Public, ); }; };
5C78039C1D3C4749002107FB /* NWPushFeedback.h in Headers */ = {isa = PBXBuildFile; fileRef = B3F232A6189682D30043DA98 /* NWPushFeedback.h */; settings = {ATTRIBUTES = (Public, ); }; };
5C78039D1D3C4749002107FB /* NWSecTools.h in Headers */ = {isa = PBXBuildFile; fileRef = B3F232A8189682D30043DA98 /* NWSecTools.h */; settings = {ATTRIBUTES = (Public, ); }; };
5C78039E1D3C4749002107FB /* NWSSLConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = B3F232AA189682D30043DA98 /* NWSSLConnection.h */; settings = {ATTRIBUTES = (Public, ); }; };
5C78039F1D3C4749002107FB /* NWType.h in Headers */ = {isa = PBXBuildFile; fileRef = B34BF1B218DDF401004BA9F7 /* NWType.h */; settings = {ATTRIBUTES = (Public, ); }; };
5C7803A01D3C4749002107FB /* NWLCore.h in Headers */ = {isa = PBXBuildFile; fileRef = B3376A62172BB71200242EBB /* NWLCore.h */; settings = {ATTRIBUTES = (Public, ); }; };
5C7803AA1D3C4826002107FB /* PusherKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C7803A81D3C4826002107FB /* PusherKit.h */; settings = {ATTRIBUTES = (Public, ); }; };
5C7803AD1D3C4826002107FB /* PusherKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C7803A61D3C4826002107FB /* PusherKit.framework */; };
5C7803AF1D3C4826002107FB /* PusherKit.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 5C7803A61D3C4826002107FB /* PusherKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
5C7803B31D3C486F002107FB /* NWLCore.c in Sources */ = {isa = PBXBuildFile; fileRef = B3376A61172BB71200242EBB /* NWLCore.c */; };
5C7803B41D3C487B002107FB /* NWHub.m in Sources */ = {isa = PBXBuildFile; fileRef = B3F232A1189682D30043DA98 /* NWHub.m */; };
5C7803B51D3C487B002107FB /* NWNotification.m in Sources */ = {isa = PBXBuildFile; fileRef = B3F232A3189682D30043DA98 /* NWNotification.m */; };
5C7803B61D3C487B002107FB /* NWPusher.m in Sources */ = {isa = PBXBuildFile; fileRef = B3F232A5189682D30043DA98 /* NWPusher.m */; };
5C7803B71D3C487B002107FB /* NWPushFeedback.m in Sources */ = {isa = PBXBuildFile; fileRef = B3F232A7189682D30043DA98 /* NWPushFeedback.m */; };
5C7803B81D3C487B002107FB /* NWSecTools.m in Sources */ = {isa = PBXBuildFile; fileRef = B3F232A9189682D30043DA98 /* NWSecTools.m */; };
5C7803B91D3C487B002107FB /* NWSSLConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = B3F232AB189682D30043DA98 /* NWSSLConnection.m */; };
5C7803BA1D3C487B002107FB /* NWType.m in Sources */ = {isa = PBXBuildFile; fileRef = B34BF1B318DDF401004BA9F7 /* NWType.m */; };
5C7803BB1D3C488C002107FB /* NWHub.h in Headers */ = {isa = PBXBuildFile; fileRef = B3F232A0189682D30043DA98 /* NWHub.h */; settings = {ATTRIBUTES = (Public, ); }; };
5C7803BC1D3C488C002107FB /* NWNotification.h in Headers */ = {isa = PBXBuildFile; fileRef = B3F232A2189682D30043DA98 /* NWNotification.h */; settings = {ATTRIBUTES = (Public, ); }; };
5C7803BD1D3C488C002107FB /* NWPusher.h in Headers */ = {isa = PBXBuildFile; fileRef = B3F232A4189682D30043DA98 /* NWPusher.h */; settings = {ATTRIBUTES = (Public, ); }; };
5C7803BE1D3C488C002107FB /* NWPushFeedback.h in Headers */ = {isa = PBXBuildFile; fileRef = B3F232A6189682D30043DA98 /* NWPushFeedback.h */; settings = {ATTRIBUTES = (Public, ); }; };
5C7803BF1D3C488C002107FB /* NWSecTools.h in Headers */ = {isa = PBXBuildFile; fileRef = B3F232A8189682D30043DA98 /* NWSecTools.h */; settings = {ATTRIBUTES = (Public, ); }; };
5C7803C01D3C488C002107FB /* NWSSLConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = B3F232AA189682D30043DA98 /* NWSSLConnection.h */; settings = {ATTRIBUTES = (Public, ); }; };
5C7803C11D3C488C002107FB /* NWType.h in Headers */ = {isa = PBXBuildFile; fileRef = B34BF1B218DDF401004BA9F7 /* NWType.h */; settings = {ATTRIBUTES = (Public, ); }; };
5C7803C21D3C488C002107FB /* NWLCore.h in Headers */ = {isa = PBXBuildFile; fileRef = B3376A62172BB71200242EBB /* NWLCore.h */; settings = {ATTRIBUTES = (Public, ); }; };
B3005FC318F43659009BB7C3 /* Application.xib in Resources */ = {isa = PBXBuildFile; fileRef = B3005FC218F43659009BB7C3 /* Application.xib */; };
B3376A63172BB71200242EBB /* NWLCore.c in Sources */ = {isa = PBXBuildFile; fileRef = B3376A61172BB71200242EBB /* NWLCore.c */; };
B3376A64172BB71200242EBB /* NWLCore.c in Sources */ = {isa = PBXBuildFile; fileRef = B3376A61172BB71200242EBB /* NWLCore.c */; };
B33FB1C8172B185C006529CE /* icon.icns in Resources */ = {isa = PBXBuildFile; fileRef = B33FB1BB172B185C006529CE /* icon.icns */; };
B33FB1C9172B185C006529CE /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = B33FB1BC172B185C006529CE /* main.m */; };
B33FB1CB172B185C006529CE /* NWAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = B33FB1BF172B185C006529CE /* NWAppDelegate.m */; };
@@ -26,8 +62,6 @@
B33FB215172B303D006529CE /* Icon-72@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B33FB211172B303D006529CE /* Icon-72@2x.png */; };
B33FB216172B303D006529CE /* icon.png in Resources */ = {isa = PBXBuildFile; fileRef = B33FB212172B303D006529CE /* icon.png */; };
B33FB217172B303D006529CE /* Icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B33FB213172B303D006529CE /* Icon@2x.png */; };
B34BF1B418DDF401004BA9F7 /* NWType.m in Sources */ = {isa = PBXBuildFile; fileRef = B34BF1B318DDF401004BA9F7 /* NWType.m */; };
B34BF1B518DDF401004BA9F7 /* NWType.m in Sources */ = {isa = PBXBuildFile; fileRef = B34BF1B318DDF401004BA9F7 /* NWType.m */; };
B395BA12172BC17A00631932 /* README.md in Resources */ = {isa = PBXBuildFile; fileRef = B3C6BE0015FD30E900F1F3F1 /* README.md */; };
B3AFABEF172C81910027346A /* config.plist in Resources */ = {isa = PBXBuildFile; fileRef = B3AFABEE172C81910027346A /* config.plist */; };
B3B4DCD318A7998300F9F258 /* LICENSE.txt in Resources */ = {isa = PBXBuildFile; fileRef = B3B4DCD218A7998300F9F258 /* LICENSE.txt */; };
@@ -36,21 +70,57 @@
B3C6BDD315FD27E900F1F3F1 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B3C6BDD215FD27E900F1F3F1 /* Security.framework */; };
B3C6BE0115FD30E900F1F3F1 /* README.md in Resources */ = {isa = PBXBuildFile; fileRef = B3C6BE0015FD30E900F1F3F1 /* README.md */; };
B3F23256189657DA0043DA98 /* pusher.p12 in Resources */ = {isa = PBXBuildFile; fileRef = B3F23255189657DA0043DA98 /* pusher.p12 */; };
B3F232AE189682D30043DA98 /* NWHub.m in Sources */ = {isa = PBXBuildFile; fileRef = B3F232A1189682D30043DA98 /* NWHub.m */; };
B3F232AF189682D30043DA98 /* NWHub.m in Sources */ = {isa = PBXBuildFile; fileRef = B3F232A1189682D30043DA98 /* NWHub.m */; };
B3F232B0189682D30043DA98 /* NWNotification.m in Sources */ = {isa = PBXBuildFile; fileRef = B3F232A3189682D30043DA98 /* NWNotification.m */; };
B3F232B1189682D30043DA98 /* NWNotification.m in Sources */ = {isa = PBXBuildFile; fileRef = B3F232A3189682D30043DA98 /* NWNotification.m */; };
B3F232B2189682D30043DA98 /* NWPusher.m in Sources */ = {isa = PBXBuildFile; fileRef = B3F232A5189682D30043DA98 /* NWPusher.m */; };
B3F232B3189682D30043DA98 /* NWPusher.m in Sources */ = {isa = PBXBuildFile; fileRef = B3F232A5189682D30043DA98 /* NWPusher.m */; };
B3F232B4189682D30043DA98 /* NWPushFeedback.m in Sources */ = {isa = PBXBuildFile; fileRef = B3F232A7189682D30043DA98 /* NWPushFeedback.m */; };
B3F232B5189682D30043DA98 /* NWPushFeedback.m in Sources */ = {isa = PBXBuildFile; fileRef = B3F232A7189682D30043DA98 /* NWPushFeedback.m */; };
B3F232B6189682D30043DA98 /* NWSecTools.m in Sources */ = {isa = PBXBuildFile; fileRef = B3F232A9189682D30043DA98 /* NWSecTools.m */; };
B3F232B7189682D30043DA98 /* NWSecTools.m in Sources */ = {isa = PBXBuildFile; fileRef = B3F232A9189682D30043DA98 /* NWSecTools.m */; };
B3F232B8189682D30043DA98 /* NWSSLConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = B3F232AB189682D30043DA98 /* NWSSLConnection.m */; };
B3F232B9189682D30043DA98 /* NWSSLConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = B3F232AB189682D30043DA98 /* NWSSLConnection.m */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
5C7803891D3C4668002107FB /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = B3C6BD7215FD24D200F1F3F1 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 5C7803831D3C4668002107FB;
remoteInfo = "PusherKit-iOS";
};
5C7803AB1D3C4826002107FB /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = B3C6BD7215FD24D200F1F3F1 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 5C7803A51D3C4826002107FB;
remoteInfo = "PusherKit-OSX";
};
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
5C7803901D3C4668002107FB /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
5C78038C1D3C4668002107FB /* PusherKit.framework in Embed Frameworks */,
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
5C7803AE1D3C4826002107FB /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
5C7803AF1D3C4826002107FB /* PusherKit.framework in Embed Frameworks */,
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
5C7803841D3C4668002107FB /* PusherKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PusherKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
5C7803861D3C4668002107FB /* PusherKit.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PusherKit.h; sourceTree = "<group>"; };
5C7803871D3C4668002107FB /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
5C7803A61D3C4826002107FB /* PusherKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PusherKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
5C7803A81D3C4826002107FB /* PusherKit.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PusherKit.h; sourceTree = "<group>"; };
5C7803A91D3C4826002107FB /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
B3005FC218F43659009BB7C3 /* Application.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = Application.xib; sourceTree = "<group>"; };
B3376A61172BB71200242EBB /* NWLCore.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = NWLCore.c; path = Mac/NWLCore.c; sourceTree = SOURCE_ROOT; };
B3376A62172BB71200242EBB /* NWLCore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NWLCore.h; path = Mac/NWLCore.h; sourceTree = SOURCE_ROOT; };
@@ -106,11 +176,26 @@
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
5C7803801D3C4668002107FB /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
5C7803A21D3C4826002107FB /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
B33FB1CE172B1A66006529CE /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
B33FB20F172B1EC2006529CE /* Security.framework in Frameworks */,
5C78038B1D3C4668002107FB /* PusherKit.framework in Frameworks */,
B33FB204172B1BAD006529CE /* CoreGraphics.framework in Frameworks */,
B33FB202172B1BA5006529CE /* Foundation.framework in Frameworks */,
B33FB200172B1B9F006529CE /* UIKit.framework in Frameworks */,
@@ -123,12 +208,31 @@
files = (
B3C6BDD315FD27E900F1F3F1 /* Security.framework in Frameworks */,
B3C6BD8015FD24D200F1F3F1 /* Cocoa.framework in Frameworks */,
5C7803AD1D3C4826002107FB /* PusherKit.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
5C7803851D3C4668002107FB /* PusherKit-iOS */ = {
isa = PBXGroup;
children = (
5C7803861D3C4668002107FB /* PusherKit.h */,
5C7803871D3C4668002107FB /* Info.plist */,
);
path = "PusherKit-iOS";
sourceTree = "<group>";
};
5C7803A71D3C4826002107FB /* PusherKit-OSX */ = {
isa = PBXGroup;
children = (
5C7803A81D3C4826002107FB /* PusherKit.h */,
5C7803A91D3C4826002107FB /* Info.plist */,
);
path = "PusherKit-OSX";
sourceTree = "<group>";
};
B3376A5F172B9EFD00242EBB /* Supporting Files */ = {
isa = PBXGroup;
children = (
@@ -193,6 +297,8 @@
B3F2329D189682D30043DA98 /* Classes */,
B33FB1BA172B185C006529CE /* Mac */,
B33FB1ED172B1A7A006529CE /* Touch */,
5C7803851D3C4668002107FB /* PusherKit-iOS */,
5C7803A71D3C4826002107FB /* PusherKit-OSX */,
B3C6BD7E15FD24D200F1F3F1 /* Frameworks */,
B3C6BD7C15FD24D200F1F3F1 /* Products */,
);
@@ -203,6 +309,8 @@
children = (
B3C6BD7B15FD24D200F1F3F1 /* Pusher.app */,
B33FB1D1172B1A66006529CE /* PusherTouch.app */,
5C7803841D3C4668002107FB /* PusherKit.framework */,
5C7803A61D3C4826002107FB /* PusherKit.framework */,
);
name = Products;
sourceTree = "<group>";
@@ -245,7 +353,78 @@
};
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
5C7803811D3C4668002107FB /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
5C7803881D3C4668002107FB /* PusherKit.h in Headers */,
5C7803991D3C4749002107FB /* NWHub.h in Headers */,
5C78039A1D3C4749002107FB /* NWNotification.h in Headers */,
5C78039B1D3C4749002107FB /* NWPusher.h in Headers */,
5C78039C1D3C4749002107FB /* NWPushFeedback.h in Headers */,
5C78039D1D3C4749002107FB /* NWSecTools.h in Headers */,
5C78039E1D3C4749002107FB /* NWSSLConnection.h in Headers */,
5C78039F1D3C4749002107FB /* NWType.h in Headers */,
5C7803A01D3C4749002107FB /* NWLCore.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
5C7803A31D3C4826002107FB /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
5C7803AA1D3C4826002107FB /* PusherKit.h in Headers */,
5C7803BB1D3C488C002107FB /* NWHub.h in Headers */,
5C7803BC1D3C488C002107FB /* NWNotification.h in Headers */,
5C7803BD1D3C488C002107FB /* NWPusher.h in Headers */,
5C7803BE1D3C488C002107FB /* NWPushFeedback.h in Headers */,
5C7803BF1D3C488C002107FB /* NWSecTools.h in Headers */,
5C7803C01D3C488C002107FB /* NWSSLConnection.h in Headers */,
5C7803C11D3C488C002107FB /* NWType.h in Headers */,
5C7803C21D3C488C002107FB /* NWLCore.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
5C7803831D3C4668002107FB /* PusherKit-iOS */ = {
isa = PBXNativeTarget;
buildConfigurationList = 5C78038F1D3C4668002107FB /* Build configuration list for PBXNativeTarget "PusherKit-iOS" */;
buildPhases = (
5C78037F1D3C4668002107FB /* Sources */,
5C7803801D3C4668002107FB /* Frameworks */,
5C7803811D3C4668002107FB /* Headers */,
5C7803821D3C4668002107FB /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = "PusherKit-iOS";
productName = "PusherKit-iOS";
productReference = 5C7803841D3C4668002107FB /* PusherKit.framework */;
productType = "com.apple.product-type.framework";
};
5C7803A51D3C4826002107FB /* PusherKit-OSX */ = {
isa = PBXNativeTarget;
buildConfigurationList = 5C7803B01D3C4826002107FB /* Build configuration list for PBXNativeTarget "PusherKit-OSX" */;
buildPhases = (
5C7803A11D3C4826002107FB /* Sources */,
5C7803A21D3C4826002107FB /* Frameworks */,
5C7803A31D3C4826002107FB /* Headers */,
5C7803A41D3C4826002107FB /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = "PusherKit-OSX";
productName = "PusherKit-OSX";
productReference = 5C7803A61D3C4826002107FB /* PusherKit.framework */;
productType = "com.apple.product-type.framework";
};
B33FB1D0172B1A66006529CE /* PusherTouch */ = {
isa = PBXNativeTarget;
buildConfigurationList = B33FB1EA172B1A66006529CE /* Build configuration list for PBXNativeTarget "PusherTouch" */;
@@ -253,10 +432,12 @@
B33FB1CD172B1A66006529CE /* Sources */,
B33FB1CE172B1A66006529CE /* Frameworks */,
B33FB1CF172B1A66006529CE /* Resources */,
5C7803901D3C4668002107FB /* Embed Frameworks */,
);
buildRules = (
);
dependencies = (
5C78038A1D3C4668002107FB /* PBXTargetDependency */,
);
name = PusherTouch;
productName = PusherTouch;
@@ -270,10 +451,12 @@
B3C6BD7715FD24D200F1F3F1 /* Sources */,
B3C6BD7815FD24D200F1F3F1 /* Frameworks */,
B3C6BD7915FD24D200F1F3F1 /* Resources */,
5C7803AE1D3C4826002107FB /* Embed Frameworks */,
);
buildRules = (
);
dependencies = (
5C7803AC1D3C4826002107FB /* PBXTargetDependency */,
);
name = PusherMac;
productName = Pusher;
@@ -287,8 +470,18 @@
isa = PBXProject;
attributes = {
CLASSPREFIX = NW;
LastUpgradeCheck = 0720;
LastUpgradeCheck = 0800;
ORGANIZATIONNAME = noodlewerk;
TargetAttributes = {
5C7803831D3C4668002107FB = {
CreatedOnToolsVersion = 8.0;
ProvisioningStyle = Automatic;
};
5C7803A51D3C4826002107FB = {
CreatedOnToolsVersion = 8.0;
ProvisioningStyle = Automatic;
};
};
};
buildConfigurationList = B3C6BD7515FD24D200F1F3F1 /* Build configuration list for PBXProject "NWPusher" */;
compatibilityVersion = "Xcode 3.2";
@@ -304,11 +497,27 @@
targets = (
B3C6BD7A15FD24D200F1F3F1 /* PusherMac */,
B33FB1D0172B1A66006529CE /* PusherTouch */,
5C7803831D3C4668002107FB /* PusherKit-iOS */,
5C7803A51D3C4826002107FB /* PusherKit-OSX */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
5C7803821D3C4668002107FB /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
5C7803A41D3C4826002107FB /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
B33FB1CF172B1A66006529CE /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
@@ -341,20 +550,42 @@
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
5C78037F1D3C4668002107FB /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
5C7803951D3C4683002107FB /* NWSecTools.m in Sources */,
5C7803961D3C4683002107FB /* NWSSLConnection.m in Sources */,
5C7803911D3C4683002107FB /* NWHub.m in Sources */,
5C7803941D3C4683002107FB /* NWPushFeedback.m in Sources */,
5C7803981D3C4698002107FB /* NWLCore.c in Sources */,
5C7803921D3C4683002107FB /* NWNotification.m in Sources */,
5C7803971D3C4683002107FB /* NWType.m in Sources */,
5C7803931D3C4683002107FB /* NWPusher.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
5C7803A11D3C4826002107FB /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
5C7803B81D3C487B002107FB /* NWSecTools.m in Sources */,
5C7803B41D3C487B002107FB /* NWHub.m in Sources */,
5C7803BA1D3C487B002107FB /* NWType.m in Sources */,
5C7803B71D3C487B002107FB /* NWPushFeedback.m in Sources */,
5C7803B61D3C487B002107FB /* NWPusher.m in Sources */,
5C7803B51D3C487B002107FB /* NWNotification.m in Sources */,
5C7803B31D3C486F002107FB /* NWLCore.c in Sources */,
5C7803B91D3C487B002107FB /* NWSSLConnection.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
B33FB1CD172B1A66006529CE /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
B33FB1FC172B1A7A006529CE /* main.m in Sources */,
B3F232B5189682D30043DA98 /* NWPushFeedback.m in Sources */,
B33FB1FD172B1A7A006529CE /* NWAppDelegate.m in Sources */,
B34BF1B518DDF401004BA9F7 /* NWType.m in Sources */,
B3F232AF189682D30043DA98 /* NWHub.m in Sources */,
B3F232B7189682D30043DA98 /* NWSecTools.m in Sources */,
B3F232B3189682D30043DA98 /* NWPusher.m in Sources */,
B3F232B9189682D30043DA98 /* NWSSLConnection.m in Sources */,
B3F232B1189682D30043DA98 /* NWNotification.m in Sources */,
B3376A64172BB71200242EBB /* NWLCore.c in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -362,22 +593,207 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
B3F232B4189682D30043DA98 /* NWPushFeedback.m in Sources */,
B3F232AE189682D30043DA98 /* NWHub.m in Sources */,
B3F232B6189682D30043DA98 /* NWSecTools.m in Sources */,
B34BF1B418DDF401004BA9F7 /* NWType.m in Sources */,
B3F232B2189682D30043DA98 /* NWPusher.m in Sources */,
B3F232B8189682D30043DA98 /* NWSSLConnection.m in Sources */,
B3F232B0189682D30043DA98 /* NWNotification.m in Sources */,
B33FB1C9172B185C006529CE /* main.m in Sources */,
B33FB1CB172B185C006529CE /* NWAppDelegate.m in Sources */,
B3376A63172BB71200242EBB /* NWLCore.c in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
5C78038A1D3C4668002107FB /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 5C7803831D3C4668002107FB /* PusherKit-iOS */;
targetProxy = 5C7803891D3C4668002107FB /* PBXContainerItemProxy */;
};
5C7803AC1D3C4826002107FB /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 5C7803A51D3C4826002107FB /* PusherKit-OSX */;
targetProxy = 5C7803AB1D3C4826002107FB /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */
5C78038D1D3C4668002107FB /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_UNREACHABLE_CODE = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = dwarf;
DEFINES_MODULE = YES;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
INFOPLIST_FILE = "PusherKit-iOS/Info.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
MTL_ENABLE_DEBUG_INFO = YES;
PRODUCT_BUNDLE_IDENTIFIER = "com.zats.PusherKit-iOS";
PRODUCT_NAME = PusherKit;
SDKROOT = iphoneos;
SKIP_INSTALL = YES;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 3.0;
TARGETED_DEVICE_FAMILY = "1,2";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = Debug;
};
5C78038E1D3C4668002107FB /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_UNREACHABLE_CODE = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEFINES_MODULE = YES;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
INFOPLIST_FILE = "PusherKit-iOS/Info.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
MTL_ENABLE_DEBUG_INFO = NO;
PRODUCT_BUNDLE_IDENTIFIER = "com.zats.PusherKit-iOS";
PRODUCT_NAME = PusherKit;
SDKROOT = iphoneos;
SKIP_INSTALL = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
SWIFT_VERSION = 3.0;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = Release;
};
5C7803B11D3C4826002107FB /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_UNREACHABLE_CODE = YES;
CODE_SIGN_IDENTITY = "";
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = dwarf;
DEFINES_MODULE = YES;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
ENABLE_STRICT_OBJC_MSGSEND = YES;
FRAMEWORK_VERSION = A;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
INFOPLIST_FILE = "PusherKit-OSX/Info.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks";
MACOSX_DEPLOYMENT_TARGET = 10.11;
MTL_ENABLE_DEBUG_INFO = YES;
PRODUCT_BUNDLE_IDENTIFIER = "com.zats.PusherKit-OSX";
PRODUCT_NAME = PusherKit;
SKIP_INSTALL = YES;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = Debug;
};
5C7803B21D3C4826002107FB /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_UNREACHABLE_CODE = YES;
CODE_SIGN_IDENTITY = "";
COMBINE_HIDPI_IMAGES = YES;
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEFINES_MODULE = YES;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
FRAMEWORK_VERSION = A;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
INFOPLIST_FILE = "PusherKit-OSX/Info.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks";
MACOSX_DEPLOYMENT_TARGET = 10.11;
MTL_ENABLE_DEBUG_INFO = NO;
PRODUCT_BUNDLE_IDENTIFIER = "com.zats.PusherKit-OSX";
PRODUCT_NAME = PusherKit;
SKIP_INSTALL = YES;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = Release;
};
B33FB1EB172B1A66006529CE /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -398,7 +814,8 @@
"$(inherited)",
);
INFOPLIST_FILE = "Touch/PusherTouch-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 6.1;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.noodlewerk.pusher;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = iphoneos;
@@ -424,7 +841,8 @@
GCC_PREFIX_HEADER = "Touch/PusherTouch-Prefix.pch";
GCC_PREPROCESSOR_DEFINITIONS = "NWL_LIB=Pusher";
INFOPLIST_FILE = "Touch/PusherTouch-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 6.1;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
PRODUCT_BUNDLE_IDENTIFIER = com.noodlewerk.pusher;
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -441,12 +859,22 @@
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
@@ -455,7 +883,9 @@
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.8;
ONLY_ACTIVE_ARCH = YES;
@@ -469,14 +899,26 @@
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.8;
SDKROOT = macosx;
@@ -486,6 +928,7 @@
B3C6BD9A15FD24D200F1F3F1 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_IDENTITY = "-";
COMBINE_HIDPI_IMAGES = YES;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "Mac/PusherMac-Prefix.pch";
@@ -494,6 +937,7 @@
"$(inherited)",
);
INFOPLIST_FILE = "Mac/PusherMac-Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
MACOSX_DEPLOYMENT_TARGET = 10.7;
PRODUCT_BUNDLE_IDENTIFIER = "com.noodlewerk.${PRODUCT_NAME:rfc1034identifier}";
PRODUCT_NAME = Pusher;
@@ -504,6 +948,7 @@
B3C6BD9B15FD24D200F1F3F1 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_IDENTITY = "-";
COMBINE_HIDPI_IMAGES = YES;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "Mac/PusherMac-Prefix.pch";
@@ -512,6 +957,7 @@
"$(inherited)",
);
INFOPLIST_FILE = "Mac/PusherMac-Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
MACOSX_DEPLOYMENT_TARGET = 10.7;
PRODUCT_BUNDLE_IDENTIFIER = "com.noodlewerk.${PRODUCT_NAME:rfc1034identifier}";
PRODUCT_NAME = Pusher;
@@ -522,6 +968,24 @@
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
5C78038F1D3C4668002107FB /* Build configuration list for PBXNativeTarget "PusherKit-iOS" */ = {
isa = XCConfigurationList;
buildConfigurations = (
5C78038D1D3C4668002107FB /* Debug */,
5C78038E1D3C4668002107FB /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
5C7803B01D3C4826002107FB /* Build configuration list for PBXNativeTarget "PusherKit-OSX" */ = {
isa = XCConfigurationList;
buildConfigurations = (
5C7803B11D3C4826002107FB /* Debug */,
5C7803B21D3C4826002107FB /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
B33FB1EA172B1A66006529CE /* Build configuration list for PBXNativeTarget "PusherTouch" */ = {
isa = XCConfigurationList;
buildConfigurations = (
@@ -0,0 +1,80 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0800"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "5C7803A51D3C4826002107FB"
BuildableName = "PusherKit.framework"
BlueprintName = "PusherKit-OSX"
ReferencedContainer = "container:NWPusher.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
<AdditionalOptions>
</AdditionalOptions>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "5C7803A51D3C4826002107FB"
BuildableName = "PusherKit.framework"
BlueprintName = "PusherKit-OSX"
ReferencedContainer = "container:NWPusher.xcodeproj">
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "5C7803A51D3C4826002107FB"
BuildableName = "PusherKit.framework"
BlueprintName = "PusherKit-OSX"
ReferencedContainer = "container:NWPusher.xcodeproj">
</BuildableReference>
</MacroExpansion>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
@@ -0,0 +1,80 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0800"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "5C7803831D3C4668002107FB"
BuildableName = "PusherKit.framework"
BlueprintName = "PusherKit-iOS"
ReferencedContainer = "container:NWPusher.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
<AdditionalOptions>
</AdditionalOptions>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "5C7803831D3C4668002107FB"
BuildableName = "PusherKit.framework"
BlueprintName = "PusherKit-iOS"
ReferencedContainer = "container:NWPusher.xcodeproj">
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "5C7803831D3C4668002107FB"
BuildableName = "PusherKit.framework"
BlueprintName = "PusherKit-iOS"
ReferencedContainer = "container:NWPusher.xcodeproj">
</BuildableReference>
</MacroExpansion>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
+26
View File
@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
<key>NSHumanReadableCopyright</key>
<string>Copyright © 2016 noodlewerk. All rights reserved.</string>
<key>NSPrincipalClass</key>
<string></string>
</dict>
</plist>
+24
View File
@@ -0,0 +1,24 @@
//
// PusherKit-OSX.h
// PusherKit-OSX
//
// Created by Sash Zats on 7/17/16.
// Copyright © 2016 noodlewerk. All rights reserved.
//
#import <Cocoa/Cocoa.h>
//! Project version number for PusherKit-OSX.
FOUNDATION_EXPORT double PusherKit_OSXVersionNumber;
//! Project version string for PusherKit-OSX.
FOUNDATION_EXPORT const unsigned char PusherKit_OSXVersionString[];
#import <PusherKit/NWHub.h>
#import <PusherKit/NWLCore.h>
#import <PusherKit/NWNotification.h>
#import <PusherKit/NWPushFeedback.h>
#import <PusherKit/NWPusher.h>
#import <PusherKit/NWSSLConnection.h>
#import <PusherKit/NWSecTools.h>
+24
View File
@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
<key>NSPrincipalClass</key>
<string></string>
</dict>
</plist>
+23
View File
@@ -0,0 +1,23 @@
//
// PusherKit-iOS.h
// PusherKit-iOS
//
// Created by Sash Zats on 7/17/16.
// Copyright © 2016 noodlewerk. All rights reserved.
//
#import <UIKit/UIKit.h>
//! Project version number for PusherKit-iOS.
FOUNDATION_EXPORT double PusherKit_iOSVersionNumber;
//! Project version string for PusherKit-iOS.
FOUNDATION_EXPORT const unsigned char PusherKit_iOSVersionString[];
#import <PusherKit/NWHub.h>
#import <PusherKit/NWLCore.h>
#import <PusherKit/NWNotification.h>
#import <PusherKit/NWPusher.h>
#import <PusherKit/NWSSLConnection.h>
#import <PusherKit/NWSecTools.h>
#import <PusherKit/NWPushFeedback.h>
+51 -3
View File
@@ -11,7 +11,7 @@ Pusher
Installation
------------
Install the Mac app using [Homebrew cask](https://github.com/phinze/homebrew-cask):
Install the Mac app using [Homebrew cask](https://github.com/caskroom/homebrew-cask):
```shell
brew cask install pusher
@@ -21,12 +21,18 @@ Or download the latest `Pusher.app` binary:
- [Download latest binary](https://github.com/noodlewerk/NWPusher/releases/latest)
Alternatively, you can include NWPusher as a framework, using [CocoaPods](http://cocoapods.org/):
Alternatively, you can include NWPusher as a framework, using [CocoaPods](https://cocoapods.org/):
```ruby
pod 'NWPusher', '~> 0.7.0'
```
or [Carthage](https://github.com/Carthage/Carthage) (iOS 8+ is required to use Cocoa Touch Frameworks)
```
github "noodlewerk/NWPusher"
```
Or simply include the source files you need. NWPusher has a modular architecture and does not have any external dependencies, so use what you like.
@@ -228,7 +234,7 @@ After a second or so, we can take a look to see if the notification was accepted
} else if (read) {
NSLog(@"Read and none failed");
} else {
NSLog(@"Unable to read failed: %@", error);
NSLog(@"Unable to read: %@", error);
}
```
@@ -292,6 +298,46 @@ When connected read the device token and date of invalidation:
Apple closes the connection after the last device token is read.
Pushing to macOS
---------------
On macOS, you obtain a device token for your app by calling the `registerForRemoteNotificationTypes:` method of the `NSApplication` object. It is recommended that you call this method at launch time as part of your normal startup sequence. The first time your app calls this method, the app object requests the token from APNs. After the initial call, the app object contacts APNs only when the device token changes; otherwise, it returns the existing token quickly.
The app object notifies its delegate asynchronously upon the successful or unsuccessful retrieval of the device token. You use these delegate callbacks to process the device token or to handle any errors that arose. You must implement the following delegate methods to track whether registration was successful:
- Use the `application:didRegisterForRemoteNotificationsWithDeviceToken:` to receive the device token and forward it to your server.
- Use the `application:didFailToRegisterForRemoteNotificationsWithError:` to respond to errors.
Note: If the device token changes while your app is running, the app object calls the appropriate delegate method again to notify you of the change.
The app delegate calls the `registerForRemoteNotificationTypes:` method as part of its regular launch-time setup, passing along the types of interactions that you intend to use. Upon receiving the device token, the `application:didRegisterForRemoteNotificationsWithDeviceToken:` method forwards it to the apps associated server using a custom method. If an error occurs during registration, the app temporarily disables any features related to remote notifications. Those features are re-enabled when a valid device token is received.
```objective-c
- (void)applicationDidFinishLaunching:(NSNotification *)notification {
// Configure the user interactions first.
[self configureUserInteractions];
[NSApp registerForRemoteNotificationTypes:(NSRemoteNotificationTypeAlert | NSRemoteNotificationTypeSound)];
}
```
```objective-c
- (void)application:(NSApplication *)application
didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
// Forward the token to your server.
[self forwardTokenToServer:deviceToken];
}
```
```objective-c
- (void)application:(NSApplication *)application
didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
NSLog(@"Remote notification support is unavailable due to error: %@", error);
[self disableRemoteNotificationFeatures];
}
```
Certificate and key files
-------------------------
Pusher reads certificate and key data from PKCS12 files. This is a binary format that bundles both X.509 certificates and a private key in one file. Conversion from other file formats to and from PKCS12 is provided by the OpenSSL CLI.
@@ -360,6 +406,8 @@ If it fails to connect then check:
- Can you connect with the push servers? Try `[NWPusher connectWithIdentity:identity error:&error]` or `[NWPusher connectWithPKCS12Data:pkcs12 password:password error:&error]`.
- Pusher connects on port `2195` with hosts `gateway.push.apple.com` and `gateway.sandbox.push.apple.com`, and on port `2196` with hosts `feedback.push.apple.com` and `feedback.sandbox.push.apple.com`. Make sure your firewall is configured to allow these connections.
If nothing is delivered to the device then check:
- Is the device online? Is it able to receive push notifications from other services? Try to get pushes from other apps, for example a messenger. Many wireless connections work visibly fine, but do not deliver push notifications. Try to switch to another wifi or cellular network.
+1 -6
View File
@@ -6,12 +6,7 @@
//
#import "NWAppDelegate.h"
#import "NWHub.h"
#import "NWPusher.h"
#import "NWNotification.h"
#import "NWLCore.h"
#import "NWSSLConnection.h"
#import "NWSecTools.h"
#import <PusherKit/PusherKit.h>
// TODO: Export your push certificate and key in PKCS12 format to pusher.p12 in the root of the project directory.
static NSString * const pkcs12FileName = @"pusher.p12";
+2 -2
View File
@@ -32,11 +32,11 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>0.7.0</string>
<string>0.7.5</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>15</string>
<string>19</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>UIPrerenderedIcon</key>