diff --git a/CHANGELOG.md b/CHANGELOG.md
index 04708a6..3bc5199 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 2.0.0
+
+* Changed package name to `security_toolkit`.
+
## 1.1.0
* Migrates plugin to built-in Kotlin & AGP 9.
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 54cdd68..f56c3a8 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -30,7 +30,7 @@ for frequent breaking changes.
Whenever you wish to update the Pigeon bindings, simply run:
```shell
-dart run pigeon --input pigeons/security_suite_messages.dart
+dart run pigeon --input pigeons/security_toolkit_messages.dart
```
Generated pigeon bindings are source-controlled in this package due to it being published
diff --git a/LICENSE b/LICENSE
index 3e02b1d..3718727 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-flutter_security_suite
+security_toolkit
MIT License
diff --git a/README.md b/README.md
index 5fbc942..dc218ba 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,3 @@
-# Flutter Security Suite
-
> [!IMPORTANT]
> Whilst this plugin is open-source, and you are free to use according to the license, this is
> primarily a convenience for internal Apadmi projects. Our priorities responding to issues
@@ -27,9 +25,9 @@ Usage of this plugin has the following requirements:
## Usage
-A single class, `SecuritySuite`, is exposed which has a number of static methods to perform the
+A single class, `SecurityToolkit`, is exposed which has a number of static methods to perform the
checks listed above. That said, most of the time you'll simply want to use
-`SecuritySuite.checkSecureEnvironment()` for a single, comprehensive check.
+`SecurityToolkit.checkSecureEnvironment()` for a single, comprehensive check.
## Considerations
diff --git a/android/build.gradle.kts b/android/build.gradle.kts
index 30ce784..d663785 100644
--- a/android/build.gradle.kts
+++ b/android/build.gradle.kts
@@ -1,4 +1,4 @@
-group = "com.apadmi.flutter_security_suite"
+group = "com.apadmi.security_toolkit"
version = "1.0-SNAPSHOT"
buildscript {
@@ -26,7 +26,7 @@ plugins {
}
android {
- namespace = "com.apadmi.flutter_security_suite"
+ namespace = "com.apadmi.security_toolkit"
compileSdk = 36
diff --git a/android/settings.gradle.kts b/android/settings.gradle.kts
index c8fa1e6..d4206ab 100644
--- a/android/settings.gradle.kts
+++ b/android/settings.gradle.kts
@@ -1 +1 @@
-rootProject.name = "flutter_security_suite"
\ No newline at end of file
+rootProject.name = "security_toolkit"
\ No newline at end of file
diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml
index 32de33b..3c1710c 100644
--- a/android/src/main/AndroidManifest.xml
+++ b/android/src/main/AndroidManifest.xml
@@ -1,3 +1,3 @@
+ package="com.apadmi.security_toolkit">
diff --git a/android/src/main/kotlin/com/apadmi/flutter_security_suite/EmulatorChecker.kt b/android/src/main/kotlin/com/apadmi/security_toolkit/EmulatorChecker.kt
similarity index 99%
rename from android/src/main/kotlin/com/apadmi/flutter_security_suite/EmulatorChecker.kt
rename to android/src/main/kotlin/com/apadmi/security_toolkit/EmulatorChecker.kt
index ede2c8a..6c2be3c 100644
--- a/android/src/main/kotlin/com/apadmi/flutter_security_suite/EmulatorChecker.kt
+++ b/android/src/main/kotlin/com/apadmi/security_toolkit/EmulatorChecker.kt
@@ -1,4 +1,4 @@
-package com.apadmi.flutter_security_suite
+package com.apadmi.security_toolkit
import android.os.Build
import android.view.inputmethod.InputMethodManager
diff --git a/android/src/main/kotlin/com/apadmi/flutter_security_suite/SecuritySuiteApi.g.kt b/android/src/main/kotlin/com/apadmi/security_toolkit/SecurityToolkitApi.g.kt
similarity index 73%
rename from android/src/main/kotlin/com/apadmi/flutter_security_suite/SecuritySuiteApi.g.kt
rename to android/src/main/kotlin/com/apadmi/security_toolkit/SecurityToolkitApi.g.kt
index e5782c6..af7c844 100644
--- a/android/src/main/kotlin/com/apadmi/flutter_security_suite/SecuritySuiteApi.g.kt
+++ b/android/src/main/kotlin/com/apadmi/security_toolkit/SecurityToolkitApi.g.kt
@@ -1,4 +1,4 @@
-// Autogenerated from Pigeon (v25.3.1), do not edit directly.
+// Autogenerated from Pigeon (v26.3.4), do not edit directly.
// See also: https://pub.dev/packages/pigeon
@file:Suppress("UNCHECKED_CAST", "ArrayInDataClass")
@@ -12,14 +12,14 @@ import io.flutter.plugin.common.StandardMethodCodec
import io.flutter.plugin.common.StandardMessageCodec
import java.io.ByteArrayOutputStream
import java.nio.ByteBuffer
-private object SecuritySuiteApiPigeonUtils {
+private object SecurityToolkitApiPigeonUtils {
fun wrapResult(result: Any?): List {
return listOf(result)
}
fun wrapError(exception: Throwable): List {
- return if (exception is FlutterSecuritySuiteError) {
+ return if (exception is SecurityToolkitError) {
listOf(
exception.code,
exception.message,
@@ -41,12 +41,12 @@ private object SecuritySuiteApiPigeonUtils {
* @property message The error message.
* @property details The error details. Must be a datatype supported by the api codec.
*/
-class FlutterSecuritySuiteError (
+class SecurityToolkitError (
val code: String,
override val message: String? = null,
val details: Any? = null
-) : Throwable()
-private open class SecuritySuiteApiPigeonCodec : StandardMessageCodec() {
+) : RuntimeException()
+private open class SecurityToolkitApiPigeonCodec : StandardMessageCodec() {
override fun readValueOfType(type: Byte, buffer: ByteBuffer): Any? {
return super.readValueOfType(type, buffer)
}
@@ -56,29 +56,29 @@ private open class SecuritySuiteApiPigeonCodec : StandardMessageCodec() {
}
/** Generated interface from Pigeon that represents a handler of messages from Flutter. */
-interface SecuritySuiteApi {
+interface SecurityToolkitApi {
fun isRooted(): Boolean
fun isDebugged(): Boolean
fun isLikelyEmulator(): Boolean
fun isReverseEngineered(): Boolean
companion object {
- /** The codec used by SecuritySuiteApi. */
+ /** The codec used by SecurityToolkitApi. */
val codec: MessageCodec by lazy {
- SecuritySuiteApiPigeonCodec()
+ SecurityToolkitApiPigeonCodec()
}
- /** Sets up an instance of `SecuritySuiteApi` to handle messages through the `binaryMessenger`. */
+ /** Sets up an instance of `SecurityToolkitApi` to handle messages through the `binaryMessenger`. */
@JvmOverloads
- fun setUp(binaryMessenger: BinaryMessenger, api: SecuritySuiteApi?, messageChannelSuffix: String = "") {
+ fun setUp(binaryMessenger: BinaryMessenger, api: SecurityToolkitApi?, messageChannelSuffix: String = "") {
val separatedMessageChannelSuffix = if (messageChannelSuffix.isNotEmpty()) ".$messageChannelSuffix" else ""
run {
- val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.flutter_security_suite.SecuritySuiteApi.isRooted$separatedMessageChannelSuffix", codec)
+ val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.security_toolkit.SecurityToolkitApi.isRooted$separatedMessageChannelSuffix", codec)
if (api != null) {
channel.setMessageHandler { _, reply ->
val wrapped: List = try {
listOf(api.isRooted())
} catch (exception: Throwable) {
- SecuritySuiteApiPigeonUtils.wrapError(exception)
+ SecurityToolkitApiPigeonUtils.wrapError(exception)
}
reply.reply(wrapped)
}
@@ -87,13 +87,13 @@ interface SecuritySuiteApi {
}
}
run {
- val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.flutter_security_suite.SecuritySuiteApi.isDebugged$separatedMessageChannelSuffix", codec)
+ val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.security_toolkit.SecurityToolkitApi.isDebugged$separatedMessageChannelSuffix", codec)
if (api != null) {
channel.setMessageHandler { _, reply ->
val wrapped: List = try {
listOf(api.isDebugged())
} catch (exception: Throwable) {
- SecuritySuiteApiPigeonUtils.wrapError(exception)
+ SecurityToolkitApiPigeonUtils.wrapError(exception)
}
reply.reply(wrapped)
}
@@ -102,13 +102,13 @@ interface SecuritySuiteApi {
}
}
run {
- val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.flutter_security_suite.SecuritySuiteApi.isLikelyEmulator$separatedMessageChannelSuffix", codec)
+ val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.security_toolkit.SecurityToolkitApi.isLikelyEmulator$separatedMessageChannelSuffix", codec)
if (api != null) {
channel.setMessageHandler { _, reply ->
val wrapped: List = try {
listOf(api.isLikelyEmulator())
} catch (exception: Throwable) {
- SecuritySuiteApiPigeonUtils.wrapError(exception)
+ SecurityToolkitApiPigeonUtils.wrapError(exception)
}
reply.reply(wrapped)
}
@@ -117,13 +117,13 @@ interface SecuritySuiteApi {
}
}
run {
- val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.flutter_security_suite.SecuritySuiteApi.isReverseEngineered$separatedMessageChannelSuffix", codec)
+ val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.security_toolkit.SecurityToolkitApi.isReverseEngineered$separatedMessageChannelSuffix", codec)
if (api != null) {
channel.setMessageHandler { _, reply ->
val wrapped: List = try {
listOf(api.isReverseEngineered())
} catch (exception: Throwable) {
- SecuritySuiteApiPigeonUtils.wrapError(exception)
+ SecurityToolkitApiPigeonUtils.wrapError(exception)
}
reply.reply(wrapped)
}
diff --git a/android/src/main/kotlin/com/apadmi/flutter_security_suite/SecuritySuiteImpl.kt b/android/src/main/kotlin/com/apadmi/security_toolkit/SecurityToolkitImpl.kt
similarity index 84%
rename from android/src/main/kotlin/com/apadmi/flutter_security_suite/SecuritySuiteImpl.kt
rename to android/src/main/kotlin/com/apadmi/security_toolkit/SecurityToolkitImpl.kt
index 7b9fdc1..f86cf3d 100644
--- a/android/src/main/kotlin/com/apadmi/flutter_security_suite/SecuritySuiteImpl.kt
+++ b/android/src/main/kotlin/com/apadmi/security_toolkit/SecurityToolkitImpl.kt
@@ -1,15 +1,15 @@
-package com.apadmi.flutter_security_suite
+package com.apadmi.security_toolkit
-import SecuritySuiteApi
+import SecurityToolkitApi
import android.content.Context
import android.content.pm.ApplicationInfo
import com.scottyab.rootbeer.RootBeer
-class SecuritySuiteImpl(
+class SecurityToolkitImpl(
private val context: Context,
private val emulatorChecker: EmulatorChecker,
private val rootBeer: RootBeer,
-): SecuritySuiteApi {
+): SecurityToolkitApi {
override fun isRooted(): Boolean = rootBeer.isRooted
override fun isDebugged(): Boolean = BuildConfig.DEBUG || context.applicationContext.applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE != 0
diff --git a/android/src/main/kotlin/com/apadmi/flutter_security_suite/FlutterSecuritySuitePlugin.kt b/android/src/main/kotlin/com/apadmi/security_toolkit/SecurityToolkitPlugin.kt
similarity index 62%
rename from android/src/main/kotlin/com/apadmi/flutter_security_suite/FlutterSecuritySuitePlugin.kt
rename to android/src/main/kotlin/com/apadmi/security_toolkit/SecurityToolkitPlugin.kt
index 3e31f3d..abde593 100644
--- a/android/src/main/kotlin/com/apadmi/flutter_security_suite/FlutterSecuritySuitePlugin.kt
+++ b/android/src/main/kotlin/com/apadmi/security_toolkit/SecurityToolkitPlugin.kt
@@ -1,16 +1,16 @@
-package com.apadmi.flutter_security_suite
+package com.apadmi.security_toolkit
-import SecuritySuiteApi
+import SecurityToolkitApi
import io.flutter.embedding.engine.plugins.FlutterPlugin
import io.flutter.plugin.common.MethodCall
import io.flutter.plugin.common.MethodChannel
import io.flutter.plugin.common.MethodChannel.MethodCallHandler
import io.flutter.plugin.common.MethodChannel.Result
-class FlutterSecuritySuitePlugin: FlutterPlugin {
+class SecurityToolkitPlugin: FlutterPlugin {
override fun onAttachedToEngine(flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) {
- val securityApi = ServiceLocator.getSecuritySuite(flutterPluginBinding.applicationContext)
- SecuritySuiteApi.setUp(flutterPluginBinding.binaryMessenger, securityApi)
+ val securityApi = ServiceLocator.getSecurityToolkit(flutterPluginBinding.applicationContext)
+ SecurityToolkitApi.setUp(flutterPluginBinding.binaryMessenger, securityApi)
}
override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) {
diff --git a/android/src/main/kotlin/com/apadmi/flutter_security_suite/ServiceLocator.kt b/android/src/main/kotlin/com/apadmi/security_toolkit/ServiceLocator.kt
similarity index 69%
rename from android/src/main/kotlin/com/apadmi/flutter_security_suite/ServiceLocator.kt
rename to android/src/main/kotlin/com/apadmi/security_toolkit/ServiceLocator.kt
index 022ac67..69aa6f3 100644
--- a/android/src/main/kotlin/com/apadmi/flutter_security_suite/ServiceLocator.kt
+++ b/android/src/main/kotlin/com/apadmi/security_toolkit/ServiceLocator.kt
@@ -1,6 +1,6 @@
-package com.apadmi.flutter_security_suite
+package com.apadmi.security_toolkit
-import SecuritySuiteApi
+import SecurityToolkitApi
import android.content.Context
import android.view.inputmethod.InputMethodManager
import com.scottyab.rootbeer.RootBeer
@@ -15,6 +15,6 @@ object ServiceLocator {
private fun getInputMethodManager(context: Context): InputMethodManager =
context.getSystemService(InputMethodManager::class.java)
- fun getSecuritySuite(context: Context): SecuritySuiteApi =
- SecuritySuiteImpl(context, getEmulatorChecker(context), getRootBeer(context))
+ fun getSecurityToolkit(context: Context): SecurityToolkitApi =
+ SecurityToolkitImpl(context, getEmulatorChecker(context), getRootBeer(context))
}
\ No newline at end of file
diff --git a/example/README.md b/example/README.md
index dec67f0..b82d0b3 100644
--- a/example/README.md
+++ b/example/README.md
@@ -1,3 +1,3 @@
-# flutter_security_suite_example
+# security_toolkit_example
-Demonstrates how to use the flutter_security_suite plugin.
+Demonstrates how to use the security_toolkit plugin.
diff --git a/example/android/app/build.gradle.kts b/example/android/app/build.gradle.kts
index 169dc6c..aabb3fd 100644
--- a/example/android/app/build.gradle.kts
+++ b/example/android/app/build.gradle.kts
@@ -5,7 +5,7 @@ plugins {
}
android {
- namespace = "com.example.flutter_security_suite_example"
+ namespace = "com.apadmi.security_toolkit_example"
compileSdk = flutter.compileSdkVersion
ndkVersion = flutter.ndkVersion
@@ -16,7 +16,7 @@ android {
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
- applicationId = "com.example.flutter_security_suite_example"
+ applicationId = "com.apadmi.security_toolkit_example"
// You can update the following values to match your application needs.
// For more information, see: https://flutter.dev/to/review-gradle-config.
minSdk = flutter.minSdkVersion
diff --git a/example/android/app/src/main/AndroidManifest.xml b/example/android/app/src/main/AndroidManifest.xml
index fa5b5cf..e0a04d4 100644
--- a/example/android/app/src/main/AndroidManifest.xml
+++ b/example/android/app/src/main/AndroidManifest.xml
@@ -1,6 +1,6 @@
CFBundleInfoDictionaryVersion
6.0
CFBundleName
- flutter_security_suite_example
+ security_toolkit_example
CFBundlePackageType
APPL
CFBundleShortVersionString
diff --git a/example/lib/main.dart b/example/lib/main.dart
index 8e2d9a6..84d08b7 100644
--- a/example/lib/main.dart
+++ b/example/lib/main.dart
@@ -1,10 +1,7 @@
import 'package:flutter/material.dart';
-import 'dart:async';
-
-import 'package:flutter/services.dart';
-import 'package:flutter_security_suite/flutter_security_suite.dart';
-import 'package:flutter_security_suite_example/widgets/overall.dart';
-import 'package:flutter_security_suite_example/widgets/security_reading.dart';
+import 'package:security_toolkit/security_toolkit.dart';
+import 'package:security_toolkit_example/widgets/overall.dart';
+import 'package:security_toolkit_example/widgets/security_reading.dart';
void main() {
runApp(const MyApp());
@@ -30,10 +27,10 @@ class _MyAppState extends State {
builder: (context) {
return Scaffold(
appBar: AppBar(
- title: const Text('Flutter Security Suite Example'),
+ title: const Text('Security Toolkit Example'),
),
body: FutureBuilder(
- future: SecuritySuite.checkSecureEnvironment(),
+ future: SecurityToolkit.checkSecureEnvironment(),
builder:
(_, state) => switch (state) {
AsyncSnapshot(connectionState: ConnectionState.waiting) =>
diff --git a/example/lib/widgets/overall.dart b/example/lib/widgets/overall.dart
index 7e35ff0..6ff5c81 100644
--- a/example/lib/widgets/overall.dart
+++ b/example/lib/widgets/overall.dart
@@ -1,5 +1,5 @@
import 'package:flutter/material.dart';
-import 'package:flutter_security_suite/flutter_security_suite.dart';
+import 'package:security_toolkit/security_toolkit.dart';
class OverallSecurityReading extends StatelessWidget {
final SecurityCheckResult result;
diff --git a/example/lib/widgets/security_reading.dart b/example/lib/widgets/security_reading.dart
index cfa6397..e96358d 100644
--- a/example/lib/widgets/security_reading.dart
+++ b/example/lib/widgets/security_reading.dart
@@ -1,5 +1,5 @@
import 'package:flutter/material.dart';
-import 'package:flutter_security_suite_example/utils/color_ext.dart';
+import 'package:security_toolkit_example/utils/color_ext.dart';
class IndividualSecurityReading extends StatelessWidget {
final String name;
diff --git a/example/pubspec.lock b/example/pubspec.lock
index d0b3557..e221e8d 100644
--- a/example/pubspec.lock
+++ b/example/pubspec.lock
@@ -83,13 +83,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "5.0.0"
- flutter_security_suite:
- dependency: "direct main"
- description:
- path: ".."
- relative: true
- source: path
- version: "1.1.0"
flutter_test:
dependency: "direct dev"
description: flutter
@@ -193,6 +186,13 @@ packages:
url: "https://pub.dev"
source: hosted
version: "5.0.3"
+ security_toolkit:
+ dependency: "direct main"
+ description:
+ path: ".."
+ relative: true
+ source: path
+ version: "2.0.0"
sky_engine:
dependency: transitive
description: flutter
diff --git a/example/pubspec.yaml b/example/pubspec.yaml
index ef2a322..5aa24c1 100644
--- a/example/pubspec.yaml
+++ b/example/pubspec.yaml
@@ -1,5 +1,5 @@
-name: flutter_security_suite_example
-description: "Demonstrates how to use the flutter_security_suite plugin."
+name: security_toolkit_example
+description: "Demonstrates how to use the security_toolkit plugin."
publish_to: 'none'
environment:
@@ -10,7 +10,7 @@ dependencies:
flutter:
sdk: flutter
- flutter_security_suite:
+ security_toolkit:
path: ../
cupertino_icons: ^1.0.8
diff --git a/ios/flutter_security_suite/Sources/flutter_security_suite/FlutterSecuritySuitePlugin.swift b/ios/flutter_security_suite/Sources/flutter_security_suite/FlutterSecuritySuitePlugin.swift
deleted file mode 100644
index fbcfc09..0000000
--- a/ios/flutter_security_suite/Sources/flutter_security_suite/FlutterSecuritySuitePlugin.swift
+++ /dev/null
@@ -1,18 +0,0 @@
-import Flutter
-import UIKit
-
-public class FlutterSecuritySuitePlugin: NSObject, FlutterPlugin {
-
- let securitySuite: SecuritySuiteApi
-
- override init() {
- self.securitySuite = ServiceLocator.getSecuritySuiteApi()
- }
-
- public static func register(with registrar: FlutterPluginRegistrar) {
- let plugin = FlutterSecuritySuitePlugin()
- let securitySuite = plugin.securitySuite
- SecuritySuiteApiSetup.setUp(binaryMessenger: registrar.messenger(), api: securitySuite)
- registrar.publish(plugin)
- }
-}
diff --git a/ios/flutter_security_suite.podspec b/ios/security_toolkit.podspec
similarity index 82%
rename from ios/flutter_security_suite.podspec
rename to ios/security_toolkit.podspec
index 0015405..2b1c4b5 100644
--- a/ios/flutter_security_suite.podspec
+++ b/ios/security_toolkit.podspec
@@ -1,5 +1,5 @@
Pod::Spec.new do |s|
- s.name = 'flutter_security_suite'
+ s.name = 'security_toolkit'
s.version = '0.0.1'
s.summary = 'Security utilities for Flutter apps.'
s.description = <<-DESC
@@ -9,7 +9,7 @@ Security utilities for Flutter apps.
s.license = { :file => '../LICENSE' }
s.author = { 'Apadmi Ltd.' => 'tomh@apadmi.com' }
s.source = { :path => '.' }
- s.source_files = 'flutter_security_suite/Sources/flutter_security_suite/**/*.swift'
+ s.source_files = 'security_toolkit/Sources/security_toolkit/**/*.swift'
s.dependency 'Flutter'
s.platform = :ios, '13.0'
diff --git a/ios/flutter_security_suite/Package.swift b/ios/security_toolkit/Package.swift
similarity index 78%
rename from ios/flutter_security_suite/Package.swift
rename to ios/security_toolkit/Package.swift
index 5c61a41..4a64e99 100644
--- a/ios/flutter_security_suite/Package.swift
+++ b/ios/security_toolkit/Package.swift
@@ -4,19 +4,19 @@
import PackageDescription
let package = Package(
- name: "flutter_security_suite",
+ name: "security_toolkit",
platforms: [
.iOS("13.0")
],
products: [
- .library(name: "flutter-security-suite", targets: ["flutter_security_suite"])
+ .library(name: "security-toolkit", targets: ["security_toolkit"])
],
dependencies: [
.package(name: "FlutterFramework", path: "../FlutterFramework")
],
targets: [
.target(
- name: "flutter_security_suite",
+ name: "security_toolkit",
dependencies: [
.product(name: "FlutterFramework", package: "FlutterFramework"),
"CInternalDarwin"
diff --git a/ios/flutter_security_suite/Sources/CInternalDarwin/empty.c b/ios/security_toolkit/Sources/CInternalDarwin/empty.c
similarity index 70%
rename from ios/flutter_security_suite/Sources/CInternalDarwin/empty.c
rename to ios/security_toolkit/Sources/CInternalDarwin/empty.c
index 580a6b1..850b3da 100644
--- a/ios/flutter_security_suite/Sources/CInternalDarwin/empty.c
+++ b/ios/security_toolkit/Sources/CInternalDarwin/empty.c
@@ -1,6 +1,6 @@
//
// empty.c
-// flutter_security_suite
+// security_toolkit
//
// Created by Tom Handcock on 08/05/2026.
//
diff --git a/ios/flutter_security_suite/Sources/CInternalDarwin/include/CInternalDarwin.h b/ios/security_toolkit/Sources/CInternalDarwin/include/CInternalDarwin.h
similarity index 87%
rename from ios/flutter_security_suite/Sources/CInternalDarwin/include/CInternalDarwin.h
rename to ios/security_toolkit/Sources/CInternalDarwin/include/CInternalDarwin.h
index 8628c68..12da567 100644
--- a/ios/flutter_security_suite/Sources/CInternalDarwin/include/CInternalDarwin.h
+++ b/ios/security_toolkit/Sources/CInternalDarwin/include/CInternalDarwin.h
@@ -1,6 +1,6 @@
//
// CInternalDarwin.h
-// flutter_security_suite
+// security_toolkit
//
// Created by Tom Handcock on 08/05/2026.
//
diff --git a/ios/flutter_security_suite/Sources/flutter_security_suite/DebuggerChecker.swift b/ios/security_toolkit/Sources/security_toolkit/DebuggerChecker.swift
similarity index 100%
rename from ios/flutter_security_suite/Sources/flutter_security_suite/DebuggerChecker.swift
rename to ios/security_toolkit/Sources/security_toolkit/DebuggerChecker.swift
diff --git a/ios/flutter_security_suite/Sources/flutter_security_suite/JailbreakChecker.swift b/ios/security_toolkit/Sources/security_toolkit/JailbreakChecker.swift
similarity index 100%
rename from ios/flutter_security_suite/Sources/flutter_security_suite/JailbreakChecker.swift
rename to ios/security_toolkit/Sources/security_toolkit/JailbreakChecker.swift
diff --git a/ios/flutter_security_suite/Sources/flutter_security_suite/ReverseEngineerChecker.swift b/ios/security_toolkit/Sources/security_toolkit/ReverseEngineerChecker.swift
similarity index 100%
rename from ios/flutter_security_suite/Sources/flutter_security_suite/ReverseEngineerChecker.swift
rename to ios/security_toolkit/Sources/security_toolkit/ReverseEngineerChecker.swift
diff --git a/ios/flutter_security_suite/Sources/flutter_security_suite/SecuritySuiteApi.g.swift b/ios/security_toolkit/Sources/security_toolkit/SecurityToolkitApi.g.swift
similarity index 67%
rename from ios/flutter_security_suite/Sources/flutter_security_suite/SecuritySuiteApi.g.swift
rename to ios/security_toolkit/Sources/security_toolkit/SecurityToolkitApi.g.swift
index dcbb426..b7b2349 100644
--- a/ios/flutter_security_suite/Sources/flutter_security_suite/SecuritySuiteApi.g.swift
+++ b/ios/security_toolkit/Sources/security_toolkit/SecurityToolkitApi.g.swift
@@ -1,4 +1,4 @@
-// Autogenerated from Pigeon (v25.3.1), do not edit directly.
+// Autogenerated from Pigeon (v26.3.4), do not edit directly.
// See also: https://pub.dev/packages/pigeon
import Foundation
@@ -12,7 +12,7 @@ import Foundation
#endif
/// Error class for passing custom error details to Dart side.
-final class SecuritySuiteError: Error {
+final class SecurityToolkitError: Error {
let code: String
let message: String?
let details: Sendable?
@@ -25,7 +25,7 @@ final class SecuritySuiteError: Error {
var localizedDescription: String {
return
- "SecuritySuiteError(code: \(code), message: \(message ?? ""), details: \(details ?? "")"
+ "SecurityToolkitError(code: \(code), message: \(message ?? ""), details: \(details ?? "")"
}
}
@@ -34,7 +34,7 @@ private func wrapResult(_ result: Any?) -> [Any?] {
}
private func wrapError(_ error: Any) -> [Any?] {
- if let pigeonError = error as? SecuritySuiteError {
+ if let pigeonError = error as? SecurityToolkitError {
return [
pigeonError.code,
pigeonError.message,
@@ -50,7 +50,7 @@ private func wrapError(_ error: Any) -> [Any?] {
}
return [
"\(error)",
- "\(type(of: error))",
+ "\(Swift.type(of: error))",
"Stacktrace: \(Thread.callStackSymbols)",
]
}
@@ -65,28 +65,28 @@ private func nilOrValue(_ value: Any?) -> T? {
}
-private class SecuritySuiteApiPigeonCodecReader: FlutterStandardReader {
+private class SecurityToolkitApiPigeonCodecReader: FlutterStandardReader {
}
-private class SecuritySuiteApiPigeonCodecWriter: FlutterStandardWriter {
+private class SecurityToolkitApiPigeonCodecWriter: FlutterStandardWriter {
}
-private class SecuritySuiteApiPigeonCodecReaderWriter: FlutterStandardReaderWriter {
+private class SecurityToolkitApiPigeonCodecReaderWriter: FlutterStandardReaderWriter {
override func reader(with data: Data) -> FlutterStandardReader {
- return SecuritySuiteApiPigeonCodecReader(data: data)
+ return SecurityToolkitApiPigeonCodecReader(data: data)
}
override func writer(with data: NSMutableData) -> FlutterStandardWriter {
- return SecuritySuiteApiPigeonCodecWriter(data: data)
+ return SecurityToolkitApiPigeonCodecWriter(data: data)
}
}
-class SecuritySuiteApiPigeonCodec: FlutterStandardMessageCodec, @unchecked Sendable {
- static let shared = SecuritySuiteApiPigeonCodec(readerWriter: SecuritySuiteApiPigeonCodecReaderWriter())
+class SecurityToolkitApiPigeonCodec: FlutterStandardMessageCodec, @unchecked Sendable {
+ static let shared = SecurityToolkitApiPigeonCodec(readerWriter: SecurityToolkitApiPigeonCodecReaderWriter())
}
/// Generated protocol from Pigeon that represents a handler of messages from Flutter.
-protocol SecuritySuiteApi {
+protocol SecurityToolkitApi {
func isRooted() throws -> Bool
func isDebugged() throws -> Bool
func isLikelyEmulator() throws -> Bool
@@ -94,12 +94,12 @@ protocol SecuritySuiteApi {
}
/// Generated setup class from Pigeon to handle messages through the `binaryMessenger`.
-class SecuritySuiteApiSetup {
- static var codec: FlutterStandardMessageCodec { SecuritySuiteApiPigeonCodec.shared }
- /// Sets up an instance of `SecuritySuiteApi` to handle messages through the `binaryMessenger`.
- static func setUp(binaryMessenger: FlutterBinaryMessenger, api: SecuritySuiteApi?, messageChannelSuffix: String = "") {
+class SecurityToolkitApiSetup {
+ static var codec: FlutterStandardMessageCodec { SecurityToolkitApiPigeonCodec.shared }
+ /// Sets up an instance of `SecurityToolkitApi` to handle messages through the `binaryMessenger`.
+ static func setUp(binaryMessenger: FlutterBinaryMessenger, api: SecurityToolkitApi?, messageChannelSuffix: String = "") {
let channelSuffix = messageChannelSuffix.count > 0 ? ".\(messageChannelSuffix)" : ""
- let isRootedChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.flutter_security_suite.SecuritySuiteApi.isRooted\(channelSuffix)", binaryMessenger: binaryMessenger, codec: codec)
+ let isRootedChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.security_toolkit.SecurityToolkitApi.isRooted\(channelSuffix)", binaryMessenger: binaryMessenger, codec: codec)
if let api = api {
isRootedChannel.setMessageHandler { _, reply in
do {
@@ -112,7 +112,7 @@ class SecuritySuiteApiSetup {
} else {
isRootedChannel.setMessageHandler(nil)
}
- let isDebuggedChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.flutter_security_suite.SecuritySuiteApi.isDebugged\(channelSuffix)", binaryMessenger: binaryMessenger, codec: codec)
+ let isDebuggedChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.security_toolkit.SecurityToolkitApi.isDebugged\(channelSuffix)", binaryMessenger: binaryMessenger, codec: codec)
if let api = api {
isDebuggedChannel.setMessageHandler { _, reply in
do {
@@ -125,7 +125,7 @@ class SecuritySuiteApiSetup {
} else {
isDebuggedChannel.setMessageHandler(nil)
}
- let isLikelyEmulatorChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.flutter_security_suite.SecuritySuiteApi.isLikelyEmulator\(channelSuffix)", binaryMessenger: binaryMessenger, codec: codec)
+ let isLikelyEmulatorChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.security_toolkit.SecurityToolkitApi.isLikelyEmulator\(channelSuffix)", binaryMessenger: binaryMessenger, codec: codec)
if let api = api {
isLikelyEmulatorChannel.setMessageHandler { _, reply in
do {
@@ -138,7 +138,7 @@ class SecuritySuiteApiSetup {
} else {
isLikelyEmulatorChannel.setMessageHandler(nil)
}
- let isReverseEngineeredChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.flutter_security_suite.SecuritySuiteApi.isReverseEngineered\(channelSuffix)", binaryMessenger: binaryMessenger, codec: codec)
+ let isReverseEngineeredChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.security_toolkit.SecurityToolkitApi.isReverseEngineered\(channelSuffix)", binaryMessenger: binaryMessenger, codec: codec)
if let api = api {
isReverseEngineeredChannel.setMessageHandler { _, reply in
do {
diff --git a/ios/flutter_security_suite/Sources/flutter_security_suite/SecuritySuiteImpl.swift b/ios/security_toolkit/Sources/security_toolkit/SecurityToolkitImpl.swift
similarity index 89%
rename from ios/flutter_security_suite/Sources/flutter_security_suite/SecuritySuiteImpl.swift
rename to ios/security_toolkit/Sources/security_toolkit/SecurityToolkitImpl.swift
index 3f437c2..49b75a7 100644
--- a/ios/flutter_security_suite/Sources/flutter_security_suite/SecuritySuiteImpl.swift
+++ b/ios/security_toolkit/Sources/security_toolkit/SecurityToolkitImpl.swift
@@ -1,11 +1,12 @@
//
-// SecuritySuiteImpl.swift
+// SecurityToolkitImpl.swift
// Pods
//
// Created by Tom Handcock on 24/06/2025.
+// Re-factored by Tom Handcock on 08/07/2025.
//
-class SecuritySuiteImpl: SecuritySuiteApi {
+class SecurityToolkitImpl: SecurityToolkitApi {
let debuggerChecker: DebuggerChecker
let jailbreakChecker: JailbreakChecker
diff --git a/ios/security_toolkit/Sources/security_toolkit/SecurityToolkitPlugin.swift b/ios/security_toolkit/Sources/security_toolkit/SecurityToolkitPlugin.swift
new file mode 100644
index 0000000..06e94d2
--- /dev/null
+++ b/ios/security_toolkit/Sources/security_toolkit/SecurityToolkitPlugin.swift
@@ -0,0 +1,18 @@
+import Flutter
+import UIKit
+
+public class SecurityToolkitPlugin: NSObject, FlutterPlugin {
+
+ let securityToolkit: SecurityToolkitApi
+
+ override init() {
+ self.securityToolkit = ServiceLocator.getSecurityToolkitApi()
+ }
+
+ public static func register(with registrar: FlutterPluginRegistrar) {
+ let plugin = SecurityToolkitPlugin()
+ let securityToolkit = plugin.securityToolkit
+ SecurityToolkitApiSetup.setUp(binaryMessenger: registrar.messenger(), api: securityToolkit)
+ registrar.publish(plugin)
+ }
+}
diff --git a/ios/flutter_security_suite/Sources/flutter_security_suite/ServiceLocator.swift b/ios/security_toolkit/Sources/security_toolkit/ServiceLocator.swift
similarity index 87%
rename from ios/flutter_security_suite/Sources/flutter_security_suite/ServiceLocator.swift
rename to ios/security_toolkit/Sources/security_toolkit/ServiceLocator.swift
index 9ae3961..d3373b4 100644
--- a/ios/flutter_security_suite/Sources/flutter_security_suite/ServiceLocator.swift
+++ b/ios/security_toolkit/Sources/security_toolkit/ServiceLocator.swift
@@ -15,8 +15,8 @@ class ServiceLocator {
static let simulatorChecker: SimulatorChecker = SimulatorChecker()
- static func getSecuritySuiteApi() -> SecuritySuiteApi {
- return SecuritySuiteImpl(
+ static func getSecurityToolkitApi() -> SecurityToolkitApi {
+ return SecurityToolkitImpl(
debuggerChecker: debuggerChecker,
jailbreakChecker: jailbreakChecker,
reverseEngineerChecker: reverseEngineerChecker,
diff --git a/ios/flutter_security_suite/Sources/flutter_security_suite/SimulatorChecker.swift b/ios/security_toolkit/Sources/security_toolkit/SimulatorChecker.swift
similarity index 95%
rename from ios/flutter_security_suite/Sources/flutter_security_suite/SimulatorChecker.swift
rename to ios/security_toolkit/Sources/security_toolkit/SimulatorChecker.swift
index e6ec07c..f082f1f 100644
--- a/ios/flutter_security_suite/Sources/flutter_security_suite/SimulatorChecker.swift
+++ b/ios/security_toolkit/Sources/security_toolkit/SimulatorChecker.swift
@@ -4,6 +4,8 @@
//
// Created by Tom Handcock on 24/06/2025.
//
+import Foundation
+
class SimulatorChecker {
static private let simulatorNameKey = "SIMULATOR_DEVICE_NAME"
diff --git a/lib/flutter_security_suite.dart b/lib/flutter_security_suite.dart
deleted file mode 100644
index 35f525d..0000000
--- a/lib/flutter_security_suite.dart
+++ /dev/null
@@ -1,3 +0,0 @@
-export 'src/engine/feature/security_suite.dart' show SecuritySuite;
-export 'src/engine/feature/security_suite_models.dart'
- show SecurityCheckResult, SecurityViolation;
diff --git a/lib/security_toolkit.dart b/lib/security_toolkit.dart
new file mode 100644
index 0000000..c4bf719
--- /dev/null
+++ b/lib/security_toolkit.dart
@@ -0,0 +1,3 @@
+export 'src/engine/feature/security_toolkit.dart' show SecurityToolkit;
+export 'src/engine/feature/security_toolkit_models.dart'
+ show SecurityCheckResult, SecurityViolation;
diff --git a/lib/src/engine/api/security_suite_api.g.dart b/lib/src/engine/api/security_suite_api.g.dart
deleted file mode 100644
index 7fb3bcb..0000000
--- a/lib/src/engine/api/security_suite_api.g.dart
+++ /dev/null
@@ -1,164 +0,0 @@
-// Autogenerated from Pigeon (v25.3.1), do not edit directly.
-// See also: https://pub.dev/packages/pigeon
-// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import, no_leading_underscores_for_local_identifiers
-
-import 'dart:async';
-import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List;
-
-import 'package:flutter/foundation.dart' show ReadBuffer, WriteBuffer;
-import 'package:flutter/services.dart';
-
-PlatformException _createConnectionError(String channelName) {
- return PlatformException(
- code: 'channel-error',
- message: 'Unable to establish connection on channel: "$channelName".',
- );
-}
-
-
-class _PigeonCodec extends StandardMessageCodec {
- const _PigeonCodec();
- @override
- void writeValue(WriteBuffer buffer, Object? value) {
- if (value is int) {
- buffer.putUint8(4);
- buffer.putInt64(value);
- } else {
- super.writeValue(buffer, value);
- }
- }
-
- @override
- Object? readValueOfType(int type, ReadBuffer buffer) {
- switch (type) {
- default:
- return super.readValueOfType(type, buffer);
- }
- }
-}
-
-class SecuritySuiteApi {
- /// Constructor for [SecuritySuiteApi]. The [binaryMessenger] named argument is
- /// available for dependency injection. If it is left null, the default
- /// BinaryMessenger will be used which routes to the host platform.
- SecuritySuiteApi({BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''})
- : pigeonVar_binaryMessenger = binaryMessenger,
- pigeonVar_messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : '';
- final BinaryMessenger? pigeonVar_binaryMessenger;
-
- static const MessageCodec