From 5dc0d8f8f6ae5fd43bbce92d15c1341d75ca3cea Mon Sep 17 00:00:00 2001 From: guoling Date: Fri, 13 Nov 2020 22:29:32 +0800 Subject: [PATCH] prepare for v1.2.5 --- .../MMKV/mmkv/src/main/cpp/flutter-bridge.cpp | 4 ++ .../MMKV/mmkv/src/main/cpp/native-bridge.cpp | 5 +++ .../src/main/java/com/tencent/mmkv/MMKV.java | 2 + .../com/tencent/mmkvdemo/MyApplication.java | 1 + CHANGELOG.md | 14 +++++++ Core/MMKVPredef.h | 2 +- MMKV.podspec | 4 +- MMKVAppExtension.podspec | 4 +- MMKVCore.podspec | 2 +- MMKVCoreFlutter.podspec | 40 ------------------- MMKVWatchExtension.podspec | 4 +- README.md | 6 +-- iOS/MMKV/MMKV.xcodeproj/project.pbxproj | 12 +++--- iOS/MMKV/MMKV/MMKV.h | 2 + iOS/MMKV/MMKV/libMMKV.mm | 4 ++ iOS/MMKVDemo/MMKVDemo/AppDelegate.m | 2 + readme_cn.md | 4 +- 17 files changed, 53 insertions(+), 59 deletions(-) delete mode 100644 MMKVCoreFlutter.podspec diff --git a/Android/MMKV/mmkv/src/main/cpp/flutter-bridge.cpp b/Android/MMKV/mmkv/src/main/cpp/flutter-bridge.cpp index 4fd0d958..d4b9968f 100644 --- a/Android/MMKV/mmkv/src/main/cpp/flutter-bridge.cpp +++ b/Android/MMKV/mmkv/src/main/cpp/flutter-bridge.cpp @@ -378,6 +378,10 @@ MMKV_EXPORT int32_t pageSize() { return static_cast(DEFAULT_MMAP_SIZE); } +MMKV_EXPORT const char *version() { + return MMKV_VERSION; +} + MMKV_EXPORT void trim(void *handle) { MMKV *kv = static_cast(handle); if (kv) { diff --git a/Android/MMKV/mmkv/src/main/cpp/native-bridge.cpp b/Android/MMKV/mmkv/src/main/cpp/native-bridge.cpp index cbc5609b..e89e9ec0 100644 --- a/Android/MMKV/mmkv/src/main/cpp/native-bridge.cpp +++ b/Android/MMKV/mmkv/src/main/cpp/native-bridge.cpp @@ -645,6 +645,10 @@ MMKV_JNI jint pageSize(JNIEnv *env, jclass type) { return DEFAULT_MMAP_SIZE; } +MMKV_JNI jstring version(JNIEnv *env, jclass type) { + return string2jstring(env, MMKV_VERSION); +} + # ifndef MMKV_DISABLE_CRYPT MMKV_JNI jstring cryptKey(JNIEnv *env, jobject instance) { @@ -778,6 +782,7 @@ static JNINativeMethod g_methods[] = { # endif {"pageSize", "()I", (void *) mmkv::pageSize}, {"mmapID", "()Ljava/lang/String;", (void *) mmkv::mmapID}, + {"version", "()Ljava/lang/String;", (void *) mmkv::version}, {"lock", "()V", (void *) mmkv::lock}, {"unlock", "()V", (void *) mmkv::unlock}, {"tryLock", "()Z", (void *) mmkv::tryLock}, diff --git a/Android/MMKV/mmkv/src/main/java/com/tencent/mmkv/MMKV.java b/Android/MMKV/mmkv/src/main/java/com/tencent/mmkv/MMKV.java index 423484bb..47c0d7f3 100644 --- a/Android/MMKV/mmkv/src/main/java/com/tencent/mmkv/MMKV.java +++ b/Android/MMKV/mmkv/src/main/java/com/tencent/mmkv/MMKV.java @@ -301,6 +301,8 @@ public class MMKV implements SharedPreferences, SharedPreferences.Editor { // get device's page size public static native int pageSize(); + public static native String version(); + public native String mmapID(); public native void lock(); diff --git a/Android/MMKV/mmkvdemo/src/main/java/com/tencent/mmkvdemo/MyApplication.java b/Android/MMKV/mmkvdemo/src/main/java/com/tencent/mmkvdemo/MyApplication.java index f98c0ed2..1541f469 100644 --- a/Android/MMKV/mmkvdemo/src/main/java/com/tencent/mmkvdemo/MyApplication.java +++ b/Android/MMKV/mmkvdemo/src/main/java/com/tencent/mmkvdemo/MyApplication.java @@ -24,6 +24,7 @@ public class MyApplication extends Application implements MMKVHandler, MMKVConte } }, MMKVLogLevel.LevelInfo); Log.i("MMKV", "mmkv root: " + rootDir); + Log.i("MMKV", "mmkv version: " + MMKV.version()); // set log level MMKV.setLogLevel(MMKVLogLevel.LevelInfo); diff --git a/CHANGELOG.md b/CHANGELOG.md index 8198d82a..18a3ce83 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,19 @@ # MMKV Change Log +## v1.2.5 / 2020-11-13 +This is a pre-version for Flutter. The official Flutter plugin of MMKV will come out soon. Stay Tune! + +### iOS / macOS +* Fix an assert error of encrypted MMKV when encoding some `` objects. +* Fix a potential leak when decoding duplicated keys from the file. +* Add `+[MMKV pageSize]`, `+[MMKV version]` methods. +* Add `+[MMKV defaultMMKVWithCryptKey:]`, you can encrypt the default MMKV instance now, just like the Android users who already enjoy this for a long time. +* Rename `-[MMKV getValueSizeForKey:]` to `-[MMKV getValueSizeForKey: actualSize:]` to align with Android interface. + +### Android +* Fix a potential crash when getting MMKV instances in multi-thread at the same time. +* Add `MMKV.version()` method. + ## v1.2.4 / 2020-10-21 This is a hotfix mainly for iOS. diff --git a/Core/MMKVPredef.h b/Core/MMKVPredef.h index 5cbe7407..68f97c63 100755 --- a/Core/MMKVPredef.h +++ b/Core/MMKVPredef.h @@ -33,7 +33,7 @@ #include #include -constexpr auto MMKV_VERSION = "v1.2.4"; +constexpr auto MMKV_VERSION = "v1.2.5"; #ifdef DEBUG # define MMKV_DEBUG diff --git a/MMKV.podspec b/MMKV.podspec index 8838ae62..64d88cb9 100644 --- a/MMKV.podspec +++ b/MMKV.podspec @@ -1,7 +1,7 @@ Pod::Spec.new do |s| s.name = "MMKV" - s.version = "1.2.4" + s.version = "1.2.5" s.summary = "MMKV is a cross-platform key-value storage framework developed by WeChat." s.description = <<-DESC @@ -30,7 +30,7 @@ Pod::Spec.new do |s| "CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF" => "NO", } - s.dependency 'MMKVCore', '~> 1.2.4' + s.dependency 'MMKVCore', '~> 1.2.5' end diff --git a/MMKVAppExtension.podspec b/MMKVAppExtension.podspec index 9eb341d0..6c6e8902 100644 --- a/MMKVAppExtension.podspec +++ b/MMKVAppExtension.podspec @@ -1,7 +1,7 @@ Pod::Spec.new do |s| s.name = "MMKVAppExtension" - s.version = "1.2.4" + s.version = "1.2.5" s.summary = "MMKV is a cross-platform key-value storage framework developed by WeChat." s.module_name = "MMKVAppExtension" @@ -31,7 +31,7 @@ Pod::Spec.new do |s| "GCC_PREPROCESSOR_DEFINITIONS" => "MMKV_IOS_EXTENSION", } - s.dependency 'MMKVCore', '~> 1.2.4' + s.dependency 'MMKVCore', '~> 1.2.5' end diff --git a/MMKVCore.podspec b/MMKVCore.podspec index 5c89e3ee..4fc9fe8c 100644 --- a/MMKVCore.podspec +++ b/MMKVCore.podspec @@ -1,7 +1,7 @@ Pod::Spec.new do |s| s.name = "MMKVCore" - s.version = "1.2.4" + s.version = "1.2.5" s.summary = "MMKVCore for MMKV. MMKV is a cross-platform key-value storage framework developed by WeChat." s.description = <<-DESC diff --git a/MMKVCoreFlutter.podspec b/MMKVCoreFlutter.podspec deleted file mode 100644 index f04c3c2d..00000000 --- a/MMKVCoreFlutter.podspec +++ /dev/null @@ -1,40 +0,0 @@ -Pod::Spec.new do |s| - - s.name = "MMKVCoreFlutter" - s.version = "1.2.4" - s.summary = "MMKVCore for MMKV. MMKV is a cross-platform key-value storage framework developed by WeChat." - - s.description = <<-DESC - Don't use this library directly. Use MMKV instead. - MMKV is an efficient, complete, easy-to-use mobile key-value storage framework used in the WeChat application. - It can be a replacement for NSUserDefaults & SQLite. - DESC - - s.homepage = "https://github.com/Tencent/MMKV" - s.license = { :type => "BSD 3-Clause", :file => "LICENSE.TXT"} - s.author = { "guoling" => "guoling@tencent.com" } - - s.ios.deployment_target = "9.0" - s.osx.deployment_target = "10.9" - s.watchos.deployment_target = "2.0" - -#s.source = { :git => "https://github.com/Tencent/MMKV.git", :tag => "v#{s.version}" } - s.source = { :git => "https://github.com/Tencent/MMKV.git", :branch => "dev" } - s.source_files = "Core", "Core/*.{h,cpp,hpp}", "Core/aes/*", "Core/aes/openssl/*", "Core/crc32/*.h" - s.public_header_files = "Core/MMBuffer.h", "Core/MMKV.h", "Core/MMKVLog.h", "Core/MMKVPredef.h", "Core/PBUtility.h", "Core/ScopedLock.hpp", "Core/ThreadLock.h", "Core/aes/openssl/openssl_md5.h", "Core/aes/openssl/openssl_opensslconf.h" - s.compiler_flags = '-x objective-c++' - - s.requires_arc = ['Core/MemoryFile.cpp', 'Core/ThreadLock.cpp', 'Core/InterProcessLock.cpp', 'Core/MMKVLog.cpp', 'Core/PBUtility.cpp', 'Core/MemoryFile_OSX.cpp', 'aes/openssl/openssl_cfb128.cpp', 'aes/openssl/openssl_aes_core.cpp', 'aes/openssl/openssl_md5_one.cpp', 'aes/openssl/openssl_md5_dgst.cpp', 'aes/AESCrypt.cpp'] - - s.framework = "CoreFoundation" - s.ios.frameworks = "UIKit" - s.libraries = "z", "c++" - s.pod_target_xcconfig = { - "CLANG_CXX_LANGUAGE_STANDARD" => "gnu++17", - "CLANG_CXX_LIBRARY" => "libc++", - "CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF" => "NO", - "GCC_PREPROCESSOR_DEFINITIONS" => "FORCE_POSIX", - } - -end - diff --git a/MMKVWatchExtension.podspec b/MMKVWatchExtension.podspec index 35c79ee2..d67281d4 100644 --- a/MMKVWatchExtension.podspec +++ b/MMKVWatchExtension.podspec @@ -1,7 +1,7 @@ Pod::Spec.new do |s| s.name = "MMKVWatchExtension" - s.version = "1.2.4" + s.version = "1.2.5" s.summary = "MMKV is a cross-platform key-value storage framework developed by WeChat." s.module_name = "MMKVWatchExtension" @@ -31,7 +31,7 @@ Pod::Spec.new do |s| "GCC_PREPROCESSOR_DEFINITIONS" => "MMKV_IOS_EXTENSION", } - s.dependency 'MMKVCore', '~> 1.2.4' + s.dependency 'MMKVCore', '~> 1.2.5' end diff --git a/README.md b/README.md index 6bc18b56..4420d45d 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ [![license](https://img.shields.io/badge/license-BSD_3-brightgreen.svg?style=flat)](https://github.com/Tencent/MMKV/blob/master/LICENSE.TXT) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/Tencent/MMKV/pulls) -[![Release Version](https://img.shields.io/badge/release-1.2.4-brightgreen.svg)](https://github.com/Tencent/MMKV/releases) +[![Release Version](https://img.shields.io/badge/release-1.2.5-brightgreen.svg)](https://github.com/Tencent/MMKV/releases) [![Platform](https://img.shields.io/badge/Platform-%20Android%20%7C%20iOS%2FmacOS%20%7C%20Win32%20%7C%20POSIX-brightgreen.svg)](https://github.com/Tencent/MMKV/wiki/home) 中文版本请参看[这里](./readme_cn.md) @@ -28,8 +28,8 @@ Add the following lines to `build.gradle` on your app module: ```gradle dependencies { - implementation 'com.tencent:mmkv-static:1.2.4' - // replace "1.2.4" with any available version + implementation 'com.tencent:mmkv-static:1.2.5' + // replace "1.2.5" with any available version } ``` diff --git a/iOS/MMKV/MMKV.xcodeproj/project.pbxproj b/iOS/MMKV/MMKV.xcodeproj/project.pbxproj index dde5693c..2836faed 100644 --- a/iOS/MMKV/MMKV.xcodeproj/project.pbxproj +++ b/iOS/MMKV/MMKV.xcodeproj/project.pbxproj @@ -485,7 +485,7 @@ IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.9; - MARKETING_VERSION = 1.2.4; + MARKETING_VERSION = 1.2.5; "OTHER_LDFLAGS[sdk=iphoneos*]" = ( "-framework", UIKit, @@ -531,7 +531,7 @@ IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.9; - MARKETING_VERSION = 1.2.4; + MARKETING_VERSION = 1.2.5; "OTHER_LDFLAGS[sdk=iphoneos*]" = ( "-framework", UIKit, @@ -742,7 +742,7 @@ IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.9; - MARKETING_VERSION = 1.2.4; + MARKETING_VERSION = 1.2.5; "OTHER_LDFLAGS[sdk=iphoneos*]" = ( "-framework", UIKit, @@ -782,7 +782,7 @@ IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.9; - MARKETING_VERSION = 1.2.4; + MARKETING_VERSION = 1.2.5; "OTHER_LDFLAGS[sdk=iphoneos*]" = ( "-framework", UIKit, @@ -829,7 +829,7 @@ IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.9; - MARKETING_VERSION = 1.2.4; + MARKETING_VERSION = 1.2.5; "OTHER_LDFLAGS[sdk=iphoneos*]" = ( "-framework", UIKit, @@ -878,7 +878,7 @@ IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.9; - MARKETING_VERSION = 1.2.4; + MARKETING_VERSION = 1.2.5; "OTHER_LDFLAGS[sdk=iphoneos*]" = ( "-framework", UIKit, diff --git a/iOS/MMKV/MMKV/MMKV.h b/iOS/MMKV/MMKV/MMKV.h index 1e48847f..93b6427c 100644 --- a/iOS/MMKV/MMKV/MMKV.h +++ b/iOS/MMKV/MMKV/MMKV.h @@ -179,6 +179,8 @@ NS_ASSUME_NONNULL_BEGIN + (size_t)pageSize; ++ (NSString *)version; + - (void)enumerateKeys:(void (^)(NSString *key, BOOL *stop))block; - (NSArray *)allKeys; diff --git a/iOS/MMKV/MMKV/libMMKV.mm b/iOS/MMKV/MMKV/libMMKV.mm index 2e3a65fe..3a3749a8 100644 --- a/iOS/MMKV/MMKV/libMMKV.mm +++ b/iOS/MMKV/MMKV/libMMKV.mm @@ -503,6 +503,10 @@ static BOOL g_hasCalledInitializeMMKV = NO; return mmkv::DEFAULT_MMAP_SIZE; } ++ (NSString *)version { + return [NSString stringWithCString:MMKV_VERSION encoding:NSASCIIStringEncoding]; +} + - (void)enumerateKeys:(void (^)(NSString *key, BOOL *stop))block { m_mmkv->enumerateKeys(block); } diff --git a/iOS/MMKVDemo/MMKVDemo/AppDelegate.m b/iOS/MMKVDemo/MMKVDemo/AppDelegate.m index c9a4c985..c947d9d8 100644 --- a/iOS/MMKVDemo/MMKVDemo/AppDelegate.m +++ b/iOS/MMKVDemo/MMKVDemo/AppDelegate.m @@ -43,6 +43,8 @@ // you can turn off logging by passing MMKVLogNone [MMKV initializeMMKV:rootDir groupDir:groupDir logLevel:MMKVLogInfo]; + + NSLog(@"MMKV version: %@", [MMKV version]); } // register handler diff --git a/readme_cn.md b/readme_cn.md index a6f555bd..65553f43 100644 --- a/readme_cn.md +++ b/readme_cn.md @@ -22,8 +22,8 @@ MMKV 是基于 mmap 内存映射的 key-value 组件,底层序列化/反序列 ```gradle dependencies { - implementation 'com.tencent:mmkv-static:1.2.4' - // replace "1.2.4" with any available version + implementation 'com.tencent:mmkv-static:1.2.5' + // replace "1.2.5" with any available version } ```