# @nativescript/ios-security
## Contents
* [Intro](#intro)
* [Installation](#installation)
* [Prerequisites](#prerequisites)
* [Specify the URLs to be queried](#specify-the-urls-to-be-queried)
* [Use @nativescript/ios-security](#use-nativescriptios-security)
* [Detect jailbreaking](#detect-jailbreaking)
* [Detect debugger attachment](#detect-bebugger-attachment)
* [Prevent Debugger Attachment](#prevent-debugger-attachment)
* [Emulator detection](#emulator-detection)
* [Detect the use of reverse engineering tools](#detect-the-use-of-reverse-engineering-tools)
* [System proxy detection](#system-proxy-detection)
* [Runtime Hooks Detection](#runtime-hooks-detection)
* [App tampering detection](#app-tampering-detection)
* [License](#license)
## Intro
🔒 [IOSSecuritySuite](https://github.com/securing/IOSSecuritySuite) for NativeScript.
> 🌏 iOS Security Suite is an advanced and easy-to-use platform security & anti-tampering library. If you are developing for iOS and you want to protect your app according to the OWASP [MASVS](https://github.com/OWASP/owasp-masvs) standard, chapter v8, then this library could save you a lot of time. 🚀
> What ISS detects:
> * Jailbreak (even the iOS 11+ with brand new indicators! 🔥)
> * Attached debugger 👨🏻🚀
> * If an app was run in an emulator 👽
> * Common reverse engineering tools running on the device 🔭
## Installation
To install the plugin, run the following command in your app's root folder:
```cli
npm install @nativescript/ios-security
```
## Prerequisites
### Specify the URLs to be queried
In the jailbreak detection module, there is a check that uses the [canOpenURL(_:)](https://developer.apple.com/documentation/uikit/uiapplication/1622952-canopenurl) method and it requires specifying the URLs that will be queried.
Specify those URLs in the `App_Resources/iOS/Info.plist` file as follows:
```xml
LSApplicationQueriesSchemes
cydia
undecimus
sileo
zbra
filza
activator
```
## Use @nativescript/ios-security
The following sections describe how to use `@nativescript/ios-security`.
### Detect jailbreaking
For a simple check of whether the device is jailbroken, use the `amIJailbroken()` method.
```ts
const isJailBroken: boolean = IOSSecurity.amIJailbroken()
if (isJailBroken) {
console.log("This device is jailbroken");
} else {
console.log("This device is not jailbroken");
}
```
---
### Detect bebugger attachment
To detect if a debugger is attached to the app, use the `amIDebugged()` method.
```ts
const amIDebugged: boolean = IOSSecurity.amIDebugged();
```
---
### Prevent debugger attachment
To prevent the debugger from being attached to the app, call the `denyDebugger()` method.
```ts
IOSSecurity.denyDebugger();
```
---
### Emulator detection
To detect if the app is being run on an emulator, call the `amIRunInEmulator()` method.
```ts
const runInEmulator: boolean = IOSSecurity.amIRunInEmulator();
```
---
### Detect the use of reverse engineering tools
To detect if a common reverse engineering tool is being used on the app, call the `amIReverseEngineered()` method.
```ts
const amIReverseEngineered: boolean = IOSSecurity.amIReverseEngineered();
```
---
### System proxy detection
To detect if the user is using a proxy, call the `amIProxied()` method.
```ts
const amIProxied: boolean = IOSSecurity.amIProxied();
```
---
### Runtime Hooks Detection
To detect if a hook is placed in the application's code, call the `amIRuntimeHookedWithDyldWhiteListDetectionClassSelectorIsClassMethod()` method.
```ts
let amIRuntimeHooked: boolean = IOSSecurity.amIRuntimeHookedWithDyldWhiteListDetectionClassSelectorIsClassMethod(dyldWhiteList: NSArray | string[], detectionClass: typeof NSObject, selector: string, isClassMethod: boolean)
```
---
### App tampering detection
To detect if an app has been tampered with, call the `amITampered()` method.
```ts
let amITampered: NSArray = IOSSecurity.amITampered(checks: NSArray | any[])
```
## License
Apache License Version 2.0