diff --git a/CHANGELOG.md b/CHANGELOG.md
index 042a1d6a2..e97d24656 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,202 +1,3 @@
## Changelog
-- **3.1.4**:
- - Bugfix: Possible crash fixed when IVI was 1 and IV Index 0 (#358).
- - Bugfix: Multiple `self` weakened (#356).
- - Allowing groups to be null when importing (#348, #357).
-
-- **3.1.3**:
- - Improvement: Migration to Xcode 12.5.
- * Improvement: CryptoSwift updated from 1.3.8 to 1.4.0 (https://github.com/krzyzanowskim/CryptoSwift/releases/tag/1.4.0).
- * Bugfix: Two threading issues fixed (#350 with #351 and #352 with #353).
- * Bugfix: Refreshing Last Modified date after importing new mesh network configuration (https://github.com/NordicSemiconductor/IOS-nRF-Mesh-Library/commit/f60f3b25111bae1b1dcc1b5ffcf62e2a09615cf7).
-
-- **3.1.2**:
- - Bugfix: Fixed DevicePropertyCharacteristic.pressure with missing resolution when converting to Data (#344).
- - Bugfix: Fixed calculating message sequence when Seq > 8191 (#345).
-- **3.1.1**:
- - Bugfix: `SegmentedAccessMessage` overflow crash (#339).
- - Bugfix: Validation failure if database contains 10m publish resolution (#338).
-
-- **3.1.0**:
- - Sensor messages + simple UI for reading sensor values (#327).
- - Light LC messages (#328).
-
-- **3.0.2**:
- - Bugfix: Fixed issues with importing a JSON file exported with an older version of the app (#321).
-
-- **3.0.1**:
- - Scene support.
- - Heartbeat support.
- - Key Refresh Procedure support.
- - Partial export.
- - UI improvements.
- - JSON schema modified.
- - Bugs fixed.
- - For more see #295 and #323.
-
-- **2.2.3**:
- - A connected Proxy Node, if known, can now we obtained from the `ProxyFilter`.
- - Displaying Proxy Node name on Proxy screen in the sample app.
- - New icons in the sample app.
- - Improvement: `ProxyFilterDelegate` methods will be called on the delegate queue specified in the `MeshNetworkManager`.
- - Several bugs fixed.
-
-- **2.2.2**:
- - Fixed handling IV Index update.
- - Added a flag to enable IV Index Test Mode.
- - New method to get next available address from given offset.
- - 2 methods added to get and set Element's sequence number. Use on your own risk.
- - A Disconnect button added in the sample app, available with Automatic Connection disabled.
- - Improvement: Migration to Swift 5.2 and Xcode 11.4.
- - Improvement: macOs added to podspec (#240).
- - Improvement: Discovering new proxy connection improved.
- - Bugfix: Fixed overwriting primary element's name.
- - Bugfix: Thread synchronization in `ProxyFilter` and `BaseGattBearer`.
-
-- **2.2.1**:
- - API related to "compatible models" removed, as the client and server models do not need to have model IDs differing by 1 (#225).
-
-- **2.2.0**:
- - Scene messages added.
- - Lightness, CTL and HSL messages added.
- - Improved switching from provisioning to node configuration.
- - Support for Proxies with proxy filter capacity limited to 1.
- - Bugfix: Several potential crashes fixed, including #208.
- - Spelling: Targeting -> targeting.
-
-- **2.1.0**:
- - Option to select connected proxy manually (disable Automatic Connection on Proxy screen).
- - An example Simple OnOff client vendor model added.
- - Bugfix: Race condition on Access and Upper Transport Layer fixed (#179).
- - Bugfix: Editing keys possible only when new one is created (#188).
- - Improvement: Clarification of Relay documentation (#168).
- - Improvement: Compatibility with Xcode 10.x (#180).
-
-- **2.0.0**:
- - A complete rewrite of the sample app and underlying mesh library. The API is not backwards compatible with the old version.
- - The old database will be automatically migrated to the new format when calling `manager.load()`.
-
-- **1.0.4**:
- - Adds ability to control GenericOnOff parameters, `TransitionDelay` and `TransitionTime` (some testing needed).
- - Adds ability to control GenericLevel models, additionally `TransitionDelay` and `TransitionTime` (some testing needed).
- - Bugfix: Fixed an issue causing the provisioning to halt at 91% intermittently due to block acknowledgements not working as it should, a 2-second delay is restored to workaround this.
-
-- **1.0.1**:
- - Adds minor improvements to the copy on some UI components within the application.
- - Bugfix: Performance improvement due to removing an intended 2-second delay when switching between Composition Data Get state and AppKeyAdd state due to an earlier bug.
- - Bugfix: fixed an issue with block acknowledgements that caused longer messages that needs multiple acknowledgement to fail.
- - Bugfix: fixed an issue in the GenericOnOff control view, this bug caused loss of control over the node when it's added then removed from a subscription group.
- - Bugfix: fixed an issue that caused the navigation bar not to reflect the scanner state when directly tapping the `Add Node` button instead of using the tab bar button.
-
-- **1.0**:
- - Adds a better approach for GenericOnOffSet messages to be sent to all subscribed addresses on the target element. If no subscriptions are present, messages will be sent to the element's unicast.
- - Adds an element unicast address within the node view to allow easier configuration.
- - Adds Application Version and build numbers in the settings view.
- - Adds a more descriptive title depending on OOB type in the user input view.
- - Fixes some typos and misplaced text in the bundled application.
- - Bugfix: Fixed a crash when the input OOB length won't fit within an UIn16 value.
- - Bugfix: Input and Output OOB actions where wrongly parsed as Octets instead of bit fields, causing a crash when a node supports more than one action type.
- - Bugfix: Fixed a bug causing Output OOB action types that are not Numeric OOB to never trigger due to a legacy check that's no longer required.
-
-- **0.4**:
- - Adds GenericOnOffServer control.
- - Adds UI improvement in Element view, now subscription,publication and both states are shown on the cell.
- - Adds UI improvement for GenericOnOff control to disable the feature if an AppKey is not bound to the model.
- - Bugfix: Access messages no longer use DeviceKey and DeviceNonce in cases where AppKey should be used.
- - Bugfix: Sequence number's first octet was not calculated properly, causing it to always be 0x00.
- - Bugfix: Fixed Typo in scanner view "Discovery" -> "Discover".
-
-- **0.3**:
- - TestFlight Release.
- - First App Store Release.
- - Adds ability to reset/remove a node.
- - Adds ability to remove subscription addresses for a model.
- - Adds ability to parse node identity packets to allow connecting to a specific node (Cryptographically safe).
- - Adds ability to parse network identity packets to allow reconnecting to the same node (Cryptographically safe).
- - Adds MeshManager class that manages the proxy node, network state and related mesh network data through API calls.
- - Adds ability to abort node provisioning.
- - Adds Improved provisioning view with progressbar indication.
- - Bugfix: AppKeyIndex values above 1 caused a failure to bind models to app keys due to a hardcoded value.
- - Bugfix: NetKeyIndex and AppKeyIndex values were swapped in the AppKeyStatus message.
- - Bugfix: Mesh connection button was too slow and sometimes malfunctioned.
- - Bugfix: Scanner views were sometimes untapabble and scrolling was erratic when nodes advertise with low intervals.
- - Bugfix: Main network view crashed intermittently after the network has been reset.
- - Bugfix: Some input views where parsing freetext as hex, causing a crash.
- - Input views can now robustly handle hex input format starting with `0x`.
- - Subscription address types are now shown beside the subscription address.
- - Empty scanner views will now have an empty state to avoid blank screens.
- - Provisioning logs moved to a separate view.
- - An improved UI and interaction across all views.
-
-- **0.2**:
- - TestFlight Release.
- - Bundled sample firmwares for Light Server and Light client to ease the testing process.
- - Minor fixes for copy in the model configuration view, Detail labels where left blank, now they show more information on what happens on selection.
- - Added empty scanner view (Not yet implemented in UI).
- - Added mesh save when mesh state is reset to fix the crash caused by mesh state not being present on main network view.
- - Reset network text will now be red to alert the user of destructive action.
- - Settings view copy improvements: capitalization fixes and better naming of rows.
- - CBUUID log in the provisioner will now show the hex value instead of data size.
- - Title on a provisioner will use the friendly name instead of BLE name.
- - Display node name and unicast in the node's cell title label.
- - Fixed a bug causing node friendly name to be forced into a hex value.
- - Fixed a bug causing node friendly name not to be stored and used.
- - Minor tweak to the node cell UI.
- - Shortened company name/company id label text.
- - removed 0x from placeholder input to avoid confusion.
- - Fixed Bug causing key binding, pub/sub addresses to overlap on models with same identifier.
- - Minor refactor to the composition element model to allow storing model related data within the element instead of the root object.
- - Added activity indicator in the provisioning view to emphasise the progress, it stops at completion or any failures.
- - Minor cleanup in log messages during node identity verification, all lowercase.
- - Used CBUUID as a node identifier to avoid duplication and to avoid the mistake of using advertisement data as it's not a node identifier.
- - Minor log fixes to avoid double logging of disconnection, etc..
- - Disconnecting of current proxy when provisioning a new node, this is to avoid having multiple proxies connected simultaneously.
- - Removed commented out code line.
- - Node Identity validation.
- - Added node identity advertisement parsing when reconnecting to a node to configure after provisioning.
- - Added ability to overwrite the unicast address in case the user doesn't want to use the automatically incremented space.
- - Added automatic unicast address incrementing in mesh state struct.
- - unicast will automatically increment according to number of elements coming from the composition data of a provisioned node.
- - This allows simply tapping provision button instead of having to type in the address manually.
- - Minor tweak to tint settings.
- - Color improvements on Node cells.
- - Renamed Display name to nRF Mesh.
- - Updated LaunchScreen Storyboard.
- - Added missing image assets.
- - Added 1-second delay after provisioning succeeds to allow the user to see the message.
- - Provisioning view will set the main tab to the network view instead of the scanner view before popping to root view, to give a better context.
- - Renamed Product Vendor Identifier to Product Version as it was incorrect.
- - Updated Composition status struct and NodeEntry struct to reflect the VendorId->ProductVersion change.
- - Added an improved settings' icon.
- - Fixed a broken icon in the node configuration view.
- - Added Settings icon to settings tab bar item instead of the list icon.
- - Added an improved icon to the add tab bar.
- - Added option to reset the mesh database, this is a destructive/non-reversible action and regenerate new NetKey and mesh state.
- - Added Mesh rejoin functionality to connect to a proxy node.
- - Reconnection to Proxy node functional, also displaying advertisement data on the scanner view with RSSI.
- - Enabled Mesh disconnection form the main view.
- - WIP: Added proxy scanning mode.
- - Added Reconnect button on the main network view when there's a configured network, but no connected proxy node.
- - Display SIG model identifiers as subtitle even if they're parsed into a human readable string.
- - Created an improved scanner node item cell.
- - Display RSSI values (Will grey out when RSSI is not available, displaying the last known RSSI.
- - Display Provisioning advertisement data when present.
- - Added a network icon to cells.
- - Extracted status code alerts to clean up code duplication.
- - Added hex parsing validation to address value inputs.
- - Fixed Default TTL Configuration message implementation.
- - Default TTL status message is now implemented and callbacks are forwarded to it's designated delegate.
- - Added subscription lists support for the Example application's UI.
- - Added Subscription Add message operation, Subscription status operation and dependencies.
- - iOS10 data compatibility and Segmentation / Acknowledgement messages bugs resolved.
- - Fixes related to segmentation and reassembly, This fixes the acknowledgement messages failing when they're longer than MTU size and are not segmented.
- - This also adds Default TTL Get message support (Not accessible currently, but functional).
- - Fixes a bug that caused an invalid state when a segmented message arrives over only one segment I.E: SegN=0x00 and SegO=0x00 causing the ack timer to have an unknown state.
- - Re-enabled app key state switch after composition data is received.
- - Copy Data objects to preserve 0 indices on iOS versions <= 10.
- - Added GATT Bearer SAR checks to assure that segments that are out of order are dropped.
- - An added segment caching to assure that incomind lower transport segments are not appended to the current segment being Reassembled upon retransmission.
-
-- **0.1**:
- - Initial release.
+For change log see [Releases](https://github.com/NordicSemiconductor/IOS-nRF-Mesh-Library/releases).
diff --git a/Example/Podfile.lock b/Example/Podfile.lock
index df93714f3..9c74dc026 100755
--- a/Example/Podfile.lock
+++ b/Example/Podfile.lock
@@ -1,6 +1,6 @@
PODS:
- CryptoSwift (1.4.0)
- - nRFMeshProvision (3.1.4):
+ - nRFMeshProvision (3.1.5):
- CryptoSwift (= 1.4.0)
DEPENDENCIES:
@@ -16,8 +16,8 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
CryptoSwift: 7cc902df1784de3b389a387756c7d710f197730c
- nRFMeshProvision: 4b3e185fd13b077c997aadca6f54806f5c577cd7
+ nRFMeshProvision: 8d93e5827501f166f1511c89a5540a610844ccf2
PODFILE CHECKSUM: 69a81463322ef34ca0a20b98e90da2701d94e4ec
-COCOAPODS: 1.10.1
+COCOAPODS: 1.10.2
diff --git a/Example/Pods/Local Podspecs/nRFMeshProvision.podspec.json b/Example/Pods/Local Podspecs/nRFMeshProvision.podspec.json
index 08a14c105..cbe94c686 100755
--- a/Example/Pods/Local Podspecs/nRFMeshProvision.podspec.json
+++ b/Example/Pods/Local Podspecs/nRFMeshProvision.podspec.json
@@ -1,8 +1,8 @@
{
"name": "nRFMeshProvision",
- "version": "3.1.4",
+ "version": "3.1.5",
"summary": "A Bluetooth Mesh library",
- "description": "nRF Mesh is a Bluetooth Mesh compliant library that has many features such as provisioning, configuration and control of Bluetooth Mesh compliant nodes.",
+ "description": "nRF Mesh is a Bluetooth mesh compliant library supporting features such as provisioning, configuration and control of Bluetooth mesh nodes.",
"homepage": "https://github.com/NordicSemiconductor/IOS-nRF-Mesh-Library",
"license": {
"type": "BSD-3-Clause",
@@ -13,7 +13,7 @@
},
"source": {
"git": "https://github.com/NordicSemiconductor/IOS-nRF-Mesh-Library.git",
- "tag": "3.1.4"
+ "tag": "3.1.5"
},
"social_media_url": "https://twitter.com/nordictweets",
"platforms": {
@@ -26,7 +26,9 @@
"5.0",
"5.1",
"5.2",
- "5.3"
+ "5.3",
+ "5.4",
+ "5.5"
],
"source_files": "nRFMeshProvision/Classes/**/*",
"dependencies": {
@@ -35,5 +37,5 @@
]
},
"frameworks": "CoreBluetooth",
- "swift_version": "5.3"
+ "swift_version": "5.5"
}
diff --git a/Example/Pods/Manifest.lock b/Example/Pods/Manifest.lock
index df93714f3..9c74dc026 100755
--- a/Example/Pods/Manifest.lock
+++ b/Example/Pods/Manifest.lock
@@ -1,6 +1,6 @@
PODS:
- CryptoSwift (1.4.0)
- - nRFMeshProvision (3.1.4):
+ - nRFMeshProvision (3.1.5):
- CryptoSwift (= 1.4.0)
DEPENDENCIES:
@@ -16,8 +16,8 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
CryptoSwift: 7cc902df1784de3b389a387756c7d710f197730c
- nRFMeshProvision: 4b3e185fd13b077c997aadca6f54806f5c577cd7
+ nRFMeshProvision: 8d93e5827501f166f1511c89a5540a610844ccf2
PODFILE CHECKSUM: 69a81463322ef34ca0a20b98e90da2701d94e4ec
-COCOAPODS: 1.10.1
+COCOAPODS: 1.10.2
diff --git a/Example/Pods/Pods.xcodeproj/project.pbxproj b/Example/Pods/Pods.xcodeproj/project.pbxproj
index 2616350ca..bcaabb450 100644
--- a/Example/Pods/Pods.xcodeproj/project.pbxproj
+++ b/Example/Pods/Pods.xcodeproj/project.pbxproj
@@ -1876,7 +1876,7 @@
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 1100;
- LastUpgradeCheck = 1250;
+ LastUpgradeCheck = 1310;
};
buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */;
compatibilityVersion = "Xcode 3.2";
@@ -2452,11 +2452,10 @@
};
name = Release;
};
- 119859653F1B910D730619DB115698A3 /* Release */ = {
+ 2372535C0AB9DD3B1EBC74E87BF12294 /* Release */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 73F4C6A0E5FCBC427875F5C39371DEF5 /* nRFMeshProvision.release.xcconfig */;
+ baseConfigurationReference = 1FC18BAB53A0C8A42EC449181449498A /* CryptoSwift.release.xcconfig */;
buildSettings = {
- CLANG_ENABLE_OBJC_WEAK = NO;
"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
"CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
@@ -2465,15 +2464,14 @@
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
- GCC_PREFIX_HEADER = "Target Support Files/nRFMeshProvision/nRFMeshProvision-prefix.pch";
- INFOPLIST_FILE = "Target Support Files/nRFMeshProvision/nRFMeshProvision-Info.plist";
+ GCC_PREFIX_HEADER = "Target Support Files/CryptoSwift/CryptoSwift-prefix.pch";
+ INFOPLIST_FILE = "Target Support Files/CryptoSwift/CryptoSwift-Info.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- IPHONEOS_DEPLOYMENT_TARGET = 10.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 9.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
- MACH_O_TYPE = staticlib;
- MODULEMAP_FILE = "Target Support Files/nRFMeshProvision/nRFMeshProvision.modulemap";
- PRODUCT_MODULE_NAME = nRFMeshProvision;
- PRODUCT_NAME = nRFMeshProvision;
+ MODULEMAP_FILE = "Target Support Files/CryptoSwift/CryptoSwift.modulemap";
+ PRODUCT_MODULE_NAME = CryptoSwift;
+ PRODUCT_NAME = CryptoSwift;
SDKROOT = iphoneos;
SKIP_INSTALL = YES;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
@@ -2485,10 +2483,11 @@
};
name = Release;
};
- 2372535C0AB9DD3B1EBC74E87BF12294 /* Release */ = {
+ 2461BFC62EA129FFA322B4F83394D79D /* Debug */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 1FC18BAB53A0C8A42EC449181449498A /* CryptoSwift.release.xcconfig */;
+ baseConfigurationReference = 42C87A2C10D519B82B447334DB11C13D /* nRFMeshProvision.debug.xcconfig */;
buildSettings = {
+ CLANG_ENABLE_OBJC_WEAK = NO;
"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
"CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
@@ -2497,24 +2496,24 @@
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
- GCC_PREFIX_HEADER = "Target Support Files/CryptoSwift/CryptoSwift-prefix.pch";
- INFOPLIST_FILE = "Target Support Files/CryptoSwift/CryptoSwift-Info.plist";
+ GCC_PREFIX_HEADER = "Target Support Files/nRFMeshProvision/nRFMeshProvision-prefix.pch";
+ INFOPLIST_FILE = "Target Support Files/nRFMeshProvision/nRFMeshProvision-Info.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 10.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
- MODULEMAP_FILE = "Target Support Files/CryptoSwift/CryptoSwift.modulemap";
- PRODUCT_MODULE_NAME = CryptoSwift;
- PRODUCT_NAME = CryptoSwift;
+ MACH_O_TYPE = staticlib;
+ MODULEMAP_FILE = "Target Support Files/nRFMeshProvision/nRFMeshProvision.modulemap";
+ PRODUCT_MODULE_NAME = nRFMeshProvision;
+ PRODUCT_NAME = nRFMeshProvision;
SDKROOT = iphoneos;
SKIP_INSTALL = YES;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
- SWIFT_VERSION = 5.3;
+ SWIFT_VERSION = 5.5;
TARGETED_DEVICE_FAMILY = "1,2";
- VALIDATE_PRODUCT = YES;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
- name = Release;
+ name = Debug;
};
3490AB06E9C42B9FD2F056F5C1248A3B /* Release */ = {
isa = XCBuildConfiguration;
@@ -2644,38 +2643,6 @@
};
name = Release;
};
- A4EDC716340C7AD665D74A8CDBC60E33 /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 42C87A2C10D519B82B447334DB11C13D /* nRFMeshProvision.debug.xcconfig */;
- buildSettings = {
- CLANG_ENABLE_OBJC_WEAK = NO;
- "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
- "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
- CURRENT_PROJECT_VERSION = 1;
- DEFINES_MODULE = YES;
- DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 1;
- DYLIB_INSTALL_NAME_BASE = "@rpath";
- GCC_PREFIX_HEADER = "Target Support Files/nRFMeshProvision/nRFMeshProvision-prefix.pch";
- INFOPLIST_FILE = "Target Support Files/nRFMeshProvision/nRFMeshProvision-Info.plist";
- INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- IPHONEOS_DEPLOYMENT_TARGET = 10.0;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
- MACH_O_TYPE = staticlib;
- MODULEMAP_FILE = "Target Support Files/nRFMeshProvision/nRFMeshProvision.modulemap";
- PRODUCT_MODULE_NAME = nRFMeshProvision;
- PRODUCT_NAME = nRFMeshProvision;
- SDKROOT = iphoneos;
- SKIP_INSTALL = YES;
- SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
- SWIFT_VERSION = 5.3;
- TARGETED_DEVICE_FAMILY = "1,2";
- VERSIONING_SYSTEM = "apple-generic";
- VERSION_INFO_PREFIX = "";
- };
- name = Debug;
- };
B72E2E98F019EF31127C5DB983A65863 /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = A421192576A8E503AE97BBA464BDB881 /* Pods-nRFMeshProvision_Example.debug.xcconfig */;
@@ -2805,14 +2772,47 @@
};
name = Debug;
};
+ F1B176F8C2F959F474231C3BEDD223FC /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 73F4C6A0E5FCBC427875F5C39371DEF5 /* nRFMeshProvision.release.xcconfig */;
+ buildSettings = {
+ CLANG_ENABLE_OBJC_WEAK = NO;
+ "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
+ "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ GCC_PREFIX_HEADER = "Target Support Files/nRFMeshProvision/nRFMeshProvision-prefix.pch";
+ INFOPLIST_FILE = "Target Support Files/nRFMeshProvision/nRFMeshProvision-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 10.0;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+ MACH_O_TYPE = staticlib;
+ MODULEMAP_FILE = "Target Support Files/nRFMeshProvision/nRFMeshProvision.modulemap";
+ PRODUCT_MODULE_NAME = nRFMeshProvision;
+ PRODUCT_NAME = nRFMeshProvision;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
+ SWIFT_VERSION = 5.5;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VALIDATE_PRODUCT = YES;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Release;
+ };
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
18AA6E810253E026EE68BD1D97B2F9D0 /* Build configuration list for PBXNativeTarget "nRFMeshProvision" */ = {
isa = XCConfigurationList;
buildConfigurations = (
- A4EDC716340C7AD665D74A8CDBC60E33 /* Debug */,
- 119859653F1B910D730619DB115698A3 /* Release */,
+ 2461BFC62EA129FFA322B4F83394D79D /* Debug */,
+ F1B176F8C2F959F474231C3BEDD223FC /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
diff --git a/Example/Pods/Target Support Files/nRFMeshProvision/nRFMeshProvision-Info.plist b/Example/Pods/Target Support Files/nRFMeshProvision/nRFMeshProvision-Info.plist
index 36f2c7e22..c1aea25c2 100644
--- a/Example/Pods/Target Support Files/nRFMeshProvision/nRFMeshProvision-Info.plist
+++ b/Example/Pods/Target Support Files/nRFMeshProvision/nRFMeshProvision-Info.plist
@@ -15,7 +15,7 @@
CFBundlePackageType
FMWK
CFBundleShortVersionString
- 3.1.4
+ 3.1.5
CFBundleSignature
????
CFBundleVersion
diff --git a/Example/nRFMeshProvision.xcodeproj/project.pbxproj b/Example/nRFMeshProvision.xcodeproj/project.pbxproj
index 09ff80c4b..55a064303 100644
--- a/Example/nRFMeshProvision.xcodeproj/project.pbxproj
+++ b/Example/nRFMeshProvision.xcodeproj/project.pbxproj
@@ -838,7 +838,7 @@
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 0830;
- LastUpgradeCheck = 1250;
+ LastUpgradeCheck = 1310;
ORGANIZATIONNAME = CocoaPods;
TargetAttributes = {
607FACCF1AFB9204008FA782 = {
diff --git a/Example/nRFMeshProvision.xcodeproj/xcshareddata/xcschemes/nRFMeshProvision_Example.xcscheme b/Example/nRFMeshProvision.xcodeproj/xcshareddata/xcschemes/nRFMeshProvision_Example.xcscheme
index beb376570..948a93c11 100644
--- a/Example/nRFMeshProvision.xcodeproj/xcshareddata/xcschemes/nRFMeshProvision_Example.xcscheme
+++ b/Example/nRFMeshProvision.xcodeproj/xcshareddata/xcschemes/nRFMeshProvision_Example.xcscheme
@@ -1,6 +1,6 @@
Bluetooth mesh specifications may be found [here](https://www.bluetooth.com/specifications/specs/?status=active&show_latest_version=0&show_latest_version=1&keyword=mesh&filter=).
-> Bluetooth Mesh specification may be found here: https://www.bluetooth.com/specifications/mesh-specifications/
+The library is compatible with
+- **Bluetooth Mesh Profile 1.0.1**,
+- **Mesh Model 1.0.1**,
+- **Mesh Device Properties 2**.
-The library is compatible with version 1.0.1 of the Bluetooth Mesh Profile Specification.
+The mesh network configuration (JSON) is compatible with
+- **Mesh Configuration Database Profile 1.0**.
-This is the second version of the nRF Mesh Provision library for iOS. All features are tested against nRF Mesh SDK and Zephyr based mesh devices.
+All features are tested against *nRF5 SDK for Mesh* and *nRF Connect SDK* based mesh devices.
-> The version 1.x and 2.x of this library are no longer maintained. Please migrate to 3.x to get new features and bug fixes. For changes and migration details see [#295](https://github.com/NordicSemiconductor/IOS-nRF-Mesh-Library/pull/295).
+> The version 1.x and 2.x of this library are no longer maintained. Please migrate to 3.x to get new features and bug fixes.
+For changes and migration details see [#295](https://github.com/NordicSemiconductor/IOS-nRF-Mesh-Library/pull/295).
## Sample app
-The sample application demonstrates how to use the library. It may also be used to configure your Mesh network. Use `pod try` to install and set up the sample app when using CocoaPods.
+The sample application demonstrates how to use the library. It may also be used to configure your Mesh network.
+Use `pod try` to install and set up the sample app when using CocoaPods.
The app and the library are released under BSD-3 license. Feel free to modify them as you want.
The app is available on App Store: https://apps.apple.com/us/app/nrf-mesh/id1380726771
## Supported features
-1. Provisioning with all features that available in Bluetooth Mesh Profile 1.0.1, including OOB Public Key and all types of OOB.
-2. Managing Provisioners, Network Keys, Application Keys, resetting network, etc.
-3. All network layers are working.
-4. Parsing Secure Network beacons.
-5. Adding, removing and refreshing Network and Application Keys to Nodes.
-6. Binging and unbinding Application Keys to Models.
-7. Setting and clearing publication to a Model.
-8. Setting and removing subscriptions to a Model.
-9. Groups, including those with Virtual Addresses.
-10. UI for controlling groups (Generic OnOff and Generic Level (delta) are supported).
-12. Handling Configuration Server messages sent by other Provisioner.
-13. Generic OnOff and Vendor model have dedicated controls in sample app.
-14. Proxy Filter.
-15. IV Index update (handling updates received in Secure Network beacons).
-16. Heartbeats (both as client and server).
-17. Scenes (both as client and server).
-18. Partial export (allows to export only part of the network, for example for a Guest).
-19. [Key Refresh Procedure](https://github.com/NordicSemiconductor/IOS-nRF-Mesh-Library/pull/314) (using *ConfigKeyRefreshPhaseSet* messages, not Secure Network beacon)
+The library supports great majority of features from Bluetooth Mesh 1.0.1 specification:
+
+1. Provisioning with all features available in Bluetooth Mesh Profile 1.0.1, including OOB Public Key
+ and all types of OOB, using GATT bearer.
+2. Configuration, including managing keys, publications, subscription, and hearbeats (both as client and server).
+3. Support for client and server models.
+4. Groups, including those with virtual labels.
+5. Scenes (both as client and server).
+6. Managing proxy filter.
+7. IV Index update (handled by Secure Network beacons).
+8. [Key Refresh Procedure](https://github.com/NordicSemiconductor/IOS-nRF-Mesh-Library/pull/314)
+ (using *ConfigKeyRefreshPhaseSet* messages, not Secure Network beacon).
+9. Hearbeats (both as client and server).
+10. Exporting network state with format compatible to
+ [Configuration Database Profile 1.0](https://www.bluetooth.com/specifications/specs/mesh-configuration-database-profile-1-0/),
+ including partial export.
+11. Option to use own transport layer with default GATT Bearer implementation available.
+
+Most of the features are demonstrated in the sample app nRF Mesh:
+
+1. Provisioning with all available features.
+2. Configuration of local and remote nodes.
+3. Managing network (provisioners, network and application keys, scenes), resetting and exporting configuration.
+4. Managing groups, including those with virtual labels.
+5. Sending group messages.
+6. UI for local models, which include:
+ - Generic OnOff Client and Server,
+ - Generic Level Client and Server,
+ - Simple OnOff vendor model by Nordic.
+7. Support for some server models:
+ - Generic OnOff,
+ - Generic Level,
+ - Vendor models.
+8. Scenes, both as client and server.
+9. Automatic connection to nearby nodes and automatic proxy filter management.
## NOT (yet) supported features
-1. Many SIG defined models, except from supported ones.
-2. IV Index update (initiation).
-3. Health server messages.
-4. Remote Provisioning.
+The following features are not (yet) supported:
+
+1. The rest of models defined by Bluetooth SIG - PRs are welcome!
+2. IV Index update (initiation) - not a top priority, as other nodes may initiate the update.
+3. Health server messages - in our TODO list.
+4. Remote provisioning - in our TODO list.
+5. Device Firmware Update (DFU) - in our TODO list.
## Documentation
@@ -62,7 +88,7 @@ The documentation for this library may be found [here](Documentation/README.md).
## Optional
-* nrf52832 or nrf52840 based Development Kit(s) to test the sample firmwares on.
+* nrf5 based Development Kit(s) to test the sample firmwares.
## Feedback
@@ -70,4 +96,4 @@ Any feedback is more than welcome. Please, test the app, test the library and ch
## License
-BSD 3-Clause License
+BSD 3-Clause License.
diff --git a/nRFMeshProvision.podspec b/nRFMeshProvision.podspec
index 528821104..fcbe6ea10 100755
--- a/nRFMeshProvision.podspec
+++ b/nRFMeshProvision.podspec
@@ -9,10 +9,10 @@
Pod::Spec.new do |s|
s.name = 'nRFMeshProvision'
- s.version = '3.1.4'
+ s.version = '3.1.5'
s.summary = 'A Bluetooth Mesh library'
s.description = <<-DESC
- nRF Mesh is a Bluetooth Mesh compliant library that has many features such as provisioning, configuration and control of Bluetooth Mesh compliant nodes.
+ nRF Mesh is a Bluetooth mesh compliant library supporting features such as provisioning, configuration and control of Bluetooth mesh nodes.
DESC
s.homepage = 'https://github.com/NordicSemiconductor/IOS-nRF-Mesh-Library'
s.license = { :type => 'BSD-3-Clause', :file => 'LICENSE' }
@@ -22,7 +22,7 @@ Pod::Spec.new do |s|
s.ios.deployment_target = '10.0'
s.osx.deployment_target = '10.15'
s.static_framework = true
- s.swift_versions = ['4.2', '5.0', '5.1', '5.2', '5.3']
+ s.swift_versions = ['4.2', '5.0', '5.1', '5.2', '5.3', '5.4', '5.5']
s.source_files = 'nRFMeshProvision/Classes/**/*'
s.dependency 'CryptoSwift', '= 1.4.0'
s.frameworks = 'CoreBluetooth'
diff --git a/nRFMeshProvision/Classes/Bearer/GATT/ProxyProtocolHandler.swift b/nRFMeshProvision/Classes/Bearer/GATT/ProxyProtocolHandler.swift
index c7ac5b322..fcc734931 100644
--- a/nRFMeshProvision/Classes/Bearer/GATT/ProxyProtocolHandler.swift
+++ b/nRFMeshProvision/Classes/Bearer/GATT/ProxyProtocolHandler.swift
@@ -67,6 +67,10 @@ public class ProxyProtocolHandler {
private var buffer: Data?
private var bufferType: PduType?
+ public init() {
+ // Empty public init.
+ }
+
/// Segments the given data with given message type to 1+ messages
/// where all but the last one are of the MTU size and the last one
/// is MTU size or smaller.
diff --git a/nRFMeshProvision/Classes/Layers/Access Layer/AccessLayer.swift b/nRFMeshProvision/Classes/Layers/Access Layer/AccessLayer.swift
index 00553f29b..af325cf26 100644
--- a/nRFMeshProvision/Classes/Layers/Access Layer/AccessLayer.swift
+++ b/nRFMeshProvision/Classes/Layers/Access Layer/AccessLayer.swift
@@ -170,7 +170,8 @@ internal class AccessLayer {
let index = mutex.sync(execute: {
reliableMessageContexts.firstIndex(where: {
$0.source == upperTransportPdu.destination &&
- $0.request.responseOpCode == accessPdu.opCode
+ $0.request.responseOpCode == accessPdu.opCode &&
+ $0.destination == upperTransportPdu.source
})
}) {
mutex.sync {
@@ -594,12 +595,14 @@ private extension AccessLayer {
let ack = AcknowledgmentContext(for: request,
sentFrom: pdu.source, to: pdu.destination.address,
- repeatAfter: initialDelay, repeatBlock: {
+ repeatAfter: initialDelay, repeatBlock: { [weak self] in
+ guard let self = self else { return }
if !self.networkManager.upperTransportLayer.isReceivingResponse(from: pdu.destination.address) {
self.logger?.d(.access, "Resending \(pdu)")
self.networkManager.upperTransportLayer.send(pdu, withTtl: initialTtl, using: keySet)
}
- }, timeout: timeout, timeoutBlock: {
+ }, timeout: timeout, timeoutBlock: { [weak self] in
+ guard let self = self else { return }
self.logger?.w(.access, "Response to \(pdu) not received (timeout)")
let category: LogCategory = request is AcknowledgedConfigMessage ? .foundationModel : .model
self.logger?.w(category, "\(request) sent from: \(pdu.source.hex), to: \(pdu.destination.hex) timed out")
diff --git a/nRFMeshProvision/Classes/Layers/MessageHandle.swift b/nRFMeshProvision/Classes/Layers/MessageHandle.swift
index 32c643942..10b854ce8 100644
--- a/nRFMeshProvision/Classes/Layers/MessageHandle.swift
+++ b/nRFMeshProvision/Classes/Layers/MessageHandle.swift
@@ -41,10 +41,11 @@ import Foundation
/// The handle contains information about the message that was sent:
/// its opcode, source and destination addresses.
public struct MessageHandle {
- let opCode: UInt32
- let source: Address
- let destination: Address
weak var manager: MeshNetworkManager?
+
+ public let opCode: UInt32
+ public let source: Address
+ public let destination: Address
init(for message: MeshMessage,
sentFrom source: Address, to destination: Address,
diff --git a/nRFMeshProvision/Classes/Utils/MeshLoggerDelegate.swift b/nRFMeshProvision/Classes/Utils/MeshLoggerDelegate.swift
index 4d677d848..bc61f6262 100644
--- a/nRFMeshProvision/Classes/Utils/MeshLoggerDelegate.swift
+++ b/nRFMeshProvision/Classes/Utils/MeshLoggerDelegate.swift
@@ -90,32 +90,32 @@ public protocol LoggerDelegate: AnyObject {
internal extension LoggerDelegate {
- func d(_ category: LogCategory, _ message: String) {
- log(message: message, ofCategory: category, withLevel: .debug)
+ func d(_ category: LogCategory, _ message: @autoclosure () -> String) {
+ log(message: message(), ofCategory: category, withLevel: .debug)
}
- func v(_ category: LogCategory, _ message: String) {
- log(message: message, ofCategory: category, withLevel: .verbose)
+ func v(_ category: LogCategory, _ message: @autoclosure () -> String) {
+ log(message: message(), ofCategory: category, withLevel: .verbose)
}
- func i(_ category: LogCategory, _ message: String) {
- log(message: message, ofCategory: category, withLevel: .info)
+ func i(_ category: LogCategory, _ message: @autoclosure () -> String) {
+ log(message: message(), ofCategory: category, withLevel: .info)
}
- func a(_ category: LogCategory, _ message: String) {
- log(message: message, ofCategory: category, withLevel: .application)
+ func a(_ category: LogCategory, _ message: @autoclosure () -> String) {
+ log(message: message(), ofCategory: category, withLevel: .application)
}
- func w(_ category: LogCategory, _ message: String) {
- log(message: message, ofCategory: category, withLevel: .warning)
+ func w(_ category: LogCategory, _ message: @autoclosure () -> String) {
+ log(message: message(), ofCategory: category, withLevel: .warning)
}
func w(_ category: LogCategory, _ error: Error) {
log(message: error.localizedDescription, ofCategory: category, withLevel: .warning)
}
- func e(_ category: LogCategory, _ message: String) {
- log(message: message, ofCategory: category, withLevel: .error)
+ func e(_ category: LogCategory, _ message: @autoclosure () -> String) {
+ log(message: message(), ofCategory: category, withLevel: .error)
}
func e(_ category: LogCategory, _ error: Error) {