NDT Events App Privacy Policy

1.0 Our core beliefs regarding user privacy and data protection

  • User privacy and data protection are human rights
  • We have a duty of care to the people within our data
  • Data is a liability, it should only be collected and processed when absolutely necessary
  • We loathe spam as much as you do!
  • We will never sell, rent or otherwise distribute or make public your personal information

2.0 Relevant legislation

Along with our business and internal computer systems, the named app & the corresponding infrastructure is designed to comply with the following national and international legislation with regards to data protection and user privacy:

The NDT Events app compliance with the above legislation, all of which are stringent in nature, means that the app is likely compliant with the data protection and user privacy legislation set out by many other countries and territories as well. If you are unsure about whether the app is compliant with your own country of residences’ specific data protection and user privacy legislation you should contact our data protection officer (details of whom can be found in section 9.0) for clarification.

3.0 Personal information that the app collects and why we collect it

The NDT Events app collects and uses personal information for the following reasons:

3.1 IP address logging

When the app on your device connects to our server to upload or download content, your device’s IP address (which could be used to personally identify you) is logged by our server.

3.2 Your account

Should you choose to create an account in the app, the email address and password you enter to create your account will be saved to our server’s database. This information is only used by us to identify you when you access your customised schedule. Items you choose to add to your schedule are saved so you can login and view them on multiple devices, or restore them should you re-install the app.

Your account and its associated personal data will remain in our database unless we identify a reason to remove the account. Should you wish to have your account and its associated personal data deleted, please use this form to request your data be deleted.

3.3 Feedback

Should you opt to send us feedback using the mechanism offered within the app, you have the choice to enter your email address. If you do choose to enter your email address this will be saved to our server’s database. This information will only be used by members of our staff to respond to your feedback.

Your feedback will remain in our database until we have liaised further with you about your specific comments (should it be deemed necessary and you have supplied an email address for us to correspond with you). Should you wish to have your feedback deleted sooner than we would usually do so, please email us here using the email address that you signed up with.

3.4 Crash reporting

If you opt-in to allow sending of crash reports, if the app crashes, some data about your device is sent to the provider of this service, Firebase Crashlytics

This data is used by us to try and ascertain why the app on your device crashed. Collecting this data helps us identify recurring problems that need to be fixed in future app updates.

Full details of data collected can be found here. Below is a typical example of the type of data that is sent from your device:

  Value
Date of crash 07/08/2023 10:41:23 AM
App Name NDT Events
App Version 2024.08 (19)
Device OS Name iOS
Device OS Version 17.5.1
Device Model iPhone 15
Device RAM free 238.06 MB
Device Disk Space 107.99 GB
Device Orientation Portrait
Jailbroken/rooted No
App running in background No
Class/Module Name ProgrammeViewController.swift
Line Number 275
Method ProgrammeViewController.controllerWillChangeContent(_:)
Crash Stack Trace
Fatal Exception: NSInternalInconsistencyException
0  CoreFoundation                 0x83f20 __exceptionPreprocess
1  libobjc.A.dylib                0x16018 objc_exception_throw
2  Foundation                     0x6de868 _userInfoForFileAndLine
3  UIKitCore                      0x106ac78 -[UITableView _Bug_Detected_In_Client_Of_UITableView_Invalid_Number_Of_Rows_In_Section:]
4  UIKitCore                      0x387f88 -[UITableView _endCellAnimationsWithContext:]
5  UIKitCore                      0x3bce7c -[UITableView endUpdatesWithContext:]
6  NDT Events                     0x40244 @objc DayTableViewController.controllerWillChangeContent(_:)
7  CoreData                       0x6de5c __82-[NSFetchedResultsController(PrivateMethods) _core_managedObjectContextDidChange:]_block_invoke
8  CoreData                       0x270dc developerSubmittedBlockToNSManagedObjectContextPerform
9  CoreData                       0x9d0ec -[NSManagedObjectContext performBlockAndWait:]
10 CoreData                       0x9c6e8 -[NSFetchedResultsController _core_managedObjectContextDidChange:]
11 CoreFoundation                 0x5178c __CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__
12 CoreFoundation                 0x516a8 ___CFXRegistrationPost_block_invoke
13 CoreFoundation                 0x515f0 _CFXRegistrationPost
14 CoreFoundation                 0x4fbb8 _CFXNotificationPost
15 Foundation                     0x31574 -[NSNotificationCenter postNotificationName:object:userInfo:]
16 CoreData                       0x6a738 -[NSManagedObjectContext _postObjectsDidChangeNotificationWithUserInfo:]
17 CoreData                       0x6a364 -[NSManagedObjectContext _createAndPostChangeNotification:deletions:updates:refreshes:deferrals:wasMerge:]
18 CoreData                       0x69544 -[NSManagedObjectContext _processRecentChanges:]
19 CoreData                       0x55b00 _performRunLoopAction
20 CoreFoundation                 0x24658 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__
21 CoreFoundation                 0x24414 __CFRunLoopDoObservers
22 CoreFoundation                 0x52d24 CFRunLoopRunSpecific
23 UIFoundation                   0xdbe08 -[NSHTMLReader _loadUsingWebKit]
24 UIFoundation                   0xdc9b8 -[NSHTMLReader attributedString]
25 UIFoundation                   0x9c5cc _NSReadAttributedStringFromURLOrDataCommon
26 UIFoundation                   0x97940 _NSReadAttributedStringFromURLOrData
27 UIFoundation                   0x977b8 -[NSAttributedString(NSAttributedStringUIFoundationAdditions) initWithData:options:documentAttributes:error:]
28 Down                           0x35cc4 init + 41 (NSAttributedString+HTML.swift:41)
29 Down                           0x26998 toAttributedString + 45 (DownAttributedStringRenderable.swift:45)
30 NDT Events                     0x1a11c processMarkdown + 20 (String.extension.swift:20)
31 NDT Events                     0x47024 processSlots + 310 (CDParseProgramme.swift:310)
32 NDT Events                     0x452b0 processSubSessions + 213 (CDParseProgramme.swift:213)
33 NDT Events                     0x43b64 processSessions + 167 (CDParseProgramme.swift:167)
34 NDT Events                     0x42f34 processDays + 105 (CDParseProgramme.swift:105)
35 NDT Events                     0x42064  + 42 (ScheduleManager.swift:42)
36 NDT Events                     0x1586c  ()
37 CoreData                       0x270dc developerSubmittedBlockToNSManagedObjectContextPerform
38 libdispatch.dylib              0x3dd4 _dispatch_client_callout
39 libdispatch.dylib              0x125a4 _dispatch_main_queue_drain
40 libdispatch.dylib              0x121b8 _dispatch_main_queue_callback_4CF
41 CoreFoundation                 0x56710 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__
42 CoreFoundation                 0x53914 __CFRunLoopRun
43 CoreFoundation                 0x52cd8 CFRunLoopRunSpecific
44 GraphicsServices               0x11a8 GSEventRunModal
45 UIKitCore                      0x40a90c -[UIApplication _run]
46 UIKitCore                      0x4be9d0 UIApplicationMain
47 NDT Events                     0x8df8 main + 15 (CDParseExhibitor.swift:15)
48 ???                            0x1ac439e4c (Missing)
											

Please note: the transfer of information about crashes and malfunctions to the Crashlytics service is optional and can be enabled or disabled at any time from within the app settings.

4.0 How we store your personal information

As detailed in section 3.1 above, if you use the app some personal information will be stored within our server logs. Your IP Address will be stored in a plain text format until the end of the current day (up to a 24-hour period) and, under normal circumstances, can only be accessed by our server operators who have the highest system privileges. At the end of each day the server logs are encrypted, these encrypted logs are retained for a further 30 days before being anonymised. The anonymisation process alters any personally identifiable information to the point where it cannot be linked back to you as an individual.

If you chose to create an account then your details (as described in section 3.2) will be stored within our database, copies of this database are created for backup purposes, each backup is encrypted for safe archival for a period of up to 365 days.

If you chose to supply your email address when submitting feedback (as described in section 3.3) your address and feedback will be stored within our database, copies of this database are created for backup purposes, each backup is encrypted for safe archival for a period of up to 365 days.

The data collected in section 3.4 is sent directly to the provider of this service, Firebase Crashlytics. Some of the data is copied to an offline spreadsheet which is used to identify repeat crashes in the same module/method.

5.0 About this app’s server

The server providing the supporting infrastructure for the NDT Events app is hosted by Digital Ocean within their London, UK region.

DigitalOcean’s infrastructure is continually maintained following internationally recognised security controls. Their infrastructure is monitored 24/7/365 and undergoes third-party audits as well as targeted testing annually. For physical security, each of their data centre colocation providers maintain industry-recognized certifications and it's networks are MANRS certified.

All traffic (transferral of files/data) between the server and the app is encrypted and delivered over HTTPS.

6.0 Our third-party data processors

We use a number of third parties to process personal data on our behalf. These third parties have been carefully chosen and comply with the legislation set out in section 2.0.

7.0 Data breaches

We will report any unlawful data breach of this app’s database or the database(s) of any of our third-party data processors to any and all relevant persons and authorities within 72 hours of the breach if it is apparent that personal data stored in an identifiable manner has been stolen.

8.0 Data controller

The data controller for this app is: The British Institute of Non-Destructive Testing Limited, a UK Private Limited Company with company number: 969051

Whose registered office is:
  Midsummer House,
  Riverside Way,
  Bedford Road,
  Northampton .
  NN1 5NX

9.0 Data Protection Officer

Alicia Carroll
Quality Officer, The British Institute of Non-Destructive Testing Ltd.
Telephone: 01604 438300
Email: [email protected]

10.0 Changes to our privacy policy

This privacy policy may change from time to time in line with legislation or industry developments. We will not explicitly inform our clients or app users of these changes. Instead, we recommend that you check this page occasionally for any policy changes. Specific policy changes and updates are mentioned in the change log below.

10.1 Change log

14/11/2018

  • Privacy policy instigated

14/08/2024

  • Removed references to the unique Device ID which is no longer transmitted nor stored (since app version 2024.08)
  • Added information about crash reporting and what is contained within a report
  • Server logs are now anonymised (rather than deleted) after 30 days
  • Server backups are now stored for up to 365 days (an increase from 7 days)
  • Updated server details to reflect new hosting company
  • Updated Data Protection Officer details