Changelog for PubNub Cocoa Swift SDK

v5.7.0

November 18, 2024
Added
  • Add custom message type support for the following APIs: publish, signal, share file, subscribe and history.

v5.6.1

July 8, 2024
Fixed
  • Fix issue because of which wrong request timeout has been used.
  • Fix issue with PNSubscribeCursorData which should have an optional region to handle user timetoken in received real-time messages.

v5.6.0

June 27, 2024
Added
  • Decoder to map server response directly to the data models.
  • Configurable request objects require less convenience methods to interact with PubNub REST API.
  • Network layer rewritten as module.

v5.5.0

June 12, 2024
Added
  • Adjusting to FCM HTTP v1 API.

v5.4.1

April 30, 2024
Fixed
  • Match include folder content to the import in source code.

v5.4.0

April 16, 2024
Added
  • Adding PrivacyInfo.xcprivacy.

v5.3.0

December 19, 2023
Added
  • Add the ability to set automatic request retry configuration in PNConfiguration.

v5.2.1

October 30, 2023
Modified
  • Update license information.

v5.2.0

October 16, 2023
Added
  • Add a crypto module with a set of implemented cryptors.
Modified
  • Mark uuid as deprecated configuration property.
  • Fix warnings after project settings update.

v5.1.3

December 13, 2022
Fixed
  • Serialise access to previously created session configuration objects from different threads.

v5.1.2

December 9, 2022
Fixed
  • Fix issue because of which message de-duplication code leaked memory.

v5.1.1

September 6, 2022
Fixed
  • Fix issue because of which PNFilesManager leaked each time when PubNub client created.

v5.1.0

March 11, 2022
Added
  • Make it possible to use PubNub Objective-C SDK using SPM.

v5.0.0

January 12, 2022
Modified
  • BREAKING CHANGES: Disable automated uuid generation and make it mandatory to specify during PNConfiguration instance creation.

v4.17.0

September 22, 2021
Added
  • Add method which allow to set or parse auth token.

v4.16.2

June 9, 2021
Modified
  • Add download error checks in Files API integration tests to have ability investigate random test failure with data download on Travis.
Fixed
  • Fix issue because of which null-able completion block wasn't properly verified and caused application crash.
  • Fix compiler warnings on type mismatch.

v4.16.1

March 16, 2021
Fixed
  • Replace os_unfair_lock with pthread_mutex to avoid cases when os_unfair_lock_lock called from same thread more than once.

v4.16.0

March 9, 2021
Added
  • BREAKING CHANGE: Add randomized initialization vector usage by default for data encryption / decryption in publish / subscribe / history API calls.

v4.15.11

February 6, 2021
Added
  • Add heartbeat to subscribe REST API call when managePresenceListManually is set to YES.

v4.15.10

February 6, 2021
Fixed
  • Fix copyWithConfiguration:completion: which sometime stuck because of long-poll subscribe.

v4.15.9

February 4, 2021
Fixed
  • Make PNBasePublishRequest header publicly visible.
  • Fix issue because of which subscriber reset heartbeat timer while in manual presence management mode.

v4.15.8

November 16, 2020
Added
  • Add new parameters to Here Now builder-based API to get presence information for list of channels or channel groups.

v4.15.7

October 3, 2020
Added
  • Add timetoken from file information publish call into PNSendFileStatus object.

v4.15.6

September 26, 2020
Fixed
  • Fix issue because of which PNPublishSequence metrics data migration caused application crash.
  • Fix subscription loop issue caused by broken bytes array with null-byte in it.

v4.15.5

September 18, 2020
Modified
  • Increase default number of messages returned by History v3, when single channel passed, to 100 messages per single call.

v4.15.4

September 10, 2020
Modified
  • Update code to ensure that persistent and in-memory storage accessed in thread-safe way.
Fixed
  • Fix issue because of which migrated data didn't placed at proper place.

v4.15.3

August 13, 2020
Added
  • Add include_message_type option to fetch messages and history with message actions APIs.
  • Add include_uuid option to fetch messages and history with message actions APIs.
Modified
  • Replace content type, which is returned by server during upload url generation, using system capabilities to detect MIME type by file extension.
  • Split current Keychain helper to two separate storage options: in-memory and Keychain. Keychain will be used when possible and in-memory for cases when Keychain not available and macOS.
Fixed
  • After Keychain reorganization publish sequence manager has been restructured to use dispatch queue instead of SpinLock.

v4.15.2

August 1, 2020
Fixed
  • Add same set of query parameters to download URL as any regular operation to PubNub service.
  • Fix issue with files larger than 32 kilobytes.

v4.15.1

July 28, 2020
Fixed
  • Fix default issues after migration to publish requests objects usage because of which replicate and store has been reset to false.

v4.15.0

July 27, 2020
Added
  • Add send file API support which allow encrypt (if configured) and upload file to channel.
  • Add download file API support which allow download file from channel and decrypt (if configured).
  • Add list files API support which allow retrieve information about files sent to channel.
  • Add delete file API support to permanently remove file from channel.
  • Add file message publish API which allow notify about new file upload completion (should be used to recover from internal publish error).
  • Add new subscribe events listener to handle new files events.
  • Add new methods to PNAES which allow to encrypt / decrypt file at local file system.
  • Add new option for PubNub client configuration and PNAES methods to use random initialization vector instead of hard-coded when files / data is encrypted / decrypted.

v4.14.2

June 19, 2020
Fixed
  • Make device push tokens added to excluded_devices lowercase.

v4.14.1

June 6, 2020
Added
  • By default, all requests which is able to return multiple objects, will return their total count (corresponding includeFields flag is set).
Modified
  • Renamed group of methods which is responsible for channel members management / audit.

v4.14.0

May 29, 2020
Added
  • Add simplified Objects API support with UUID and Channel metadata / membership management.
Modified
  • Deprecate and replace old PNObjectEventListener protocol with new one PNEventsListener.

v4.13.2

May 18, 2020
Fixed
  • Don't create lowercase string when FCM device registration token provided to PubNub notifications API.

v4.13.1

March 26, 2020
Fixed
  • Remove Fabric components from PubNub.podspec because they have been removed from SDK with latest release.

v4.13.0

March 9, 2020
Added
  • Add additional functionality which allow to filter out received Objects (memberships, members, spaces or users) by specified criteria.
  • Add new parameters which allow specify criteria (list of field names with sort direction :asc / :desc for each) order in which objects appear in response.
  • Add scripts which is responsible for SDK release roll out from tag in private repository.
Modified
  • Presence state should set / fetch fail w/o actual request to server when list of channels / groups and uuid is missing.
Fixed
  • Fix issue because of which connected interface didn't called completion block when managePresenceListManually is set to NO.
  • Fix issue because of which includeMetadata and includeMessageActions flags has been swapped.
  • Fix issue because of which actual retry never happened in case if subscription failed because PAM reported that client with current authKey doesn't have access rights to channels / groups.
  • Fix issue which didn't reset subscribe time-token when keepTimeTokenOnListChange is set to NO and tryCatchUpOnSubscriptionRestore is set to YES.
  • Remove 'macOS' from supported platforms in iOS Framework targets and rely on command-line specified flags to build Framework with Catalyst support.

v4.12.0

December 5, 2019
Added
  • Added support for new endpoint which allow register and use devices with APNS2.
  • Added new interfaces (builder-based API also has been modified) which allow pass device push token / identifier (not only NSData) using specific push service type.
  • Added class which simplify basic notifications composition for multiple platforms / providers at once.
Modified
  • Exposed utility class which allow to manage data in Keychain (iOS).
Fixed
  • Fixed non-JSON response handling from History v2 endpoints when storage add-on not enabled for used keys.

v4.11.1

November 25, 2019
Added
  • Added proper Catalyst framework support with separate build target 'XCFramework (Catalyst)' which is bundled with binaries which allow it to be used for: device / simulator and macOS.
Modified
  • Changed build scripts which now produce XCFrameworks with separate slices for device and simulator instead of 'fat' binaries created with 'lipo'.
Fixed
  • Changed headers visibility in frameworks project from 'project' to 'public'.

v4.11.0

October 8, 2019
Added
  • Add Message Actions API support which allow to: add, remove and fetch previously added actions.
  • Add new method to simple interface and argument to builder pattern interface which allow to fetch previously added actions and message metadata.
  • Modify 'PNObjectEventListener' with new callback which can be used to track message actions addition / removal events.
Modified
  • Enhance publish sequence manager performance by making save only if any change has been done.

v4.10.1

August 30, 2019
Fixed
  • Add missing import of Objects API interface to frameworks umbrella header.

v4.10.0

August 27, 2019
Added
  • Add support for Space Objects API.
  • Add support for User Objects API.
  • Add support for Membership / Member Objects API.
  • Add new callback to 'PNObjectEventListener', so existing listeners may start receiving 'space' events by adding new callback implementation.
  • Add new callback to 'PNObjectEventListener', so existing listeners may start receiving 'user' events by adding new callback implementation.
  • Add new callback to 'PNObjectEventListener', so existing listeners may start receiving 'membership' events by adding new callback implementation.

v4.9.0

August 8, 2019
Added
  • Add support for signal API.
  • Add new callback to 'PNObjectEventListener', so existing listeners may start receiving 'signal' objects by adding new callback implementation.
Modified
  • Disable pipelining for requests, because there is no guarantee, what responses will arrive in same order as they has been requested - this may lead to unexpected response in used API.
  • Remove deprecated 'stripMobilePayload' configuration option from SDK along with code, which used it.
Fixed
  • Fixed crash which is caused by attempt to de-duplicate message which PubNub client wasn't able to decrypt with configured 'cipherKey'.

v4.8.11

July 15, 2019
Added
  • Add macOS support for iOS frameworks.

v4.8.10

June 27, 2019
Fixed
  • Fix subscribe request timeout missing 'reconnect' event.
  • Fix empty heartbeat value set to minimum on configuration copy.
Modified
  • Update outdated configuration object inline help documentation

v4.8.9

June 17, 2019
Added
  • Add ability to pass FCM token for channel add / remove and audition APNS API endpoints.
Fixed
  • Fix crash caused by code, which performed OS version parsing using older API which provides localized string (include additional information in addition to version information).

v4.8.8

May 16, 2019
Added
  • Add value wrapping around heartbeat 'value'.
Fixed
  • Fix universal Frameworks build script.
Modified
  • Separate tests project from main workspace.

v4.8.7

March 28, 2019
Modified
  • Resolved project warnings, which caused issues with Carthage framework build.

v4.8.6

March 26, 2019
Fixed
  • Changed builder API interface visibility for frameworks from project to public.

v4.8.5

March 19, 2019
Fixed
  • Changed message count result object header file visibility for frameworks from project to public.
Modified
  • Moved Keychain records update calls to secondary queue.

v4.8.4

March 11, 2019
Added
  • Added ability to retrieve number of messages in specified channels using timetoken as reference date.
Modified
  • Removed channel names sorting from utility class (because of which new API wasn't able to work properly).

v4.8.3

November 13, 2018
Added
  • Added ability to get / set presence state for multiple channel / groups (at once).

v4.8.2

November 7, 2018
Added
  • Added ability to set arbitrary query parameters during API call.

v4.8.1

June 21, 2018
Modified
  • Changed client's data storage on macOS from Keychain to file-based.

v4.8.0

June 19, 2018
Modified
  • Changed presence API flow and added client configuration option to enable manual presence list management.
  • Fixed implicit 'self' retain in block warnings.

v4.7.8

May 7, 2018
Fixed
  • Added listeners collection access serialization on queue to prevent access to property during non-atomic store
Modified
  • Silenced implicit self usage in blocks.

v4.7.7

February 14, 2018
Fixed
  • Fixed issue because of which channel(s) and/or group(s) wasn't able to maintain user's presence with heartbeat.
Modified
  • Fixed log file attributes to prevent their backup locally or to iCloud.

v4.7.6

February 1, 2018
Fixed
  • Fixed issue because of which new 'connected' presence API wasn't able to 'disconnect' user.
Modified
  • Fixed behavior during unsubscribe - connect event won't fire after user 'disconnected', because there is no new channels about which listeners should be notified.

v4.7.5

December 16, 2017
Added
  • Added ability to change client's presence without actual subscription to channels/groups (based on heartbeat and presence leave API).
Fixed
  • Fixed pre-compile macro usage to send metrics when code is running on device with pre-iOS 10 version.
  • Fixed race of conditions for logger.
Modified
  • Removed Xcode warnings about partly API availability.

v4.7.4

November 15, 2017
Modified
  • Added ability to completely disable PubNub's client logger with 'PUBNUB_DISABLE_LOGGER' build configuration macro.

v4.7.3

October 31, 2017
Added
  • Added 'suppressLeaveEvents' parameter to PNConfiguration which allow to suppress presence leave API call on unsubscription.
Fixed
  • Fixed issue because of which there was a chance to create second subscribe request while subscription loop has been restarted with new timetoken.

v4.7.2

October 16, 2017
Added
  • Added new method to unsubscribe from all channels and groups with completion block.
Fixed
  • Fixed issue because of which unsubscribe requests didn't terminated previous long-poll subscribe request.
Modified
  • Removed 'receiver-is-weak' clang warning suppression since it was deprecated.

v4.7.1

September 15, 2017
Fixed
  • Fixed telemetry shared data access issues.

v4.7.0

August 28, 2017
Added
  • Added 'delete message' functionality.
Fixed
  • Fixed issue with wildcard subscription and presence events which treated as messages.
  • Fixed issue with copyWithConfiguration method which removed client itself from state change observers.
  • Fixed de-duplication messages cache size issue.
  • Fixed issue because of which requests metrics gathered only if 'metrics' log level has been enabled.
Modified
  • Removed deprecated flag from 'stripMobilePayload' so it will only print out deprecation warning in console w/o actual warning in Xcode.
  • Adjusted telemetry cache clean up interval.

v4.6.3

July 21, 2017
Fixed
  • Fixed issue with subscription to channel group.

v4.6.2

July 19, 2017
Modified
  • Added ability to gather service performance information.
  • Added new error category PNRequestURITooLongCategory to properly handle and report issues to callbacks and completion blocks.
Fixed
  • Removed unsubscribe request cancellation by sequential call to subscribe API.
  • Reorganized code which is responsible for subscribe requests cancellation
  • Fixed issue with macOS Keychain access in multi-user environment when none authorized.
  • Fixed inline documentation.

v4.6.1

April 26, 2017
Fixed
  • Fixed dependency analysis warnings for Fabric integration via CocoaPods.

v4.6.0

March 31, 2017
Added
  • Add support for presence deltas.

v4.5.15

March 15, 2017
Added
  • Added ability to store last used UUID in persistent storage.
Modified
  • Added 'pn-' prefix for client-provided unique user identifiers.
  • Added OSSpinLock and os_unfair_lock switch.
Fixed
  • Changed pre-compile macro for URLSession metrics gathering delegate usage.

v4.5.14

March 8, 2017
Fixed
  • Fixed uuid and auth keys encoding in query string.

v4.5.13

February 3, 2017
Modified
  • Added TCP metrics output to PubNub logs (added corresponding logger level).
  • Deprecated 'stripMobilePayload' property with output into console if property still used.

v4.5.12

January 1, 2017
Modified
  • Changed default origin

v4.5.11

December 16, 2016
Modified
  • Reverted default origin back to pubsub.pubnub.com

v4.5.10

December 16, 2016
Fixed
  • Changed object which is stored in cache which is used for de-duplication.
Modified
  • Changed default origin

v4.5.9

November 26, 2016
Fixed
  • Fixed cached message identifiers list clean up.

v4.5.8

November 25, 2016
Modified
  • Added new configuration property 'maximumMessagesCacheSize' which allow to enable (when non-zero value passed) messages de-duplication logic.

v4.5.7

November 20, 2016
Modified
  • Added 'APPLICATION_EXTENSION_API_ONLY' flag to PubNub.podspec and Framework targets.
Fixed
  • Fixed issue because of which 'reverse' flag had same value as 'include timetokens'.
  • Removed PNClass and added manual service response parsers registration (in attempt to solve third-party classes initialization at run-time).
  • Added additional service response check and wrap (in case if still somehow non-dictionary reached data objects).

v4.5.6

November 16, 2016
Added
  • Added multi-channel history request API to API call builder interface.
  • Added ability to subscribe / unsubscribe to/from channels and/or groups with single API call.
Modified
  • Added ability to receive message sender identifier.
  • Deprecated 'restoreSubscription' property.
  • Added verbose logs around subscription loop timetoken usage.

v4.5.5

November 2, 2016
Added
  • Added ability to specify for how long published message should be stored in channel's storage (added into API call builder interface).
Fixed
  • Fixed 'instanceID' which is placed inside of PNConfiguration.

v4.5.4

October 27, 2016
Modified
  • Added application extension environment support (applicationExtensionSharedGroupIdentifier PNConfiguration property).
  • Added messages count threshold configuration property.
  • Added 'instanceid' query property.
  • Added 'requestid' query property.
  • Updated fastlane configuration to speed test stage up.
Added
  • Added builder pattern for API calls.
  • Added 'fire' and 'replicate' options to publish API call builder.
Fixed
  • Fixed issue with shared auto-updating user calendar.

v4.5.3

September 26, 2016
Modified
  • added NS_SWIFT_NAME with Swift equivalent specified in it to all public API to prevent Swift function signature change between Swift releases.

v4.5.2

September 13, 2016
Modified
  • added published message sequence number to publish API call (this information arrive as message envelope and used for issues debugging).
  • added automatic heartbeat interval using formula and heartbeat value for calculated value.
  • deprecated 'actualChannel' and 'subscribedChannel' in favor of 'channel' and 'subscription' (properties still available, but will be eventually will be completelly removed).
Added
  • added logger method which will allow to use it from Swift.
  • added 'channel' and 'subscription' properties to represent channel from which event arrived and actual data stream name which is used by PubNub client for subscription.

v4.5.1

September 2, 2016
Fixed
  • Changed default logs directory which should be used for tvOS client.

v4.5.0

August 31, 2016
Added
  • added scheduled API calls completion before application suspension (for iOS only).
  • added Carthage support.
  • added ability to disable message stripping (removing data which has been added by client during publish with mobile payload) which is enabled by default.
Modified
  • removed dependency to CocoaLumberjack.
  • by default Framework bundles will be build with bitcode enabled.

v4.4.1

July 7, 2016
Fixed
  • fixed timeout issue which caused by recently added shared NSURLSessionConfiguration configuration.
Modified
  • added tests to cover fixed issue

v4.4.0

July 7, 2016
Modified
  • added ability provide limited customization of NSURLSessionConfiguration.
  • added bitcode support for frameworks.

v4.3.3

May 17, 2016
Fixed
  • fixed podspec dependency version format compatibility with CocoaPods 0.39.

v4.3.2

May 13, 2016
Fixed
  • fixed issue for case when client doesn't use encryption and message has been received w/o mobile payload to clean up.
  • original message (in case of decryption error) will be passed into associatedObject of PNStatus error instance.

v4.3.1

May 12, 2016
Fixed
  • fixed issue with PNNumber on 32bit system, when passed NSNumber instance created from unix-timestamp multiplied on 10000000.
  • fixed message content decryption in case if it has been sent along with mobile push payload.
Modified
  • mobile push payload removed from received message.
  • 'pn_other' key has been removed and original object will be returned in delegate callback (this field used with message encryption and/or mobile push payload).

v4.3.0

March 5, 2016
Added
  • added Pub/Sub V2 API support.
  • added message filtering basing on published message metadata.
  • added ability to publish message with additional metadata for filtering purposes.
  • added generics to collection properties and arguments.
Modified
  • added null-ability annotations.
  • updated tests.
  • updated inline documentation formatting.
Fixed
  • fixed occupancy value storage for state-change (it will be set if available).
  • fixed issue with presence here now request where 'nil' passed as channel / group.
  • fixed script responsible for module map update in built frameworks.
  • fixed 'Universal Static Framework (iOS)' to use correct platform.
  • added missing files to Mac Framework.

v4.2.7

February 9, 2016
Modified
  • changed way how heartbeat state notification is set. Now it can be specified in heartbeatNotificationOptions bit field property using PNHeartbeatNotificationOptions options.

v4.2.6

February 9, 2016
Modified
  • added new property to PNConfiguration class called notifyAboutFailedHeartbeatsOnly which allow to configure client to notify not only about failed heartbeat statuses but for success as well.

v4.2.5

January 27, 2016
Modified
  • added private persistent storage which allow to keep crucial data safe on device.
Added
  • added new target to build dynamic framework for tvOS.
Fixed
  • fixed issue with time token precision verification in case if non-PubNub's time token value has been passe.

v4.2.4

January 12, 2016
Fixed
  • fixed issue because of which client may not restore subscription on list of channels which has been left after previous unsubscription request.

v4.2.3

December 20, 2015
Fixed
  • fixed unsubscription issue because of which time token didn't get reset if there is no more channels on which client may continue subscription.
  • fixed issue with -unsubscribeFromAll which may issue unwanted subscribe requests in case if method call followed by subscribe method call.

v4.2.2

December 14, 2015
Added
  • added ability to build static library based frameworks (universal as well).
  • added Fabric support.

v4.2.1

December 10, 2015
Fixed
  • fixed client state cache issue because of which channel group state itself get updated even if state has been changed for one.

v4.2.0

December 2, 2015
Added
  • extended subscribe API with ability to specify arbitrarily time token to catch up from.
Modified
  • added ability to specify time tokens not only as 17 digit, but time interval from NSDate acceptable too.
  • added stringified representation for category and operation fields.
  • removed client initialization code which affected PNLogger configuration.
Fixed
  • fixed Mac OSX target and scripts for dynamic framework creation.

v4.1.4

November 24, 2015
Added
  • added watchOS deployment information to PubNub.podspec file.

v4.1.3

November 20, 2015
Fixed
  • adjusted Base64 decoding settings which will allow to decode encrypted messages from some clients which changed Base64 encoding algorithms.

v4.1.2

November 16, 2015
Fixed
  • fixed listener 'disconnect' status handling after client stumbled on network issues and reported 'unexpected disconnect'.
  • fixed issue because of which string has been stored inside of serviceData for PNErrorStatus created from NSError.
Modified
  • logger will print out current verbosity level information every time when it will be changed.
  • all components (except core components) will add information about component to log output in format <PubNub::{component}>.
  • changed 'build configuration' from Debug to Release for framework building targets.
  • updated demo projects to correctly handle disconnection event (which happen for unsubscribe operation not for subscribe).

v4.1.1

October 22, 2015
Modified
  • fixed memory issues with PNNetwork instance.
  • removed deprecated string encoding methods.

v4.1.0

October 15, 2015
Added
  • added ability to build dynamic frameworks for iOS 8.0+.
Modified
  • version bump because of backward compatible changes in public interface.

v4.0.8

October 14, 2015
Modified
  • exposed heartbeat error to ‐client:didReceiveStatus:
Fixed
  • fixed ping triggering logic after corner case with network issues

v4.0.7

October 3, 2015
Fixed
  • fixed issue which prevented proper -retry execution.

v4.0.6

October 1, 2015
Modified
  • updated logger macro usage.
  • updated Podspec file organization.
  • downgraded deployment target in Podspec file from 8.0 to 7.0.

v4.0.5

September 20, 2015
Modified
  • suppressed designated initializer warnings.
  • added client information class.
  • added conditional device ID specification in request constructor.
  • added ObjC/Swift test for crypto issue.
Fixed
  • fixed issue with messages decryption in history and real-time messaging API.

v4.0.4

September 2, 2015
Fixed
  • fixed issue with missing presence event handling.
  • fixed subscriber parser issue because of which channel group name and actual channel changed their places in status object for presence event.
  • fixed non-multiplexing subscription issue.
Modified
  • added additional presence events tests.

v4.0.3

July 24, 2015
Fixed
  • fixed and changed data types for few data objects (which caused crash in swift environment).
  • fixed size tests to handle updated packet size during tests.
  • Fixed Podfile.
Modified
  • removed CocoaPods post-install script from Podfile.
  • added custom 'User-Agent' header field.
  • changed test environment check.

v4.0.2

July 13, 2015
Modified
  • replaced AFNetworking with native NSURLSession wrapper.
  • if empty array of channels passed to enable push notifications SDK will report error.
  • added 'associatedObject' field to PNErrorStatus (for now only for decryption error on live feed).
  • in case of decryption error only status object will arrive to listener (‐client:didReceiveMessage: won't be called).
Fixed
  • fixed podspec to suppress warnings which appeared because private headers has been exposed to public.
  • fixed code which had warnings from clang.
  • fixed issues with composed message publish (with mobile push payloads).
  • fixed demo application which provided wrong logger configuration for log file size.
  • fixed issue with number publishing.
  • fixed logger levels manipulation.
  • fixed inability to publish mobile gateway payloads only.

v4.0.1

June 30, 2015
Modified
  • updated documentation hosted by CocoaPods.

v4.0.0

June 30, 2015
Modified
  • The new, refactored PN 4.0 for iOS is here.
Last updated on
On this page