├── .gitignore
├── .gitmodules
├── LICENSE
├── README.md
└── phyphox-iOS
├── Gemfile
├── fastlane
├── Appfile
├── Fastfile
├── Snapfile
└── SnapshotHelper.swift
├── phyphox screenshots
├── Info.plist
└── phyphox_screenshots.swift
├── phyphox.xcodeproj
├── project.pbxproj
└── xcshareddata
│ └── xcschemes
│ └── phyphox screenshots.xcscheme
├── phyphox
├── AppDelegate.swift
├── Assets.xcassets
│ ├── AppIcon.appiconset
│ │ ├── Contents.json
│ │ ├── icon_ios-1024.png
│ │ ├── icon_ios-20.png
│ │ ├── icon_ios-20@2x.png
│ │ ├── icon_ios-20@3x.png
│ │ ├── icon_ios-29.png
│ │ ├── icon_ios-29@2x.png
│ │ ├── icon_ios-29@3x.png
│ │ ├── icon_ios-40.png
│ │ ├── icon_ios-40@2x.png
│ │ ├── icon_ios-40@3x.png
│ │ ├── icon_ios-60@2x.png
│ │ ├── icon_ios-60@3x.png
│ │ ├── icon_ios-76.png
│ │ ├── icon_ios-76@2x.png
│ │ └── icon_ios-83.5@2x.png
│ ├── Contents.json
│ ├── Image.imageset
│ │ └── Contents.json
│ ├── bluetooth_signal_0.imageset
│ │ ├── Contents.json
│ │ └── bluetooth_signal_0.pdf
│ ├── bluetooth_signal_1.imageset
│ │ ├── Contents.json
│ │ └── bluetooth_signal_1.pdf
│ ├── bluetooth_signal_2.imageset
│ │ ├── Contents.json
│ │ └── bluetooth_signal_2.pdf
│ ├── bluetooth_signal_3.imageset
│ │ ├── Contents.json
│ │ └── bluetooth_signal_3.pdf
│ ├── bluetooth_signal_4.imageset
│ │ ├── Contents.json
│ │ └── bluetooth_signal_4.pdf
│ ├── cellular_level_0.imageset
│ │ ├── Contents.json
│ │ └── cellularbars.level.0.svg
│ ├── cellular_level_1.imageset
│ │ ├── Contents.json
│ │ └── cellularbars.level.1.svg
│ ├── cellular_level_2.imageset
│ │ ├── Contents.json
│ │ └── cellularbars.level.2.svg
│ ├── cellular_level_3.imageset
│ │ ├── Contents.json
│ │ └── cellularbars.level.3.svg
│ ├── cellular_level_4.imageset
│ │ ├── Contents.json
│ │ └── cellularbars.svg
│ ├── egm84_30.pgm
│ ├── logo_stack.imageset
│ │ ├── Contents.json
│ │ └── logo_stack.png
│ ├── more.imageset
│ │ ├── Contents.json
│ │ └── more.pdf
│ ├── new_experiment_bluetooth.imageset
│ │ ├── Contents.json
│ │ └── new_experiment_bluetooth.pdf
│ ├── new_experiment_qr.imageset
│ │ ├── Contents.json
│ │ └── new_experiment_qr.pdf
│ ├── new_experiment_simple.imageset
│ │ ├── Contents.json
│ │ └── new_experiment_simple.pdf
│ ├── pan_zoom.imageset
│ │ ├── Contents.json
│ │ └── panzoom-2.pdf
│ ├── phyphox_dark.imageset
│ │ ├── Contents.json
│ │ └── phyphox_dark.png
│ ├── pick.imageset
│ │ ├── Contents.json
│ │ └── pick-3.pdf
│ ├── rwth.imageset
│ │ ├── Contents.json
│ │ └── rwth_rgb.png
│ ├── unfold_less.imageset
│ │ ├── Contents.json
│ │ ├── arrow.down.right.and.arrow.up.left 1.svg
│ │ ├── arrow.down.right.and.arrow.up.left.svg
│ │ └── unfold_less.pdf
│ └── unfold_more.imageset
│ │ ├── Contents.json
│ │ ├── arrow.up.left.and.arrow.down.right 1.svg
│ │ ├── arrow.up.left.and.arrow.down.right.svg
│ │ └── unfold_more.pdf
├── Base.lproj
│ └── LaunchScreen.storyboard
├── CRC32InputStream.swift
├── Constants.swift
├── Experiments
│ ├── Analysis
│ │ ├── ExperimentAnalysis.swift
│ │ ├── ExperimentAnalysisDataIO.swift
│ │ ├── ExperimentAnalysisModule.swift
│ │ ├── FormulaParser.swift
│ │ └── Modules
│ │ │ ├── Abstract
│ │ │ ├── ExperimentComplexUpdateValueAnalysis.swift
│ │ │ └── UpdateValueAnalysis.swift
│ │ │ ├── AppendAnalysis.swift
│ │ │ ├── AutocorrelationAnalysis.swift
│ │ │ ├── AverageAnalysis.swift
│ │ │ ├── BinningAnalysis.swift
│ │ │ ├── Complex-Update-Value
│ │ │ ├── AdditionAnalysis.swift
│ │ │ ├── Atan2Analysis.swift
│ │ │ ├── DivisionAnalysis.swift
│ │ │ ├── GCDAnalysis.swift
│ │ │ ├── LCMAnalysis.swift
│ │ │ ├── MultiplicationAnalysis.swift
│ │ │ ├── PowerAnalysis.swift
│ │ │ └── SubtractionAnalysis.swift
│ │ │ ├── ConstGeneratorAnalysis.swift
│ │ │ ├── CountAnalysis.swift
│ │ │ ├── CrosscorrelationAnalysis.swift
│ │ │ ├── DifferentiationAnalysis.swift
│ │ │ ├── FFTAnalysis.swift
│ │ │ ├── FirstAnalysis.swift
│ │ │ ├── FormulaAnalysis.swift
│ │ │ ├── GaussSmoothAnalysis.swift
│ │ │ ├── IfAnalysis.swift
│ │ │ ├── IntegrationAnalysis.swift
│ │ │ ├── InterpolateAnalysis.swift
│ │ │ ├── LoessAnalysis.swift
│ │ │ ├── MapAnalysis.swift
│ │ │ ├── MatchAnalysis.swift
│ │ │ ├── MaxAnalysis.swift
│ │ │ ├── MinAnalysis.swift
│ │ │ ├── PeriodicityAnalysis.swift
│ │ │ ├── RampGeneratorAnalysis.swift
│ │ │ ├── RangefilterAnalysis.swift
│ │ │ ├── ReduceAnalysis.swift
│ │ │ ├── Simple-Update-Value
│ │ │ ├── ABSAnalysis.swift
│ │ │ ├── AcosAnalysis.swift
│ │ │ ├── AsinAnalysis.swift
│ │ │ ├── AtanAnalysis.swift
│ │ │ ├── CosAnalysis.swift
│ │ │ ├── CoshAnalysis.swift
│ │ │ ├── LogAnalysis.swift
│ │ │ ├── RoundAnalysis.swift
│ │ │ ├── SinAnalysis.swift
│ │ │ ├── SinhAnalysis.swift
│ │ │ ├── TanAnalysis.swift
│ │ │ └── TanhAnalysis.swift
│ │ │ ├── SortAnalysis.swift
│ │ │ ├── SubrangeAnalysis.swift
│ │ │ ├── ThresholdAnalysis.swift
│ │ │ └── TimerAnalysis.swift
│ ├── AudioEngine.swift
│ ├── BluetoothDevice.swift
│ ├── BluetoothScan.swift
│ ├── Data-Input
│ │ ├── ConfigConversion.swift
│ │ ├── ExperimentAudioInput.swift
│ │ ├── ExperimentBluetoothInput.swift
│ │ ├── ExperimentDepthInput.swift
│ │ ├── ExperimentDepthInputSession.swift
│ │ ├── ExperimentGPSInput.swift
│ │ ├── ExperimentSensorInput.swift
│ │ ├── GpsGeoid.swift
│ │ ├── InputConversion.swift
│ │ ├── MotionSession.swift
│ │ ├── OutputConversion.swift
│ │ └── SerialProtocol.swift
│ ├── DataContainers
│ │ └── DataBuffer.swift
│ ├── Experiment.swift
│ ├── ExperimentCollection.swift
│ ├── ExperimentIcon.swift
│ ├── ExperimentManager.swift
│ ├── ExperimentTimeReference.swift
│ ├── ExperimentTranslation.swift
│ ├── ExperimentTranslationCollection.swift
│ ├── Export
│ │ ├── ExperimentExport.swift
│ │ └── ExperimentExportSet.swift
│ ├── Metadata.swift
│ ├── NetworkConnection
│ │ ├── NetworkConnection.swift
│ │ ├── NetworkConversion.swift
│ │ ├── NetworkDiscovery.swift
│ │ └── NetworkService.swift
│ ├── Output
│ │ ├── ExperimentAudioOutput.swift
│ │ └── ExperimentBluetoothOutput.swift
│ ├── SemanticVersion.swift
│ ├── Serialization
│ │ ├── DocumentParser
│ │ │ ├── DocumentParser+Extensions.swift
│ │ │ └── DocumentParser.swift
│ │ ├── ExperimentSerialization.swift
│ │ ├── Handlers
│ │ │ ├── AnalysisElementHandler.swift
│ │ │ ├── ColorElementHandler.swift
│ │ │ ├── DataContainersElementHandler.swift
│ │ │ ├── EventsElementHandler.swift
│ │ │ ├── ExperimentAnalysisFactory.swift
│ │ │ ├── ExportElementHandler.swift
│ │ │ ├── IconElementHandler.swift
│ │ │ ├── InputElementHandler.swift
│ │ │ ├── LinkElementHandler.swift
│ │ │ ├── MultilineTextElementHandler.swift
│ │ │ ├── NetworkElementHandler.swift
│ │ │ ├── OutputElementHandler.swift
│ │ │ ├── PhyphoxDocumentHandler.swift
│ │ │ ├── PhyphoxElementHandler.swift
│ │ │ ├── TextElementHandler.swift
│ │ │ ├── TranslationsElementHandler.swift
│ │ │ ├── ViewHandlers
│ │ │ │ ├── ButtonViewElementHandler.swift
│ │ │ │ ├── DepthGUIViewElementHandler.swift
│ │ │ │ ├── EditViewElementHandler.swift
│ │ │ │ ├── GraphViewElementHandler.swift
│ │ │ │ ├── InfoViewElementHandler.swift
│ │ │ │ ├── SeparatorViewElementHandler.swift
│ │ │ │ └── ValueViewElementHandler.swift
│ │ │ └── ViewsElementHandler.swift
│ │ ├── LegacyStateSerializer.swift
│ │ └── SimpleExperimentSerializer.swift
│ └── ViewDescriptors
│ │ ├── ButtonViewDescriptor.swift
│ │ ├── DepthGUIDescriptor.swift
│ │ ├── EditViewDescriptor.swift
│ │ ├── ExperimentViewCollectionDescriptor.swift
│ │ ├── GraphViewDescriptor.swift
│ │ ├── InfoViewDescriptor.swift
│ │ ├── SeparatorViewDescriptor.swift
│ │ ├── ValueViewDescriptor.swift
│ │ └── ViewDescriptor.swift
├── Helper
│ ├── ColorConverterHelper.swift
│ ├── SettingsBundleHelper.swift
│ └── Utility.swift
├── Info.plist
├── Licenses
│ ├── Licenses.ptf
│ └── PTFile.swift
├── Settings.bundle
│ ├── Root.plist
│ ├── ar.lproj
│ │ └── Root.strings
│ ├── az.lproj
│ │ └── Root.strings
│ ├── bn.lproj
│ │ └── Root.strings
│ ├── ca.lproj
│ │ └── Root.strings
│ ├── cs.lproj
│ │ └── Root.strings
│ ├── da.lproj
│ │ └── Root.strings
│ ├── de.lproj
│ │ └── Root.strings
│ ├── el.lproj
│ │ └── Root.strings
│ ├── en.lproj
│ │ └── Root.strings
│ ├── es.lproj
│ │ └── Root.strings
│ ├── fa.lproj
│ │ └── Root.strings
│ ├── fr.lproj
│ │ └── Root.strings
│ ├── hi.lproj
│ │ └── Root.strings
│ ├── hu.lproj
│ │ └── Root.strings
│ ├── id.lproj
│ │ └── Root.strings
│ ├── it.lproj
│ │ └── Root.strings
│ ├── ja.lproj
│ │ └── Root.strings
│ ├── ka.lproj
│ │ └── Root.strings
│ ├── nl.lproj
│ │ └── Root.strings
│ ├── pl.lproj
│ │ └── Root.strings
│ ├── pt.lproj
│ │ └── Root.strings
│ ├── ru.lproj
│ │ └── Root.strings
│ ├── sl.lproj
│ │ └── Root.strings
│ ├── sr-Latn.lproj
│ │ └── Root.strings
│ ├── sr.lproj
│ │ └── Root.strings
│ ├── sv.lproj
│ │ └── Root.strings
│ ├── ta.lproj
│ │ └── Root.strings
│ ├── tr.lproj
│ │ └── Root.strings
│ ├── uk.lproj
│ │ └── Root.strings
│ ├── vi.lproj
│ │ └── Root.strings
│ ├── zh-Hans.lproj
│ │ └── Root.strings
│ └── zh-Hant.lproj
│ │ └── Root.strings
├── UI
│ ├── CollectionView
│ │ ├── CollectionView.swift
│ │ └── CollectionViewController.swift
│ ├── Extensions
│ │ ├── UIAlertController+PTExtensions.h
│ │ ├── UIAlertController+PTExtensions.m
│ │ ├── UIColor+Expanded.h
│ │ ├── UIColor+Expanded.m
│ │ ├── UIColorExtensions.swift
│ │ └── UIImageExt.swift
│ ├── KeyboardTracker.swift
│ ├── MainView
│ │ ├── BluetoothScanResultsTableViewController.swift
│ │ ├── CreateExperiment
│ │ │ ├── CreateExperimentViewController.swift
│ │ │ ├── PresentationController
│ │ │ │ ├── CreatePresentationController.swift
│ │ │ │ ├── CreateViewControllerTransition.swift
│ │ │ │ └── CreateViewControllerTransitioningDelegate.swift
│ │ │ └── TextFieldTableViewCell.swift
│ │ ├── CreditsView.swift
│ │ ├── ExperimentCell.swift
│ │ ├── ExperimentHeaderView.swift
│ │ ├── ExperimentPickerView.swift
│ │ ├── ExperimentPickerViewController.swift
│ │ ├── ExperimentView
│ │ │ ├── ConnectedBluetoothDeviceViewController.swift
│ │ │ ├── ExperimentExportSetSelectionView.swift
│ │ │ ├── ExperimentPageViewController.swift
│ │ │ ├── ExperimentTimedRunDialogView.swift
│ │ │ ├── ExperimentViewController.swift
│ │ │ ├── ExperimentViewModuleTableViewCell.swift
│ │ │ ├── HintBubbleViewController.swift
│ │ │ ├── UIExperimentTabControl.swift
│ │ │ ├── ViewModules
│ │ │ │ ├── Dynamic
│ │ │ │ │ ├── ApplyZoomDialog.swift
│ │ │ │ │ ├── ExperimentEditView.swift
│ │ │ │ │ ├── ExperimentGraphView.swift
│ │ │ │ │ ├── ExperimentValueView.swift
│ │ │ │ │ └── Graph
│ │ │ │ │ │ ├── ExperimentGraphUtilities.swift
│ │ │ │ │ │ ├── FragmentShader.glsl
│ │ │ │ │ │ ├── GLGraphShaderProgram.swift
│ │ │ │ │ │ ├── GLGraphView.swift
│ │ │ │ │ │ ├── GLMapShaderProgram.swift
│ │ │ │ │ │ ├── GLRangedPointGraphView.swift
│ │ │ │ │ │ ├── Grid
│ │ │ │ │ │ ├── GraphGridLineView.swift
│ │ │ │ │ │ ├── GraphGridView.swift
│ │ │ │ │ │ └── GraphPauseMarkerView.swift
│ │ │ │ │ │ ├── MapFragmentShader.glsl
│ │ │ │ │ │ ├── MapVertexShader.glsl
│ │ │ │ │ │ ├── MarkerOverlayView.swift
│ │ │ │ │ │ ├── PointCollection.swift
│ │ │ │ │ │ └── VertexShader.glsl
│ │ │ │ ├── ExperimentViewModule.swift
│ │ │ │ ├── ExperimentViewModuleFactory.swift
│ │ │ │ └── Static
│ │ │ │ │ ├── DepthGUI
│ │ │ │ │ ├── ExperimentDepthGUIRenderer.swift
│ │ │ │ │ ├── ShaderTypes.h
│ │ │ │ │ └── Shaders.metal
│ │ │ │ │ ├── ExperimentButtonView.swift
│ │ │ │ │ ├── ExperimentDepthGUIView.swift
│ │ │ │ │ ├── ExperimentInfoView.swift
│ │ │ │ │ └── ExperimentSeparatorView.swift
│ │ │ └── WebServer
│ │ │ │ ├── ExperimentWebServer.swift
│ │ │ │ └── WebServerUtilities.swift
│ │ ├── ExperimentsCollectionViewController.swift
│ │ ├── FixedTableView.swift
│ │ ├── MainView.swift
│ │ ├── MenuTableViewController.swift
│ │ ├── NavigationController
│ │ │ ├── MainNavigationBar.swift
│ │ │ └── MainNavigationViewController.swift
│ │ ├── PTButton.h
│ │ ├── PTButton.m
│ │ ├── PhyphoxUIAlertBuilder.swift
│ │ └── ScannerViewController.swift
│ └── ShrinkingAnimaitonViewController.swift
├── ar.lproj
│ ├── InfoPlist.strings
│ └── Localizable.strings
├── bn.lproj
│ ├── InfoPlist.strings
│ └── Localizable.strings
├── ca.lproj
│ ├── InfoPlist.strings
│ └── Localizable.strings
├── color.xcassets
│ ├── Contents.json
│ ├── Image.imageset
│ │ └── Contents.json
│ ├── RWTHBackgroundColor.colorset
│ │ └── Contents.json
│ ├── RWTHBlue.colorset
│ │ └── Contents.json
│ ├── RWTHTextColor.colorset
│ │ └── Contents.json
│ ├── backgroundDark.colorset
│ │ └── Contents.json
│ ├── bluetoothColor.colorset
│ │ └── Contents.json
│ ├── darkenedColor.colorset
│ │ └── Contents.json
│ ├── dialogBackground.colorset
│ │ └── Contents.json
│ ├── dialogTextColor.colorset
│ │ └── Contents.json
│ ├── graphLines.colorset
│ │ └── Contents.json
│ ├── graphLinesWithAlpha.colorset
│ │ └── Contents.json
│ ├── highlightColor.colorset
│ │ └── Contents.json
│ ├── lightBackgroundColor.colorset
│ │ └── Contents.json
│ ├── lightBackgroundHoverColor.colorset
│ │ └── Contents.json
│ ├── mainBackground.colorset
│ │ └── Contents.json
│ ├── markerLabel.colorset
│ │ └── Contents.json
│ ├── secondaryBackground.colorset
│ │ └── Contents.json
│ ├── textColor.colorset
│ │ └── Contents.json
│ ├── textColorDeactivated.colorset
│ │ └── Contents.json
│ ├── textSecondaryColor.colorset
│ │ └── Contents.json
│ └── textUnavailableColor.colorset
│ │ └── Contents.json
├── cs.lproj
│ ├── InfoPlist.strings
│ └── Localizable.strings
├── da.lproj
│ ├── InfoPlist.strings
│ └── Localizable.strings
├── de.lproj
│ ├── InfoPlist.strings
│ ├── LaunchScreen.strings
│ └── Localizable.strings
├── el.lproj
│ ├── InfoPlist.strings
│ └── Localizable.strings
├── en.lproj
│ ├── InfoPlist.strings
│ └── Localizable.strings
├── es.lproj
│ ├── InfoPlist.strings
│ └── Localizable.strings
├── fa.lproj
│ ├── InfoPlist.strings
│ └── Localizable.strings
├── fr.lproj
│ ├── InfoPlist.strings
│ └── Localizable.strings
├── hi.lproj
│ ├── InfoPlist.strings
│ └── Localizable.strings
├── hu.lproj
│ ├── InfoPlist.strings
│ └── Localizable.strings
├── id.lproj
│ ├── InfoPlist.strings
│ └── Localizable.strings
├── it.lproj
│ ├── InfoPlist.strings
│ └── Localizable.strings
├── ja.lproj
│ ├── InfoPlist.strings
│ └── Localizable.strings
├── ka.lproj
│ ├── InfoPlist.strings
│ └── Localizable.strings
├── ko.lproj
│ ├── InfoPlist.strings
│ └── Localizable.strings
├── localizationHelper.swift
├── nl.lproj
│ ├── InfoPlist.strings
│ └── Localizable.strings
├── phyphox-Bridging-Header.h
├── pl.lproj
│ ├── InfoPlist.strings
│ └── Localizable.strings
├── pt.lproj
│ ├── InfoPlist.strings
│ └── Localizable.strings
├── ru.lproj
│ ├── InfoPlist.strings
│ └── Localizable.strings
├── sl.lproj
│ ├── InfoPlist.strings
│ └── Localizable.strings
├── sr.lproj
│ ├── InfoPlist.strings
│ └── Localizable.strings
├── sr_Latn.lproj
│ ├── InfoPlist.strings
│ └── Localizable.strings
├── sv.lproj
│ ├── InfoPlist.strings
│ └── Localizable.strings
├── ta.lproj
│ ├── InfoPlist.strings
│ └── Localizable.strings
├── tr.lproj
│ ├── InfoPlist.strings
│ └── Localizable.strings
├── uk.lproj
│ ├── InfoPlist.strings
│ └── Localizable.strings
├── vi.lproj
│ ├── InfoPlist.strings
│ └── Localizable.strings
├── zh_Hans.lproj
│ ├── InfoPlist.strings
│ └── Localizable.strings
└── zh_Hant.lproj
│ ├── InfoPlist.strings
│ └── Localizable.strings
└── phyphoxTests
├── BufferTests.swift
├── DeserializerTests.swift
├── Info.plist
├── full-skeleton.phyphox
├── incorrect-files
├── experiment1.phyphox
├── experiment10.phyphox
├── experiment11.phyphox
├── experiment2.phyphox
├── experiment3.phyphox
├── experiment4.phyphox
├── experiment5.phyphox
├── experiment6.phyphox
├── experiment7.phyphox
├── experiment8.phyphox
└── experiment9.phyphox
└── phyphoxTests.swift
/.gitignore:
--------------------------------------------------------------------------------
1 | # Xcode
2 | .DS_Store
3 | build/
4 | *.pbxuser
5 | !default.pbxuser
6 | *.mode1v3
7 | !default.mode1v3
8 | *.mode2v3
9 | !default.mode2v3
10 | *.perspectivev3
11 | !default.perspectivev3
12 | *.xcworkspace
13 | !default.xcworkspace
14 | xcuserdata
15 | profile
16 | *.moved-aside
17 | DerivedData
18 | .idea/
19 | .nogit
20 | *.xcappdata
21 | Android
22 | External/*
23 | !External/checkout*
24 | !External/XMLDictionary
25 | External/XMLDictionary/*
26 | !External/XMLDictionary/XMLDictionary
27 | phyphox-iOS/fastlane/screenshots/*
28 |
--------------------------------------------------------------------------------
/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "phyphox-experiments"]
2 | path = phyphox-experiments
3 | url = https://github.com/kuhlen/phyphox-experiments
4 | [submodule "phyphox-webinterface"]
5 | path = phyphox-webinterface
6 | url = https://github.com/Kuhlen/phyphox-webinterface
7 | [submodule "phyphox-iOS/CocoaMQTT"]
8 | path = phyphox-iOS/CocoaMQTT
9 | url = https://github.com/phyphox/CocoaMQTT.git
10 | [submodule "phyphox-iOS/ZipZap"]
11 | path = phyphox-iOS/ZipZap
12 | url = https://github.com/pixelglow/ZipZap.git
13 | [submodule "phyphox-iOS/JXLS"]
14 | path = phyphox-iOS/JXLS
15 | url = https://github.com/JanX2/JXLS.git
16 |
--------------------------------------------------------------------------------
/phyphox-iOS/Gemfile:
--------------------------------------------------------------------------------
1 | source "https://rubygems.org"
2 |
3 | gem "fastlane"
4 |
--------------------------------------------------------------------------------
/phyphox-iOS/fastlane/Appfile:
--------------------------------------------------------------------------------
1 | app_identifier("de.rwth-aachen.physics.phyphox") # The bundle identifier of your app
2 | # apple_id("[[APPLE_ID]]") # Your Apple email address
3 |
4 |
5 | # For more information about the Appfile, see:
6 | # https://docs.fastlane.tools/advanced/#appfile
7 |
--------------------------------------------------------------------------------
/phyphox-iOS/fastlane/Fastfile:
--------------------------------------------------------------------------------
1 | # This file contains the fastlane.tools configuration
2 | # You can find the documentation at https://docs.fastlane.tools
3 | #
4 | # For a list of all available actions, check out
5 | #
6 | # https://docs.fastlane.tools/actions
7 | #
8 | # For a list of all available plugins, check out
9 | #
10 | # https://docs.fastlane.tools/plugins/available-plugins
11 | #
12 |
13 | # Uncomment the line if you want fastlane to automatically update itself
14 | # update_fastlane
15 |
16 | default_platform(:ios)
17 |
18 | platform :ios do
19 | desc "Generate new localized screenshots"
20 | lane :screenshots do
21 | capture_screenshots(scheme: "phyphox")
22 | end
23 | end
24 |
--------------------------------------------------------------------------------
/phyphox-iOS/fastlane/Snapfile:
--------------------------------------------------------------------------------
1 | # Uncomment the lines below you want to change by removing the # in the beginning
2 |
3 | # A list of devices you want to take the screenshots from
4 | devices([
5 | "iPhone 8",
6 | "iPhone 8 Plus",
7 | "iPhone 11 Pro Max",
8 | "iPad Pro (12.9-inch) (4th generation)",
9 | "iPhone 14 Plus"
10 | ])
11 |
12 | languages([
13 | "cs",
14 | "de-DE",
15 | "el",
16 | "en-US",
17 | "es-ES",
18 | "fr-FR",
19 | "hi",
20 | "it",
21 | "ja",
22 | "ka",
23 | "nl-NL",
24 | "pl",
25 | "pt-BR",
26 | "ru",
27 | "sr",
28 | "tr-TR",
29 | "vi",
30 | "zh-Hant",
31 | "zh-Hans"
32 | ])
33 |
34 | # The name of the scheme which contains the UI Tests
35 | # scheme("SchemeName")
36 |
37 | # Where should the resulting screenshots be stored?
38 | # output_directory("./screenshots")
39 |
40 | # remove the '#' to clear all previously generated screenshots before creating new ones
41 | clear_previous_screenshots(true)
42 |
43 | # Arguments to pass to the app on launch. See https://docs.fastlane.tools/actions/snapshot/#launch-arguments
44 | # launch_arguments(["-favColor red"])
45 |
46 | # For more information about all available options run
47 | # fastlane action snapshot
48 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox screenshots/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | BNDL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 |
22 |
23 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox screenshots/phyphox_screenshots.swift:
--------------------------------------------------------------------------------
1 | //
2 | // phyphox_screenshots.swift
3 | // phyphox screenshots
4 | //
5 | // Created by Sebastian Staacks on 10.06.19.
6 | // Copyright © 2019 RWTH Aachen. All rights reserved.
7 | //
8 |
9 | import XCTest
10 |
11 | class phyphox_screenshots: XCTestCase {
12 |
13 | override func setUp() {
14 |
15 | continueAfterFailure = false
16 |
17 | let app = XCUIApplication()
18 |
19 | setupSnapshot(app)
20 |
21 | app.launchArguments.append("screenshot")
22 | app.launch()
23 |
24 | }
25 |
26 | override func tearDown() {
27 | // Put teardown code here. This method is called after the invocation of each test method in the class.
28 | }
29 |
30 | func testExample() {
31 |
32 | let app = XCUIApplication()
33 |
34 | let label = app.alerts.element(boundBy: 0).buttons.element(boundBy: 0).label
35 | let index = (label == "取消" ? 0 : 1) //Detect Chinese cancel button in different order, ugly workaround...
36 | app.alerts.element(boundBy: 0).buttons.element(boundBy: index).tap()
37 |
38 | snapshot("screen1")
39 |
40 | let segmentedControlsQuery = app/*@START_MENU_TOKEN@*/.segmentedControls/*[[".scrollViews.segmentedControls",".segmentedControls"],[[[-1,1],[-1,0]]],[0]]@END_MENU_TOKEN@*/
41 | segmentedControlsQuery.buttons.element(boundBy: 2).tap()
42 |
43 | snapshot("screen2")
44 |
45 | segmentedControlsQuery.buttons.element(boundBy: 0).tap()
46 |
47 |
48 | let tablesQuery = XCUIApplication().tables
49 | tablesQuery.cells.element(boundBy: 0).staticTexts.element(boundBy: 8).tap()
50 |
51 | snapshot("screen3")
52 |
53 | app.navigationBars.element(boundBy: 0).buttons["‹"].tap()
54 |
55 | snapshot("main")
56 |
57 | }
58 |
59 | }
60 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/AppIcon.appiconset/icon_ios-1024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Assets.xcassets/AppIcon.appiconset/icon_ios-1024.png
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/AppIcon.appiconset/icon_ios-20.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Assets.xcassets/AppIcon.appiconset/icon_ios-20.png
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/AppIcon.appiconset/icon_ios-20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Assets.xcassets/AppIcon.appiconset/icon_ios-20@2x.png
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/AppIcon.appiconset/icon_ios-20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Assets.xcassets/AppIcon.appiconset/icon_ios-20@3x.png
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/AppIcon.appiconset/icon_ios-29.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Assets.xcassets/AppIcon.appiconset/icon_ios-29.png
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/AppIcon.appiconset/icon_ios-29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Assets.xcassets/AppIcon.appiconset/icon_ios-29@2x.png
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/AppIcon.appiconset/icon_ios-29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Assets.xcassets/AppIcon.appiconset/icon_ios-29@3x.png
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/AppIcon.appiconset/icon_ios-40.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Assets.xcassets/AppIcon.appiconset/icon_ios-40.png
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/AppIcon.appiconset/icon_ios-40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Assets.xcassets/AppIcon.appiconset/icon_ios-40@2x.png
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/AppIcon.appiconset/icon_ios-40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Assets.xcassets/AppIcon.appiconset/icon_ios-40@3x.png
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/AppIcon.appiconset/icon_ios-60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Assets.xcassets/AppIcon.appiconset/icon_ios-60@2x.png
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/AppIcon.appiconset/icon_ios-60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Assets.xcassets/AppIcon.appiconset/icon_ios-60@3x.png
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/AppIcon.appiconset/icon_ios-76.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Assets.xcassets/AppIcon.appiconset/icon_ios-76.png
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/AppIcon.appiconset/icon_ios-76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Assets.xcassets/AppIcon.appiconset/icon_ios-76@2x.png
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/AppIcon.appiconset/icon_ios-83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Assets.xcassets/AppIcon.appiconset/icon_ios-83.5@2x.png
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/Image.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x"
10 | },
11 | {
12 | "idiom" : "universal",
13 | "scale" : "3x"
14 | }
15 | ],
16 | "info" : {
17 | "author" : "xcode",
18 | "version" : 1
19 | },
20 | "properties" : {
21 | "template-rendering-intent" : "template"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/bluetooth_signal_0.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "bluetooth_signal_0.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | }
12 | }
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/bluetooth_signal_0.imageset/bluetooth_signal_0.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Assets.xcassets/bluetooth_signal_0.imageset/bluetooth_signal_0.pdf
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/bluetooth_signal_1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "bluetooth_signal_1.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | }
12 | }
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/bluetooth_signal_1.imageset/bluetooth_signal_1.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Assets.xcassets/bluetooth_signal_1.imageset/bluetooth_signal_1.pdf
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/bluetooth_signal_2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "bluetooth_signal_2.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | }
12 | }
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/bluetooth_signal_2.imageset/bluetooth_signal_2.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Assets.xcassets/bluetooth_signal_2.imageset/bluetooth_signal_2.pdf
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/bluetooth_signal_3.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "bluetooth_signal_3.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | }
12 | }
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/bluetooth_signal_3.imageset/bluetooth_signal_3.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Assets.xcassets/bluetooth_signal_3.imageset/bluetooth_signal_3.pdf
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/bluetooth_signal_4.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "bluetooth_signal_4.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | }
12 | }
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/bluetooth_signal_4.imageset/bluetooth_signal_4.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Assets.xcassets/bluetooth_signal_4.imageset/bluetooth_signal_4.pdf
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/cellular_level_0.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "cellularbars.level.0.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/cellular_level_0.imageset/cellularbars.level.0.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
15 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/cellular_level_1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "cellularbars.level.1.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/cellular_level_1.imageset/cellularbars.level.1.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
15 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/cellular_level_2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "cellularbars.level.2.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/cellular_level_2.imageset/cellularbars.level.2.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
15 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/cellular_level_3.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "cellularbars.level.3.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/cellular_level_3.imageset/cellularbars.level.3.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
15 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/cellular_level_4.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "cellularbars.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/cellular_level_4.imageset/cellularbars.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
12 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/egm84_30.pgm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Assets.xcassets/egm84_30.pgm
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/logo_stack.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "logo_stack.png"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | }
12 | }
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/logo_stack.imageset/logo_stack.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Assets.xcassets/logo_stack.imageset/logo_stack.png
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/more.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "more.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | }
12 | }
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/more.imageset/more.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Assets.xcassets/more.imageset/more.pdf
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/new_experiment_bluetooth.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "new_experiment_bluetooth.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | }
12 | }
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/new_experiment_bluetooth.imageset/new_experiment_bluetooth.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Assets.xcassets/new_experiment_bluetooth.imageset/new_experiment_bluetooth.pdf
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/new_experiment_qr.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "new_experiment_qr.pdf",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/new_experiment_qr.imageset/new_experiment_qr.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Assets.xcassets/new_experiment_qr.imageset/new_experiment_qr.pdf
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/new_experiment_simple.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "new_experiment_simple.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | }
12 | }
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/new_experiment_simple.imageset/new_experiment_simple.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Assets.xcassets/new_experiment_simple.imageset/new_experiment_simple.pdf
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/pan_zoom.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "panzoom-2.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true
14 | }
15 | }
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/pan_zoom.imageset/panzoom-2.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Assets.xcassets/pan_zoom.imageset/panzoom-2.pdf
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/phyphox_dark.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "phyphox_dark.png"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | }
12 | }
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/phyphox_dark.imageset/phyphox_dark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Assets.xcassets/phyphox_dark.imageset/phyphox_dark.png
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/pick.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "pick-3.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | }
12 | }
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/pick.imageset/pick-3.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Assets.xcassets/pick.imageset/pick-3.pdf
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/rwth.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "rwth_rgb.png"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | }
12 | }
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/rwth.imageset/rwth_rgb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Assets.xcassets/rwth.imageset/rwth_rgb.png
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/unfold_less.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "unfold_less.pdf",
5 | "idiom" : "universal"
6 | },
7 | {
8 | "appearances" : [
9 | {
10 | "appearance" : "luminosity",
11 | "value" : "light"
12 | }
13 | ],
14 | "filename" : "arrow.down.right.and.arrow.up.left.svg",
15 | "idiom" : "universal"
16 | },
17 | {
18 | "appearances" : [
19 | {
20 | "appearance" : "luminosity",
21 | "value" : "dark"
22 | }
23 | ],
24 | "filename" : "arrow.down.right.and.arrow.up.left 1.svg",
25 | "idiom" : "universal"
26 | }
27 | ],
28 | "info" : {
29 | "author" : "xcode",
30 | "version" : 1
31 | },
32 | "properties" : {
33 | "template-rendering-intent" : "template"
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/unfold_less.imageset/arrow.down.right.and.arrow.up.left 1.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
12 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/unfold_less.imageset/arrow.down.right.and.arrow.up.left.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
12 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/unfold_less.imageset/unfold_less.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Assets.xcassets/unfold_less.imageset/unfold_less.pdf
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/unfold_more.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "unfold_more.pdf",
5 | "idiom" : "universal"
6 | },
7 | {
8 | "appearances" : [
9 | {
10 | "appearance" : "luminosity",
11 | "value" : "light"
12 | }
13 | ],
14 | "filename" : "arrow.up.left.and.arrow.down.right 1.svg",
15 | "idiom" : "universal"
16 | },
17 | {
18 | "appearances" : [
19 | {
20 | "appearance" : "luminosity",
21 | "value" : "dark"
22 | }
23 | ],
24 | "filename" : "arrow.up.left.and.arrow.down.right.svg",
25 | "idiom" : "universal"
26 | }
27 | ],
28 | "info" : {
29 | "author" : "xcode",
30 | "version" : 1
31 | },
32 | "properties" : {
33 | "localizable" : true
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/unfold_more.imageset/arrow.up.left.and.arrow.down.right 1.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
12 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/unfold_more.imageset/arrow.up.left.and.arrow.down.right.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
12 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Assets.xcassets/unfold_more.imageset/unfold_more.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Assets.xcassets/unfold_more.imageset/unfold_more.pdf
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/CRC32InputStream.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CRC32InputStream.swift
3 | // phyphox
4 | //
5 | // Created by Sebastian Staacks on 17.05.20.
6 | // Copyright © 2020 RWTH Aachen. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import zlib
11 |
12 | final class CRC32InputStream: InputStream {
13 | public var crcValue: UInt = 0
14 | let inputStream: InputStream
15 |
16 | init(_ inputStream: InputStream) {
17 | self.inputStream = inputStream
18 | super.init(data: Data())
19 | }
20 |
21 | override func open() {
22 | inputStream.open()
23 | }
24 |
25 | override func close() {
26 | inputStream.close()
27 | }
28 |
29 | override func getBuffer(_ buffer: UnsafeMutablePointer?>, length len: UnsafeMutablePointer) -> Bool {
30 | return inputStream.getBuffer(buffer, length: len)
31 | }
32 |
33 | override var hasBytesAvailable: Bool {
34 | get {
35 | return inputStream.hasBytesAvailable
36 | }
37 | }
38 |
39 | override func read(_ buffer: UnsafeMutablePointer, maxLength len: Int) -> Int {
40 | let count = inputStream.read(buffer, maxLength: len)
41 | crcValue = crc32(crcValue, buffer, uInt(count))
42 | return count
43 | }
44 |
45 | }
46 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Experiments/Analysis/Modules/Abstract/UpdateValueAnalysis.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UpdateValueAnalysis.swift
3 | // phyphox
4 | //
5 | // Created by Jonas Gessner on 21.01.16.
6 | // Copyright © 2016 Jonas Gessner. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | /**
12 | An abstract analysis module that takes one input and one output, writing each value of the input into the output (and clearing the output beforehand), after allowing a closure to update the value.
13 | */
14 | class UpdateValueAnalysis: AutoClearingExperimentAnalysisModule {
15 | func updateAllWithMethod(_ method: ([Double]) -> [Double]) {
16 | guard let input = inputs.first else { return }
17 |
18 | let process: [Double]
19 |
20 | switch input {
21 | case .buffer(buffer: _, data: let data, usedAs: _, keep: _):
22 | process = data.data
23 | case .value(value: let value, usedAs: _):
24 | process = [value]
25 | }
26 |
27 | #if DEBUG_ANALYSIS
28 | debug_noteInputs(process.description)
29 | #endif
30 |
31 | let result = method(process)
32 |
33 | #if DEBUG_ANALYSIS
34 | // debug_noteOutputs(append)
35 | #endif
36 |
37 | for output in outputs {
38 | switch output {
39 | case .buffer(buffer: let buffer, data: _, usedAs: _, append: _):
40 | buffer.appendFromArray(result)
41 | }
42 | }
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Experiments/Analysis/Modules/AppendAnalysis.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppendAnalysis.swift
3 | // phyphox
4 | //
5 | // Created by Jonas Gessner on 06.12.15.
6 | // Copyright © 2015 Jonas Gessner. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | final class AppendAnalysis: AutoClearingExperimentAnalysisModule {
12 | private let inputElements: [ExperimentAnalysisDataInput]
13 |
14 | required init(inputs: [ExperimentAnalysisDataInput], outputs: [ExperimentAnalysisDataOutput], additionalAttributes: AttributeContainer) throws {
15 |
16 | var inputElements = [ExperimentAnalysisDataInput]()
17 |
18 | for input in inputs {
19 | inputElements.append(input)
20 | }
21 |
22 | self.inputElements = inputElements
23 |
24 | try super.init(inputs: inputs, outputs: outputs, additionalAttributes: additionalAttributes)
25 | }
26 |
27 | override func update() {
28 | var result: [Double] = []
29 |
30 | #if DEBUG_ANALYSIS
31 | debug_noteInputs(inputs)
32 | #endif
33 | for input in inputElements {
34 | switch input {
35 | case .buffer(buffer: _, data: let data, usedAs: _, keep: _):
36 | result.append(contentsOf: data.data)
37 | case .value(value: let value, usedAs: _):
38 | result.append(value)
39 | }
40 | }
41 |
42 | #if DEBUG_ANALYSIS
43 | debug_noteOutputs(result)
44 | #endif
45 |
46 | for output in outputs {
47 | switch output {
48 | case .buffer(buffer: let buffer, data: _, usedAs: _, append: _):
49 | buffer.appendFromArray(result)
50 | }
51 | }
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Experiments/Analysis/Modules/Complex-Update-Value/AdditionAnalysis.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AdditionAnalysis.swift
3 | // phyphox
4 | //
5 | // Created by Jonas Gessner on 05.12.15.
6 | // Copyright © 2015 Jonas Gessner. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import Accelerate
11 |
12 | final class AdditionAnalysis: ExperimentComplexUpdateValueAnalysis {
13 |
14 | override func update() {
15 | updateAllWithMethod({ (inputs) -> ValueSource in
16 | var main = inputs.first!
17 |
18 | for (i, input) in inputs.enumerated() {
19 | if i > 0 {
20 | main = self.addValueSources(main, b: input)
21 | }
22 | }
23 |
24 | return main
25 | }, priorityInputKey: nil)
26 | }
27 |
28 | func addValueSources(_ a: ValueSource, b: ValueSource) -> ValueSource {
29 | if let scalarA = a.scalar, let scalarB = b.scalar { // scalar+scalar
30 | let result = scalarA+scalarB
31 |
32 | return ValueSource(scalar: result)
33 | }
34 | else if var scalar = a.scalar, let vector = b.vector { // scalar+vector
35 | var out = vector
36 |
37 | vDSP_vsaddD(vector, 1, &scalar, &out, 1, vDSP_Length(out.count))
38 |
39 | return ValueSource(vector: out)
40 | }
41 | else if let vector = a.vector, var scalar = b.scalar { // vector+scalar
42 | var out = vector
43 |
44 | vDSP_vsaddD(vector, 1, &scalar, &out, 1, vDSP_Length(out.count))
45 |
46 | return ValueSource(vector: out)
47 | }
48 | else if let vectorA = a.vector, let vectorB = b.vector { // vector+vector
49 | var out = vectorA
50 |
51 | vDSP_vaddD(vectorA, 1, vectorB, 1, &out, 1, vDSP_Length(out.count))
52 |
53 | return ValueSource(vector: out)
54 | }
55 |
56 | fatalError("Invalid value sources")
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Experiments/Analysis/Modules/Complex-Update-Value/DivisionAnalysis.swift:
--------------------------------------------------------------------------------
1 | //
2 | // DivisionAnalysis.swift
3 | // phyphox
4 | //
5 | // Created by Jonas Gessner on 05.12.15.
6 | // Copyright © 2015 Jonas Gessner. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import Accelerate
11 |
12 | final class DivisionAnalysis: ExperimentComplexUpdateValueAnalysis {
13 |
14 | override func update() {
15 | updateAllWithMethod({ (inputs) -> ValueSource in
16 | var main = inputs.first!
17 |
18 | for (i, input) in inputs.enumerated() {
19 | if i > 0 {
20 | main = self.divideValueSources(main, b: input)
21 | }
22 | }
23 |
24 | return main
25 | }, priorityInputKey: "dividend")
26 | }
27 |
28 | func divideValueSources(_ a: ValueSource, b: ValueSource) -> ValueSource {
29 | if let scalarA = a.scalar, let scalarB = b.scalar { // scalar/scalar
30 | let result = scalarA/scalarB
31 |
32 | return ValueSource(scalar: result)
33 | }
34 | else if var scalar = a.scalar, let vector = b.vector { // scalar/vector
35 | var out = vector
36 |
37 | vDSP_svdivD(&scalar, vector, 1, &out, 1, vDSP_Length(out.count))
38 |
39 | return ValueSource(vector: out)
40 | }
41 | else if let vector = a.vector, var scalar = b.scalar { // vector/scalar
42 | var out = vector
43 |
44 | vDSP_vsdivD(vector, 1, &scalar, &out, 1, vDSP_Length(out.count))
45 |
46 | return ValueSource(vector: out)
47 | }
48 | else if let vectorA = a.vector, let vectorB = b.vector { // vector/vector
49 | var out = vectorA
50 |
51 | vDSP_vdivD(vectorB, 1, vectorA, 1, &out, 1, vDSP_Length(out.count))
52 |
53 | return ValueSource(vector: out)
54 | }
55 |
56 | fatalError("Invalid value sources")
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Experiments/Analysis/Modules/Complex-Update-Value/MultiplicationAnalysis.swift:
--------------------------------------------------------------------------------
1 | //
2 | // MultiplicationAnalysis.swift
3 | // phyphox
4 | //
5 | // Created by Jonas Gessner on 05.12.15.
6 | // Copyright © 2015 Jonas Gessner. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import Accelerate
11 |
12 | final class MultiplicationAnalysis: ExperimentComplexUpdateValueAnalysis {
13 |
14 | override func update() {
15 | updateAllWithMethod({ (inputs) -> ValueSource in
16 | var main = inputs.first!
17 |
18 | for (i, input) in inputs.enumerated() {
19 | if i > 0 {
20 | main = self.multiplyValueSources(main, b: input)
21 | }
22 | }
23 |
24 | return main
25 | }, priorityInputKey: nil)
26 | }
27 |
28 | func multiplyValueSources(_ a: ValueSource, b: ValueSource) -> ValueSource {
29 | if let scalarA = a.scalar, let scalarB = b.scalar { // scalar*scalar
30 | let result = scalarA*scalarB
31 |
32 | return ValueSource(scalar: result)
33 | }
34 | else if var scalar = a.scalar, let vector = b.vector { // scalar*vector
35 | var out = vector
36 |
37 | vDSP_vsmulD(vector, 1, &scalar, &out, 1, vDSP_Length(out.count))
38 |
39 | return ValueSource(vector: out)
40 | }
41 | else if let vector = a.vector, var scalar = b.scalar { // vector*scalar
42 | var out = vector
43 |
44 | vDSP_vsmulD(vector, 1, &scalar, &out, 1, vDSP_Length(out.count))
45 |
46 | return ValueSource(vector: out)
47 | }
48 | else if let vectorA = a.vector, let vectorB = b.vector { // vector*vector
49 | var out = vectorA
50 |
51 | vDSP_vmulD(vectorA, 1, vectorB, 1, &out, 1, vDSP_Length(out.count))
52 |
53 | return ValueSource(vector: out)
54 | }
55 |
56 | fatalError("Invalid value sources")
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Experiments/Analysis/Modules/CountAnalysis.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CountAnalysis.swift
3 | // phyphox
4 | //
5 | // Created by Sebastian Kuhlen on 06.10.16.
6 | // Copyright © 2016 RWTH Aachen. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | final class CountAnalysis: AutoClearingExperimentAnalysisModule {
12 | override func update() {
13 | var result: [Double] = []
14 |
15 | for input in inputs {
16 | switch input {
17 | case .buffer(buffer: _, data: let data, usedAs: _, keep: _):
18 | let val = data.data.count
19 | result.append(Double(val))
20 | case .value(value: _, usedAs: _):
21 | result.append(1.0)
22 | }
23 | }
24 |
25 | for output in outputs {
26 | switch output {
27 | case .buffer(buffer: let buffer, data: _, usedAs: _, append: _):
28 | buffer.appendFromArray(result)
29 | }
30 | }
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Experiments/Analysis/Modules/DifferentiationAnalysis.swift:
--------------------------------------------------------------------------------
1 | //
2 | // DifferentiationAnalysis.swift
3 | // phyphox
4 | //
5 | // Created by Jonas Gessner on 06.12.15.
6 | // Copyright © 2015 Jonas Gessner. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import Accelerate
11 |
12 | final class DifferentiationAnalysis: AutoClearingExperimentAnalysisModule {
13 |
14 | override func update() {
15 | guard let firstInput = inputs.first else { return }
16 |
17 | let inputValues: [Double]
18 |
19 | switch firstInput {
20 | case .buffer(buffer: _, data: let data, usedAs: _, keep: _):
21 | inputValues = data.data
22 | case .value(value: _, usedAs: _):
23 | return
24 | }
25 |
26 | var result: [Double]
27 |
28 | //Only use accelerate for long arrays
29 | if inputValues.count > 260 {
30 | var subtract = inputValues
31 | subtract.insert(0.0, at: 0)
32 |
33 | result = inputValues
34 |
35 | vDSP_vsubD(subtract, 1, inputValues, 1, &result, 1, vDSP_Length(inputValues.count))
36 |
37 | result.removeFirst()
38 | }
39 | else {
40 | result = []
41 | var first = true
42 | var last: Double!
43 |
44 | for value in inputValues {
45 | if first {
46 | last = value
47 | first = false
48 | continue
49 | }
50 |
51 | let val = value-last
52 |
53 | result.append(val)
54 |
55 | last = value
56 | }
57 | }
58 |
59 | for output in outputs {
60 | switch output {
61 | case .buffer(buffer: let buffer, data: _, usedAs: _, append: _):
62 | buffer.appendFromArray(result)
63 | }
64 | }
65 | }
66 | }
67 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Experiments/Analysis/Modules/FirstAnalysis.swift:
--------------------------------------------------------------------------------
1 | //
2 | // FirstAnalysis.swift
3 | // phyphox
4 | //
5 | // Created by Jonas Gessner on 13.01.16.
6 | // Copyright © 2016 Jonas Gessner. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | final class FirstAnalysis: AutoClearingExperimentAnalysisModule {
12 | override func update() {
13 | var result: [Double] = []
14 |
15 | for input in inputs {
16 | switch input {
17 | case .buffer(buffer: _, data: let data, usedAs: _, keep: _):
18 | if data.data.count > 0 {
19 | result.append(data.data[0])
20 | }
21 | case .value(value: _, usedAs: _):
22 | break
23 | }
24 | }
25 |
26 | for output in outputs {
27 | switch output {
28 | case .buffer(buffer: let buffer, data: _, usedAs: _, append: _):
29 | buffer.appendFromArray(result)
30 | }
31 | }
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Experiments/Analysis/Modules/FormulaAnalysis.swift:
--------------------------------------------------------------------------------
1 | //
2 | // FormulaAnalysis.swift
3 | // phyphox
4 | //
5 | // Created by Sebastian Staacks on 19.04.19.
6 | // Copyright © 2019 RWTH Aachen. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | final class FormulaAnalysis: AutoClearingExperimentAnalysisModule {
12 | let parser: FormulaParser
13 |
14 | required init(inputs: [ExperimentAnalysisDataInput], outputs: [ExperimentAnalysisDataOutput], additionalAttributes: AttributeContainer) throws {
15 | let attributes = additionalAttributes.attributes(keyedBy: String.self)
16 |
17 | let formula = try attributes.optionalValue(for: "formula") ?? ""
18 | do {
19 | parser = try FormulaParser(formula: formula)
20 | } catch FormulaParser.FormulaError.parseError(let message) {
21 | throw SerializationError.genericError(message: message)
22 | }
23 | try super.init(inputs: inputs, outputs: outputs, additionalAttributes: additionalAttributes)
24 | }
25 |
26 | override func update() {
27 | var inArrays: [[Double]] = []
28 | for input in inputs {
29 | switch input {
30 | case .buffer(buffer: _, data: let data, usedAs: _, keep: _):
31 | inArrays.append(data.data)
32 | case .value(value: let value, usedAs: _):
33 | inArrays.append([value])
34 | }
35 | }
36 |
37 | let result = parser.execute(buffers: inArrays)
38 |
39 | if let output = outputs.first {
40 | switch output {
41 | case .buffer(buffer: let buffer, data: _, usedAs: _, append: _):
42 | buffer.appendFromArray(result)
43 | }
44 | }
45 |
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Experiments/Analysis/Modules/IntegrationAnalysis.swift:
--------------------------------------------------------------------------------
1 | //
2 | // IntegrationAnalysis.swift
3 | // phyphox
4 | //
5 | // Created by Jonas Gessner on 13.01.16.
6 | // Copyright © 2016 Jonas Gessner. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import Accelerate
11 |
12 | final class IntegrationAnalysis: AutoClearingExperimentAnalysisModule {
13 |
14 | override func update() {
15 | guard let firstInput = inputs.first else { return }
16 |
17 | let inArray: [Double]
18 |
19 | switch firstInput {
20 | case .buffer(buffer: _, data: let data, usedAs: _, keep: _):
21 | inArray = data.data
22 | case .value(value: _, usedAs: _):
23 | return
24 | }
25 |
26 | let count = inArray.count
27 |
28 | var result: [Double]
29 |
30 | if count == 0 {
31 | result = []
32 | }
33 | else {
34 | result = [Double](repeating: 0.0, count: count)
35 |
36 | var factor = 1.0
37 | vDSP_vrsumD(inArray, 1, &factor, &result, 1, vDSP_Length(count))
38 |
39 | var repeatedVal = inArray[0]
40 |
41 | if repeatedVal != 0.0 {
42 | vDSP_vsaddD(result, 1, &repeatedVal, &result, 1, vDSP_Length(count))
43 | }
44 | }
45 |
46 | for output in outputs {
47 | switch output {
48 | case .buffer(buffer: let buffer, data: _, usedAs: _, append: _):
49 | buffer.appendFromArray(result)
50 | }
51 | }
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Experiments/Analysis/Modules/MatchAnalysis.swift:
--------------------------------------------------------------------------------
1 | //
2 | // MatchAnalysis.swift
3 | // phyphox
4 | //
5 | // Created by Sebastian Kuhlen on 26.05.16.
6 | // Copyright © 2016 RWTH Aachen. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | final class MatchAnalysis: AutoClearingExperimentAnalysisModule {
12 |
13 | override func update() {
14 | var out = [[Double]](repeating: [], count: inputs.count)
15 |
16 | var allInputs = true
17 | var i = 0
18 | while allInputs {
19 | var allOK = true
20 | var values = [Double]()
21 | for input in inputs {
22 | switch input {
23 | case .buffer(buffer: _, data: let data, usedAs: _, keep: _):
24 | if i < data.data.count {
25 | let value = data.data[i]
26 | if !value.isFinite {
27 | allOK = false
28 | break
29 | } else {
30 | values.append(value)
31 | }
32 | } else {
33 | allInputs = false
34 | break
35 | }
36 | case .value(value: _, usedAs: _):
37 | break
38 | }
39 | }
40 | i += 1
41 | if allOK && allInputs {
42 | for (index, value) in values.enumerated() {
43 | out[index].append(value)
44 | }
45 | }
46 | }
47 |
48 | for (i, output) in outputs.enumerated() {
49 | switch output {
50 | case .buffer(buffer: let buffer, data: _, usedAs: _, append: _):
51 | buffer.appendFromArray(out[i])
52 | }
53 | }
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Experiments/Analysis/Modules/Simple-Update-Value/ABSAnalysis.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ABSAnalysis.swift
3 | // phyphox
4 | //
5 | // Created by Jonas Gessner on 06.12.15.
6 | // Copyright © 2015 Jonas Gessner. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import Accelerate
11 |
12 | final class ABSAnalysis: UpdateValueAnalysis {
13 |
14 | override func update() {
15 | updateAllWithMethod { array -> [Double] in
16 | var results = array
17 | vvfabs(&results, array, [Int32(array.count)])
18 |
19 | return results
20 | }
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Experiments/Analysis/Modules/Simple-Update-Value/AcosAnalysis.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AcosAnalysis.swift
3 | // phyphox
4 | //
5 | // Created by Sebastian Kuhlen on 06.10.16.
6 | // Copyright © 2016 RWTH Aachen. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import Accelerate
11 |
12 | final class AcosAnalysis: UpdateValueAnalysis {
13 | private let deg: Bool
14 |
15 | required init(inputs: [ExperimentAnalysisDataInput], outputs: [ExperimentAnalysisDataOutput], additionalAttributes: AttributeContainer) throws {
16 | let attributes = additionalAttributes.attributes(keyedBy: String.self)
17 |
18 | deg = try attributes.optionalValue(for: "deg") ?? false
19 | try super.init(inputs: inputs, outputs: outputs, additionalAttributes: additionalAttributes)
20 | }
21 |
22 | override func update() {
23 | updateAllWithMethod { array -> [Double] in
24 | var results = array
25 |
26 | vvacos(&results, array, [Int32(array.count)])
27 |
28 | if self.deg {
29 | var f = 180.0/Double.pi
30 | vDSP_vsmulD(results, 1, &f, &results, 1, vDSP_Length(results.count))
31 | }
32 |
33 | return results
34 | }
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Experiments/Analysis/Modules/Simple-Update-Value/AsinAnalysis.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AsinAnalysis.swift
3 | // phyphox
4 | //
5 | // Created by Sebastian Kuhlen on 06.10.16.
6 | // Copyright © 2016 RWTH Aachen. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import Accelerate
11 |
12 | final class AsinAnalysis: UpdateValueAnalysis {
13 | private let deg: Bool
14 |
15 | required init(inputs: [ExperimentAnalysisDataInput], outputs: [ExperimentAnalysisDataOutput], additionalAttributes: AttributeContainer) throws {
16 | let attributes = additionalAttributes.attributes(keyedBy: String.self)
17 |
18 | deg = try attributes.optionalValue(for: "deg") ?? false
19 | try super.init(inputs: inputs, outputs: outputs, additionalAttributes: additionalAttributes)
20 | }
21 |
22 | override func update() {
23 | updateAllWithMethod { array -> [Double] in
24 | var results = array
25 |
26 | vvasin(&results, array, [Int32(array.count)])
27 |
28 | if self.deg {
29 | var f = 180.0/Double.pi
30 | vDSP_vsmulD(results, 1, &f, &results, 1, vDSP_Length(results.count))
31 | }
32 |
33 | return results
34 | }
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Experiments/Analysis/Modules/Simple-Update-Value/AtanAnalysis.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AtanAnalysis.swift
3 | // phyphox
4 | //
5 | // Created by Sebastian Kuhlen on 06.10.16.
6 | // Copyright © 2016 RWTH Aachen. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import Accelerate
11 |
12 | final class AtanAnalysis: UpdateValueAnalysis {
13 | private let deg: Bool
14 |
15 | required init(inputs: [ExperimentAnalysisDataInput], outputs: [ExperimentAnalysisDataOutput], additionalAttributes: AttributeContainer) throws {
16 | let attributes = additionalAttributes.attributes(keyedBy: String.self)
17 |
18 | deg = try attributes.optionalValue(for: "deg") ?? false
19 | try super.init(inputs: inputs, outputs: outputs, additionalAttributes: additionalAttributes)
20 | }
21 |
22 | override func update() {
23 | updateAllWithMethod { array -> [Double] in
24 | var results = array
25 |
26 | vvatan(&results, array, [Int32(array.count)])
27 |
28 | if self.deg {
29 | var f = 180.0/Double.pi
30 | vDSP_vsmulD(results, 1, &f, &results, 1, vDSP_Length(results.count))
31 | }
32 |
33 | return results
34 | }
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Experiments/Analysis/Modules/Simple-Update-Value/CosAnalysis.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CosAnalysis.swift
3 | // phyphox
4 | //
5 | // Created by Jonas Gessner on 06.12.15.
6 | // Copyright © 2015 Jonas Gessner. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import Accelerate
11 |
12 | final class CosAnalysis: UpdateValueAnalysis {
13 | private let deg: Bool
14 |
15 | required init(inputs: [ExperimentAnalysisDataInput], outputs: [ExperimentAnalysisDataOutput], additionalAttributes: AttributeContainer) throws {
16 | let attributes = additionalAttributes.attributes(keyedBy: String.self)
17 |
18 | deg = try attributes.optionalValue(for: "deg") ?? false
19 | try super.init(inputs: inputs, outputs: outputs, additionalAttributes: additionalAttributes)
20 | }
21 |
22 | override func update() {
23 | updateAllWithMethod { array -> [Double] in
24 | var results = array
25 | if self.deg {
26 | var f = Double.pi/180.0
27 | vDSP_vsmulD(array, 1, &f, &results, 1, vDSP_Length(array.count))
28 | }
29 | vvcos(&results, results, [Int32(results.count)])
30 |
31 | return results
32 | }
33 | }
34 | }
35 |
36 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Experiments/Analysis/Modules/Simple-Update-Value/CoshAnalysis.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CoshAnalysis.swift
3 | // phyphox
4 | //
5 | // Created by Sebastian Kuhlen on 06.10.16.
6 | // Copyright © 2016 RWTH Aachen. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import Accelerate
11 |
12 | final class CoshAnalysis: UpdateValueAnalysis {
13 |
14 | override func update() {
15 | updateAllWithMethod { array -> [Double] in
16 | var results = array
17 |
18 | vvcosh(&results, array, [Int32(array.count)])
19 |
20 | return results
21 | }
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Experiments/Analysis/Modules/Simple-Update-Value/LogAnalysis.swift:
--------------------------------------------------------------------------------
1 | //
2 | // LogAnalysis.swift
3 | // phyphox
4 | //
5 | // Created by Sebastian Kuhlen on 28.05.17.
6 | // Copyright © 2017 RWTH Aachen. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import Accelerate
11 |
12 | final class LogAnalysis: UpdateValueAnalysis {
13 |
14 | override func update() {
15 | updateAllWithMethod { array -> [Double] in
16 | var results = array
17 |
18 | vvlog(&results, array, [Int32(array.count)])
19 |
20 | return results
21 | }
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Experiments/Analysis/Modules/Simple-Update-Value/RoundAnalysis.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RoundAnalysis.swift
3 | // phyphox
4 | //
5 | // Created by Sebastian Kuhlen on 28.05.17.
6 | // Copyright © 2017 RWTH Aachen. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import Accelerate
11 |
12 | import Foundation
13 | import Accelerate
14 |
15 | final class RoundAnalysis: UpdateValueAnalysis {
16 | private let floor: Bool
17 | private let ceil: Bool
18 |
19 | required init(inputs: [ExperimentAnalysisDataInput], outputs: [ExperimentAnalysisDataOutput], additionalAttributes: AttributeContainer) throws {
20 | let attributes = additionalAttributes.attributes(keyedBy: String.self)
21 |
22 | floor = try attributes.optionalValue(for: "floor") ?? false
23 | ceil = try attributes.optionalValue(for: "ceil") ?? false
24 | try super.init(inputs: inputs, outputs: outputs, additionalAttributes: additionalAttributes)
25 | }
26 |
27 | override func update() {
28 | updateAllWithMethod { array -> [Double] in
29 | var results = array
30 |
31 | if floor {
32 | vvfloor(&results, results, [Int32(results.count)])
33 | }
34 | else if ceil {
35 | vvceil(&results, results, [Int32(results.count)])
36 | }
37 | else {
38 | vvnint(&results, results, [Int32(results.count)])
39 | }
40 |
41 | return results
42 | }
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Experiments/Analysis/Modules/Simple-Update-Value/SinAnalysis.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SinAnalysis.swift
3 | // phyphox
4 | //
5 | // Created by Jonas Gessner on 06.12.15.
6 | // Copyright © 2015 Jonas Gessner. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import Accelerate
11 |
12 | final class SinAnalysis: UpdateValueAnalysis {
13 | private let deg: Bool
14 |
15 | required init(inputs: [ExperimentAnalysisDataInput], outputs: [ExperimentAnalysisDataOutput], additionalAttributes: AttributeContainer) throws {
16 | let attributes = additionalAttributes.attributes(keyedBy: String.self)
17 |
18 | deg = try attributes.optionalValue(for: "deg") ?? false
19 | try super.init(inputs: inputs, outputs: outputs, additionalAttributes: additionalAttributes)
20 | }
21 |
22 | override func update() {
23 | updateAllWithMethod { array -> [Double] in
24 | var results = array
25 | if self.deg {
26 | var f = Double.pi/180.0
27 | vDSP_vsmulD(array, 1, &f, &results, 1, vDSP_Length(array.count))
28 | }
29 | vvsin(&results, results, [Int32(results.count)])
30 |
31 | return results
32 | }
33 | }
34 | }
35 |
36 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Experiments/Analysis/Modules/Simple-Update-Value/SinhAnalysis.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SinhAnalysis.swift
3 | // phyphox
4 | //
5 | // Created by Sebastian Kuhlen on 06.10.16.
6 | // Copyright © 2016 RWTH Aachen. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import Accelerate
11 |
12 | final class SinhAnalysis: UpdateValueAnalysis {
13 |
14 | override func update() {
15 | updateAllWithMethod { array -> [Double] in
16 | var results = array
17 |
18 | vvsinh(&results, array, [Int32(array.count)])
19 |
20 | return results
21 | }
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Experiments/Analysis/Modules/Simple-Update-Value/TanAnalysis.swift:
--------------------------------------------------------------------------------
1 | //
2 | // TanAnalysis.swift
3 | // phyphox
4 | //
5 | // Created by Jonas Gessner on 06.12.15.
6 | // Copyright © 2015 Jonas Gessner. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import Accelerate
11 |
12 | final class TanAnalysis: UpdateValueAnalysis {
13 | private let deg: Bool
14 |
15 | required init(inputs: [ExperimentAnalysisDataInput], outputs: [ExperimentAnalysisDataOutput], additionalAttributes: AttributeContainer) throws {
16 | let attributes = additionalAttributes.attributes(keyedBy: String.self)
17 |
18 | deg = try attributes.optionalValue(for: "deg") ?? false
19 | try super.init(inputs: inputs, outputs: outputs, additionalAttributes: additionalAttributes)
20 | }
21 |
22 | override func update() {
23 | updateAllWithMethod { array -> [Double] in
24 | var results = array
25 | if self.deg {
26 | var f = Double.pi/180.0
27 | vDSP_vsmulD(array, 1, &f, &results, 1, vDSP_Length(array.count))
28 | }
29 | vvtan(&results, results, [Int32(results.count)])
30 |
31 | return results
32 | }
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Experiments/Analysis/Modules/Simple-Update-Value/TanhAnalysis.swift:
--------------------------------------------------------------------------------
1 | //
2 | // TanhAnalysis.swift
3 | // phyphox
4 | //
5 | // Created by Sebastian Kuhlen on 06.10.16.
6 | // Copyright © 2016 RWTH Aachen. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import Accelerate
11 |
12 | final class TanhAnalysis: UpdateValueAnalysis {
13 |
14 | override func update() {
15 | updateAllWithMethod { array -> [Double] in
16 | var results = array
17 |
18 | vvtanh(&results, array, [Int32(array.count)])
19 |
20 | return results
21 | }
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Experiments/Analysis/Modules/TimerAnalysis.swift:
--------------------------------------------------------------------------------
1 | //
2 | // TimerAnalysis.swift
3 | // phyphox
4 | //
5 | // Created by Jonas Gessner on 02.04.16.
6 | // Copyright © 2016 Jonas Gessner. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | final class TimerAnalysis: AutoClearingExperimentAnalysisModule {
12 | let linearTime: Bool;
13 |
14 | private var outOutput: ExperimentAnalysisDataOutput?
15 | private var offset1970Output: ExperimentAnalysisDataOutput?
16 |
17 | required init(inputs: [ExperimentAnalysisDataInput], outputs: [ExperimentAnalysisDataOutput], additionalAttributes: AttributeContainer) throws {
18 |
19 | let attributes = additionalAttributes.attributes(keyedBy: String.self)
20 |
21 | linearTime = try attributes.optionalValue(for: "linearTime") ?? false
22 |
23 | var out: ExperimentAnalysisDataOutput? = nil
24 | var offset1970: ExperimentAnalysisDataOutput? = nil
25 | for output in outputs {
26 | if output.asString == "offset1970" || out != nil {
27 | offset1970 = output
28 | }
29 | else {
30 | out = output
31 | }
32 | }
33 | outOutput = out
34 | offset1970Output = offset1970
35 |
36 | try super.init(inputs: inputs, outputs: outputs, additionalAttributes: additionalAttributes)
37 | }
38 |
39 | override func update() {
40 | if let output = outOutput {
41 | switch output {
42 | case .buffer(buffer: let buffer, data: _, usedAs: _, append: _):
43 | buffer.append(linearTime ? analysisLinearTime : analysisTime)
44 | }
45 | }
46 | if let output = offset1970Output {
47 | switch output {
48 | case .buffer(buffer: let buffer, data: _, usedAs: _, append: _):
49 | buffer.append(linearTime ? analysisLinearTimeOffset1970 : analysisTimeOffset1970)
50 | }
51 | }
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Experiments/Data-Input/ExperimentAudioInput.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ExperimentAudioInput.swift
3 | // phyphox
4 | //
5 | // Created by Jonas Gessner on 13.01.16.
6 | // Copyright © 2016 Jonas Gessner. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import AVFoundation
11 |
12 | struct ExperimentAudioInput: Equatable {
13 | let sampleRate: UInt
14 | let outBuffer: DataBuffer
15 | let backBuffer: DataBuffer
16 | let appendData: Bool
17 | let sampleRateInfoBuffer: DataBuffer?
18 |
19 | init(sampleRate: UInt, outBuffer: DataBuffer, sampleRateInfoBuffer: DataBuffer?, appendData: Bool) {
20 | self.sampleRate = sampleRate
21 | self.outBuffer = outBuffer
22 | self.backBuffer = try! DataBuffer(name: "", size: outBuffer.size, baseContents: [], static: false)
23 | self.sampleRateInfoBuffer = sampleRateInfoBuffer
24 | self.appendData = appendData
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Experiments/ExperimentCollection.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ExperimentCollection.swift
3 | // phyphox
4 | //
5 | // Created by Jonas Gessner on 04.12.15.
6 | // Copyright © 2015 Jonas Gessner. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | final class ExperimentCollection {
12 | private(set) var title: String
13 |
14 | enum ContentType: Int {
15 | case rawSensors, savedStates, other, phyphoxOrg
16 | init (title: String) {
17 | switch title {
18 | case localize("categoryRawSensor"):
19 | self = .rawSensors
20 | case localize("save_state_category"):
21 | self = .savedStates
22 | case "phyphox.org":
23 | self = .phyphoxOrg
24 | default:
25 | self = .other
26 | }
27 | }
28 | }
29 |
30 | private(set) var type: ContentType
31 |
32 | var experiments: [(experiment: Experiment, custom: Bool)]
33 |
34 | init(title: String, experiments: [(Experiment, Bool)]) {
35 | self.title = title
36 | self.type = ContentType.init(title: title)
37 | self.experiments = experiments
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Experiments/ExperimentIcon.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ExperimentIcon.swift
3 | // phyphox
4 | //
5 | // Created by Jonas Gessner on 15.12.15.
6 | // Copyright © 2015 Jonas Gessner. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | enum ExperimentIcon: Equatable {
12 | case string(String)
13 | case image(UIImage)
14 |
15 | func generateResizableRepresentativeView(color: UIColor, fontColor: UIColor) -> UIView {
16 | switch self {
17 | case .image(let image):
18 | let imageView = UIImageView(image: image)
19 | // It is fix for the icon background for contribution section header. When not used "if else case", then the icon is rendered as black
20 | // It renders black because when opening the app in light mode, it converts and adjust all the "white" color into black, as expected.
21 | if(color == UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 1.0)){
22 | imageView.backgroundColor = .white
23 | } else {
24 | imageView.backgroundColor = color
25 | }
26 | return imageView
27 | case .string(let string):
28 | let label = UILabel()
29 |
30 | label.text = string
31 | label.textAlignment = .center
32 | label.adjustsFontSizeToFitWidth = true
33 | label.font = UIFont.preferredFont(forTextStyle: .headline)
34 |
35 | label.textColor = fontColor
36 | label.backgroundColor = color
37 |
38 | return label
39 | }
40 | }
41 |
42 | static func == (lhs: ExperimentIcon, rhs: ExperimentIcon) -> Bool {
43 | switch lhs {
44 | case .image(let imageL):
45 | switch rhs {
46 | case .image(let imageR):
47 | return imageL.pngData() == imageR.pngData()
48 | default:
49 | return false
50 | }
51 | case .string(let stringL):
52 | switch rhs {
53 | case .string(let stringR):
54 | return stringL == stringR
55 | default:
56 | return false
57 | }
58 | }
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Experiments/ExperimentTranslation.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ExperimentTranslation.swift
3 | // phyphox
4 | //
5 | // Created by Jonas Gessner on 11.12.15.
6 | // Copyright © 2015 Jonas Gessner. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | struct ExperimentTranslation: Equatable {
12 | let locale: String
13 |
14 | let titleString: String?
15 | let descriptionString: String?
16 | let categoryString: String?
17 |
18 | let translatedStrings: [String: String]
19 | let translatedLinks: [String: URL]
20 |
21 | init(withLocale locale: String, strings: [String: String], titleString: String?, descriptionString: String?, categoryString: String?, links: [String: URL]) {
22 | self.locale = locale
23 | self.descriptionString = descriptionString
24 | self.categoryString = categoryString
25 | self.titleString = titleString
26 | translatedStrings = strings
27 | translatedLinks = links
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Experiments/NetworkConnection/NetworkDiscovery.swift:
--------------------------------------------------------------------------------
1 | //
2 | // NetworkDiscovery.swift
3 | // phyphox
4 | //
5 | // Created by Sebastian Staacks on 27.11.19.
6 | // Copyright © 2019 RWTH Aachen. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | protocol NetworkDiscovery {
12 | func startDiscovery(onNewResult: NetworkDiscoveryCallback)
13 | func stopDiscovery()
14 | }
15 |
16 | protocol NetworkDiscoveryCallback {
17 | func newItem(name: String?, address: String)
18 | }
19 |
20 | class HttpNetworkDiscovery : NetworkDiscovery {
21 | var task: URLSessionTask? = nil
22 | let address: String
23 |
24 | init(address: String) {
25 | self.address = address
26 | }
27 |
28 | func startDiscovery(onNewResult: NetworkDiscoveryCallback) {
29 | guard let url = URL(string: address) else {
30 | return
31 | }
32 |
33 | task = URLSession.shared.dataTask(with: url) { (data, response, error) in
34 | guard let data = data, error == nil else {
35 | return
36 | }
37 |
38 | guard let response = response as? HTTPURLResponse else {
39 | return
40 | }
41 |
42 | guard 200 <= response.statusCode && 300 > response.statusCode else {
43 | return
44 | }
45 |
46 | onNewResult.newItem(name: String(data: data.prefix(50), encoding: .utf8), address: self.address)
47 | self.stopDiscovery()
48 | }
49 | task?.resume()
50 | }
51 |
52 | func stopDiscovery() {
53 | task?.cancel()
54 | task = nil
55 | }
56 | }
57 |
58 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Experiments/Output/ExperimentAudioOutput.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ExperimentAudioOutput.swift
3 | // phyphox
4 | //
5 | // Created by Jonas Gessner on 22.03.16.
6 | // Copyright © 2016 Jonas Gessner. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import AVFoundation
11 |
12 | enum AudioParameter: Equatable {
13 | case buffer(buffer: DataBuffer)
14 | case value(value: Double?)
15 |
16 | func getValue() -> Double? {
17 | switch self {
18 | case .buffer(buffer: let buffer):
19 | return buffer.last
20 | case .value(value: let value):
21 | return value
22 | }
23 | }
24 |
25 | var isBuffer: Bool {
26 | switch self {
27 | case .buffer(buffer: _):
28 | return true
29 | case .value(value: _):
30 | return false
31 | }
32 | }
33 | }
34 |
35 | struct ExperimentAudioOutputTone: Equatable {
36 | let frequency: AudioParameter
37 | let amplitude: AudioParameter
38 | let duration: AudioParameter
39 | }
40 |
41 | struct ExperimentAudioOutputNoise: Equatable {
42 | let amplitude: AudioParameter
43 | let duration: AudioParameter
44 | }
45 |
46 | struct ExperimentAudioOutput: Equatable {
47 | let loop: Bool
48 | let normalize: Bool
49 | let sampleRate: UInt
50 |
51 | let directSource: DataBuffer?
52 | let tones: [ExperimentAudioOutputTone]
53 | let noise: ExperimentAudioOutputNoise?
54 |
55 | init(sampleRate: UInt, loop: Bool, normalize: Bool, directSource: DataBuffer?, tones: [ExperimentAudioOutputTone], noise: ExperimentAudioOutputNoise?) {
56 | self.sampleRate = sampleRate
57 | self.loop = loop
58 | self.normalize = normalize
59 |
60 | self.directSource = directSource
61 | self.tones = tones
62 | self.noise = noise
63 | }
64 | }
65 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Experiments/SemanticVersion.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SemanticVersion.swift
3 | // phyphox
4 | //
5 | // Created by Jonas Gessner on 11.09.18.
6 | // Copyright © 2018 RWTH Aachen. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | public struct SemanticVersion: Comparable {
12 | let major: UInt
13 | let minor: UInt
14 | let patch: UInt
15 |
16 | init(major: UInt, minor: UInt, patch: UInt) {
17 | self.major = major
18 | self.minor = minor
19 | self.patch = patch
20 | }
21 |
22 | init?(string: String) {
23 | let components = string.components(separatedBy: ".")
24 |
25 | guard components.count >= 2 else { return nil }
26 |
27 | guard let major = UInt(components[0]) else { return nil }
28 | guard let minor = UInt(components[1]) else { return nil }
29 |
30 | self.major = major
31 | self.minor = minor
32 |
33 | if components.count >= 3 {
34 | guard let patch = UInt(components[2]) else { return nil }
35 |
36 | self.patch = patch
37 | }
38 | else {
39 | self.patch = 0
40 | }
41 | }
42 |
43 | public static func <(lhs: SemanticVersion, rhs: SemanticVersion) -> Bool {
44 | guard lhs.major <= rhs.major else { return false }
45 | guard lhs.major == rhs.major else { return true }
46 |
47 | guard lhs.minor <= rhs.minor else { return false }
48 | guard lhs.minor == rhs.minor else { return true }
49 |
50 | guard lhs.patch <= rhs.patch else { return false }
51 | guard lhs.patch == rhs.patch else { return true }
52 |
53 | return false
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Experiments/Serialization/Handlers/ColorElementHandler.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ColorElementHandler.swift
3 | // phyphox
4 | //
5 | // Created by Sebastian Staacks on 19.03.19.
6 | // Copyright © 2019 RWTH Aachen. All rights reserved.
7 | //
8 |
9 |
10 | import Foundation
11 |
12 | /// Element handler extracting the text content from an element and interpreting it as a color. This can be either a hex value or one of the named colors.
13 | final class ColorElementHandler: ResultElementHandler, AttributelessElementHandler, ChildlessElementHandler {
14 |
15 | var results = [UIColor]()
16 |
17 | func endElement(text: String, attributes: AttributeContainer) throws {
18 | guard !text.isEmpty else { throw ElementHandlerError.missingText }
19 |
20 | if let color = mapColorString(text) {
21 | results.append(color)
22 | } else {
23 | throw ElementHandlerError.unexpectedAttributeValue("color")
24 | }
25 |
26 | }
27 |
28 | }
29 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Experiments/Serialization/Handlers/DataContainersElementHandler.swift:
--------------------------------------------------------------------------------
1 | //
2 | // DataContainersElementHandler.swift
3 | // phyphox
4 | //
5 | // Created by Jonas Gessner on 11.04.18.
6 | // Copyright © 2018 RWTH Aachen. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | // This file contains element handlers for the `data-container` child element (and its child elements) of the `phyphox` root element.
12 |
13 | typealias BufferDescriptor = (name: String, size: Int, baseContents: [Double], staticBuffer: Bool)
14 |
15 | private final class DataContainerElementHandler: ResultElementHandler, ChildlessElementHandler {
16 | var results = [BufferDescriptor]()
17 |
18 | func startElement(attributes: AttributeContainer) throws {}
19 |
20 | private enum Attribute: String, AttributeKey {
21 | case size
22 | case staticKey = "static"
23 | case initKey = "init"
24 | }
25 |
26 | func endElement(text: String, attributes: AttributeContainer) throws {
27 | guard !text.isEmpty else { throw ElementHandlerError.missingText }
28 |
29 | let attributes = attributes.attributes(keyedBy: Attribute.self)
30 |
31 | let size = try attributes.optionalValue(for: .size) ?? 1
32 |
33 | let baseContents = (attributes.optionalString(for: .initKey) as String?).map { $0.components(separatedBy: ",").compactMap { Double($0.trimmingCharacters(in: .whitespaces)) } } ?? []
34 | let staticBuffer = try attributes.optionalValue(for: .staticKey) ?? false
35 |
36 | results.append((text, size, baseContents, staticBuffer))
37 | }
38 | }
39 |
40 | final class DataContainersElementHandler: ResultElementHandler, LookupElementHandler, AttributelessElementHandler {
41 | var results = [[BufferDescriptor]]()
42 |
43 | var childHandlers: [String: ElementHandler]
44 |
45 | private let containerHandler = DataContainerElementHandler()
46 |
47 | init() {
48 | childHandlers = ["container": containerHandler]
49 | }
50 |
51 | func endElement(text: String, attributes: AttributeContainer) throws {
52 | results.append(containerHandler.results)
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Experiments/Serialization/Handlers/IconElementHandler.swift:
--------------------------------------------------------------------------------
1 | //
2 | // IconElementHandler.swift
3 | // phyphox
4 | //
5 | // Created by Jonas Gessner on 11.04.18.
6 | // Copyright © 2018 RWTH Aachen. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | /// Element handler for the `icon` child element of the `phyphox` root element.
12 | final class IconElementHandler: ResultElementHandler, ChildlessElementHandler {
13 | var results = [ExperimentIcon]()
14 |
15 | func startElement(attributes: AttributeContainer) throws {}
16 |
17 | private enum Attribute: String, AttributeKey {
18 | case format
19 | }
20 |
21 | private enum Format: String, LosslessStringConvertible {
22 | case base64
23 | case string
24 | }
25 |
26 | func endElement(text: String, attributes: AttributeContainer) throws {
27 | guard !text.isEmpty else { throw ElementHandlerError.missingText }
28 |
29 | let attributes = attributes.attributes(keyedBy: Attribute.self)
30 |
31 | let format: Format = try attributes.optionalValue(for: .format) ?? .string
32 |
33 | switch format {
34 | case .base64:
35 | guard let data = Data(base64Encoded: text, options: []) else { throw ElementHandlerError.unreadableData }
36 |
37 | if let image = UIImage(data: data) {
38 | results.append(.image(image))
39 | }
40 | case .string:
41 | results.append(.string(text))
42 | }
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Experiments/Serialization/Handlers/LinkElementHandler.swift:
--------------------------------------------------------------------------------
1 | //
2 | // LinkElementHandler.swift
3 | // phyphox
4 | //
5 | // Created by Jonas Gessner on 11.04.18.
6 | // Copyright © 2018 RWTH Aachen. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | /// Element handler for the `link` child elements of the `phyphox` root element.
12 | final class LinkElementHandler: ResultElementHandler, ChildlessElementHandler {
13 | var results = [ExperimentLink]()
14 |
15 | func startElement(attributes: AttributeContainer) throws {}
16 |
17 | private enum Attribute: String, AttributeKey {
18 | case label
19 | case highlight
20 | }
21 |
22 | func endElement(text: String, attributes: AttributeContainer) throws {
23 | guard !text.isEmpty else { throw ElementHandlerError.missingText }
24 |
25 | let attributes = attributes.attributes(keyedBy: Attribute.self)
26 |
27 | let label = attributes.optionalString(for: .label) ?? "default"
28 |
29 | guard let url = URL(string: text) else { throw ElementHandlerError.unexpectedAttributeValue("url") }
30 |
31 | let highlighted = try attributes.optionalValue(for: .highlight) ?? false
32 |
33 | results.append(ExperimentLink(label: label, url: url, highlighted: highlighted))
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Experiments/Serialization/Handlers/MultilineTextElementHandler.swift:
--------------------------------------------------------------------------------
1 | //
2 | // MultilineTextElementHandler.swift
3 | // phyphox
4 | //
5 | // Created by Jonas Gessner on 13.04.18.
6 | // Copyright © 2018 RWTH Aachen. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | /// Element handler extracting multiline text content from an element. Text needs to be non-empty.
12 | final class MultilineTextElementHandler: ResultElementHandler, AttributelessElementHandler, ChildlessElementHandler {
13 | var results = [String]()
14 |
15 | func endElement(text: String, attributes: AttributeContainer) throws {
16 | let cleanText = text.replacingOccurrences(of: "(?m)((?:^\\s+)|(?:\\s+$))", with: "\n", options: .regularExpression, range: nil)
17 |
18 | //guard !cleanText.isEmpty else { throw ElementHandlerError.missingText }
19 |
20 | results.append(cleanText)
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Experiments/Serialization/Handlers/PhyphoxDocumentHandler.swift:
--------------------------------------------------------------------------------
1 | //
2 | // PhyphoxDocumentHandler.swift
3 | // phyphox
4 | //
5 | // Created by Jonas Gessner on 11.04.18.
6 | // Copyright © 2018 RWTH Aachen. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | /// Document handler for experiment files. Root node of the handler tree for experiment files. Produces deserialized `Experiment` instances.
12 | final class PhyphoxDocumentHandler: ResultElementHandler, LookupElementHandler, AttributelessElementHandler {
13 | var results: [Experiment] = []
14 |
15 | private let phyphoxHandler = PhyphoxElementHandler()
16 | var childHandlers: [String: ElementHandler]
17 |
18 | init() {
19 | childHandlers = ["phyphox": phyphoxHandler]
20 | }
21 |
22 | func endElement(text: String, attributes: AttributeContainer) throws {
23 | results.append(try phyphoxHandler.expectSingleResult())
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Experiments/Serialization/Handlers/TextElementHandler.swift:
--------------------------------------------------------------------------------
1 | //
2 | // TextElementHandler.swift
3 | // phyphox
4 | //
5 | // Created by Jonas Gessner on 11.04.18.
6 | // Copyright © 2018 RWTH Aachen. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | /// Element handler extracting the text content from an element. Text needs to be non-empty.
12 | final class TextElementHandler: ResultElementHandler, AttributelessElementHandler, ChildlessElementHandler {
13 | var results = [String]()
14 |
15 | func endElement(text: String, attributes: AttributeContainer) throws {
16 | guard !text.isEmpty else { throw ElementHandlerError.missingText }
17 |
18 | results.append(text)
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Experiments/Serialization/Handlers/ViewHandlers/DepthGUIViewElementHandler.swift:
--------------------------------------------------------------------------------
1 | //
2 | // DepthGUIViewElementHandler.swift
3 | // phyphox
4 | //
5 | // Created by Sebastian Staacks on 13.10.21.
6 | // Copyright © 2021 RWTH Aachen. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | struct DepthGUIViewElementDescriptor {
12 | let label: String
13 | let aspectRatio: CGFloat
14 | }
15 |
16 | final class DepthGUIViewElementHandler: ResultElementHandler, ChildlessElementHandler, ViewComponentElementHandler {
17 | var results = [ViewElementDescriptor]()
18 |
19 | func startElement(attributes: AttributeContainer) throws {}
20 |
21 | private enum Attribute: String, AttributeKey {
22 | case label
23 | case aspectRatio
24 | }
25 |
26 | func endElement(text: String, attributes: AttributeContainer) throws {
27 | let attributes = attributes.attributes(keyedBy: Attribute.self)
28 |
29 | let label = attributes.optionalString(for: .label) ?? ""
30 |
31 | let aspectRatio: CGFloat = try attributes.optionalValue(for: .aspectRatio) ?? 2.5
32 |
33 | results.append(.depthGUI(DepthGUIViewElementDescriptor(label: label, aspectRatio: aspectRatio)))
34 | }
35 |
36 | func nextResult() throws -> ViewElementDescriptor {
37 | guard !results.isEmpty else { throw ElementHandlerError.missingElement("") }
38 | return results.removeFirst()
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Experiments/Serialization/Handlers/ViewHandlers/InfoViewElementHandler.swift:
--------------------------------------------------------------------------------
1 | //
2 | // InfoViewElementHandler.swift
3 | // phyphox
4 | //
5 | // Created by Jonas Gessner on 12.04.18.
6 | // Copyright © 2018 RWTH Aachen. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | // This file contains element handlers for the `info` view element.
12 |
13 | struct InfoViewElementDescriptor {
14 | let label: String
15 | let color: UIColor
16 | let fontSize: CGFloat
17 | let align: TextAlignment
18 | let bold: Bool
19 | let italic: Bool
20 |
21 | enum TextAlignment: String, LosslessStringConvertible {
22 | case left, right, center
23 | }
24 | }
25 |
26 | final class InfoViewElementHandler: ResultElementHandler, ChildlessElementHandler, ViewComponentElementHandler {
27 | var results = [ViewElementDescriptor]()
28 |
29 | func startElement(attributes: AttributeContainer) throws {}
30 |
31 | private enum Attribute: String, AttributeKey {
32 | case label
33 | case color
34 | case size
35 | case align
36 | case bold
37 | case italic
38 | }
39 |
40 | func endElement(text: String, attributes: AttributeContainer) throws {
41 | let attributes = attributes.attributes(keyedBy: Attribute.self)
42 |
43 | let label = attributes.optionalString(for: .label) ?? ""
44 | let color = mapColorString(attributes.optionalString(for: .color)) ?? kFullWhiteColor
45 | let fontSize = CGFloat(try attributes.optionalValue(for: .size) ?? 1.0)
46 | let align: InfoViewElementDescriptor.TextAlignment = try attributes.optionalValue(for: .align) ?? .left
47 | let bold = try attributes.optionalValue(for: .bold) ?? false
48 | let italic = try attributes.optionalValue(for: .italic) ?? false
49 |
50 | results.append(.info(InfoViewElementDescriptor(label: label, color: color, fontSize: fontSize, align: align, bold: bold, italic: italic)))
51 | }
52 |
53 | func nextResult() throws -> ViewElementDescriptor {
54 | guard !results.isEmpty else { throw ElementHandlerError.missingElement("") }
55 | return results.removeFirst()
56 | }
57 | }
58 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Experiments/Serialization/Handlers/ViewHandlers/SeparatorViewElementHandler.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SeparatorElementHandler.swift
3 | // phyphox
4 | //
5 | // Created by Jonas Gessner on 12.04.18.
6 | // Copyright © 2018 RWTH Aachen. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | // This file contains element handlers for the `separator` view element.
12 |
13 | struct SeparatorViewElementDescriptor {
14 | let height: CGFloat
15 | let color: UIColor
16 | }
17 |
18 | final class SeparatorViewElementHandler: ResultElementHandler, ChildlessElementHandler, ViewComponentElementHandler {
19 | var results = [ViewElementDescriptor]()
20 |
21 | func startElement(attributes: AttributeContainer) throws {}
22 |
23 | private enum Attribute: String, AttributeKey {
24 | case height
25 | case color
26 | }
27 |
28 | func endElement(text: String, attributes: AttributeContainer) throws {
29 | let attributes = attributes.attributes(keyedBy: Attribute.self)
30 |
31 | let height: CGFloat = try attributes.optionalValue(for: .height) ?? 0.1
32 |
33 | let color = mapColorString(attributes.optionalString(for: .color)) ?? kBackgroundColor
34 |
35 | results.append(.separator(SeparatorViewElementDescriptor(height: height, color: color)))
36 | }
37 |
38 | func nextResult() throws -> ViewElementDescriptor {
39 | guard !results.isEmpty else { throw ElementHandlerError.missingElement("") }
40 | return results.removeFirst()
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Experiments/ViewDescriptors/ButtonViewDescriptor.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ButtonViewDescriptor.swift
3 | // phyphox
4 | //
5 | // Created by Sebastian Kuhlen on 13.11.16.
6 | // Copyright © 2016 RWTH Aachen. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import CoreGraphics
11 |
12 | struct ButtonViewDescriptor: ViewDescriptor, Equatable {
13 | static func == (lhs: ButtonViewDescriptor, rhs: ButtonViewDescriptor) -> Bool {
14 | return lhs.label == rhs.label &&
15 | lhs.translation == rhs.translation &&
16 | lhs.dataFlow.elementsEqual(rhs.dataFlow, by: { (l, r) -> Bool in
17 | return l.input == r.input && l.output == r.output
18 | }) &&
19 | lhs.triggers.elementsEqual(rhs.triggers)
20 | }
21 |
22 | let dataFlow: [(input: ExperimentAnalysisDataInput, output: DataBuffer)]
23 | let triggers: [String]
24 |
25 | let label: String
26 | let translation: ExperimentTranslationCollection?
27 |
28 | init(label: String, translation: ExperimentTranslationCollection?, dataFlow: [(input: ExperimentAnalysisDataInput, output: DataBuffer)], triggers: [String]) {
29 | self.dataFlow = dataFlow
30 | self.triggers = triggers
31 |
32 | self.label = label
33 | self.translation = translation
34 | }
35 |
36 | func generateViewHTMLWithID(_ id: Int) -> String {
37 | return ""
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Experiments/ViewDescriptors/DepthGUIDescriptor.swift:
--------------------------------------------------------------------------------
1 | //
2 | // depthGUIDescriptor.swift
3 | // phyphox
4 | //
5 | // Created by Sebastian Staacks on 13.10.21.
6 | // Copyright © 2021 RWTH Aachen. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | struct DepthGUIViewDescriptor: ViewDescriptor, Equatable {
12 | let label: String
13 | let aspectRatio: CGFloat
14 |
15 | let translation: ExperimentTranslationCollection?
16 |
17 | init(label: String, aspectRatio: CGFloat, translation: ExperimentTranslationCollection?) {
18 | self.label = label
19 | self.aspectRatio = aspectRatio
20 | self.translation = translation
21 | }
22 |
23 | func generateViewHTMLWithID(_ id: Int) -> String {
24 | let warningText = localize("remoteDepthGUIWarning").replacingOccurrences(of: "\"", with: "\\\"")
25 | return ""
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Experiments/ViewDescriptors/InfoViewDescriptor.swift:
--------------------------------------------------------------------------------
1 | //
2 | // InfoViewDescriptor.swift
3 | // phyphox
4 | //
5 | // Created by Jonas Gessner on 15.12.15.
6 | // Copyright © 2015 Jonas Gessner. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | struct InfoViewDescriptor: ViewDescriptor, Equatable {
12 | let label: String
13 | let color: UIColor
14 | let fontSize: CGFloat
15 | let align: InfoViewElementDescriptor.TextAlignment
16 | let bold: Bool
17 | let italic: Bool
18 | let translation: ExperimentTranslationCollection?
19 |
20 | init(label: String, color: UIColor, fontSize: CGFloat, align: InfoViewElementDescriptor.TextAlignment, bold: Bool, italic: Bool, translation: ExperimentTranslationCollection?) {
21 | self.label = label
22 | self.color = color
23 | self.fontSize = fontSize
24 | self.align = align
25 | self.bold = bold
26 | self.italic = italic
27 | self.translation = translation
28 | }
29 |
30 | func generateViewHTMLWithID(_ id: Int) -> String {
31 | return ""
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Experiments/ViewDescriptors/SeparatorViewDescriptor.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SeparatorViewDescriptor.swift
3 | // phyphox
4 | //
5 | // Created by Sebastian Kuhlen on 09.02.17.
6 | // Copyright © 2017 RWTH Aachen. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | struct SeparatorViewDescriptor: ViewDescriptor, Equatable {
12 | let color: UIColor
13 | let height: CGFloat
14 |
15 | let label = ""
16 | let translation: ExperimentTranslationCollection? = nil
17 |
18 | init(height: CGFloat, color: UIColor) {
19 | self.color = color
20 | self.height = height
21 | }
22 |
23 | func generateViewHTMLWithID(_ id: Int) -> String {
24 | return ""
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Experiments/ViewDescriptors/ViewDescriptor.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ViewDescriptor.swift
3 | // phyphox
4 | //
5 | // Created by Jonas Gessner on 14.12.15.
6 | // Copyright © 2015 Jonas Gessner. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | protocol ViewDescriptor {
12 | var label: String { get }
13 | var translation: ExperimentTranslationCollection? { get }
14 |
15 | func generateViewHTMLWithID(_ id: Int) -> String
16 | func generateDataCompleteHTMLWithID(_ id: Int) -> String
17 | func setDataHTMLWithID(_ id: Int) -> String
18 | }
19 |
20 | extension ViewDescriptor {
21 | var localizedLabel: String {
22 | return translation?.localizeString(label) ?? label
23 | }
24 |
25 | func generateDataCompleteHTMLWithID(_ id: Int) -> String {
26 | return "function() {}"
27 | }
28 |
29 | func setDataHTMLWithID(_ id: Int) -> String {
30 | return "function(x) {}"
31 | }
32 |
33 | }
34 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Helper/Utility.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Utility.swift
3 | // phyphox
4 | //
5 | // Created by Gaurav Tripathee on 17.01.23.
6 | // Copyright © 2023 RWTH Aachen. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | class Utility{
12 |
13 | public static var DARK_MODE: String = "1"
14 | public static var LIGHT_MODE: String = "2"
15 | public static var SYSTEM_MODE: String = "3"
16 |
17 | static func measureHeightofUILabelOnString(line: String) -> CGFloat {
18 | let textView = UITextView()
19 | let maxwidth = UIScreen.main.bounds.width
20 | textView.frame = CGRect(x:0,y: 0,width: maxwidth,height: CGFloat(MAXFLOAT))
21 | textView.textContainerInset = UIEdgeInsets.zero
22 | textView.textContainer.lineFragmentPadding = 0
23 | textView.font = UIFont.preferredFont(forTextStyle: .body)
24 | textView.text = line
25 | textView.isScrollEnabled = false
26 | textView.sizeToFit()
27 | return textView.frame.size.height
28 | }
29 |
30 |
31 |
32 | }
33 |
34 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Licenses/PTFile.swift:
--------------------------------------------------------------------------------
1 | //
2 | // PTFile.swift
3 | // phyphox
4 | //
5 | // Created by Jonas Gessner on 07.04.16.
6 | // Copyright © 2016 Jonas Gessner. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | final class PTFile {
12 | class func stringWithContentsOfFile(_ path: String) -> String {
13 | var str = ""
14 | var empty = true
15 |
16 | for (title, body) in contentsOfFile(path) {
17 | if !empty {
18 | str += "\n\n\n"
19 | }
20 |
21 | str += title + ":\n" + body
22 |
23 | empty = false
24 | }
25 |
26 | return str
27 | }
28 |
29 | class func contentsOfFile(_ path: String) -> [(String, String)] {
30 | let plain = try! String(contentsOfFile: path, encoding: String.Encoding.utf8)
31 |
32 | let components = plain.components(separatedBy: "\n-->\n")
33 |
34 | var results = [(String, String)]()
35 |
36 | for component in components {
37 | let comps = component.components(separatedBy: "::\n")
38 |
39 | if comps.count != 2 || component.count == 0 {
40 | continue
41 | }
42 |
43 | results.append((comps.first!, comps.last!))
44 | }
45 |
46 | return results
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Settings.bundle/ar.lproj/Root.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Settings.bundle/ar.lproj/Root.strings
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Settings.bundle/az.lproj/Root.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Settings.bundle/az.lproj/Root.strings
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Settings.bundle/bn.lproj/Root.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Settings.bundle/bn.lproj/Root.strings
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Settings.bundle/ca.lproj/Root.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Settings.bundle/ca.lproj/Root.strings
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Settings.bundle/cs.lproj/Root.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Settings.bundle/cs.lproj/Root.strings
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Settings.bundle/da.lproj/Root.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Settings.bundle/da.lproj/Root.strings
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Settings.bundle/de.lproj/Root.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Settings.bundle/de.lproj/Root.strings
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Settings.bundle/el.lproj/Root.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Settings.bundle/el.lproj/Root.strings
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Settings.bundle/en.lproj/Root.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Settings.bundle/en.lproj/Root.strings
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Settings.bundle/es.lproj/Root.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Settings.bundle/es.lproj/Root.strings
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Settings.bundle/fa.lproj/Root.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Settings.bundle/fa.lproj/Root.strings
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Settings.bundle/fr.lproj/Root.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Settings.bundle/fr.lproj/Root.strings
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Settings.bundle/hi.lproj/Root.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Settings.bundle/hi.lproj/Root.strings
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Settings.bundle/hu.lproj/Root.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Settings.bundle/hu.lproj/Root.strings
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Settings.bundle/id.lproj/Root.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Settings.bundle/id.lproj/Root.strings
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Settings.bundle/it.lproj/Root.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Settings.bundle/it.lproj/Root.strings
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Settings.bundle/ja.lproj/Root.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Settings.bundle/ja.lproj/Root.strings
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Settings.bundle/ka.lproj/Root.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Settings.bundle/ka.lproj/Root.strings
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Settings.bundle/nl.lproj/Root.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Settings.bundle/nl.lproj/Root.strings
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Settings.bundle/pl.lproj/Root.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Settings.bundle/pl.lproj/Root.strings
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Settings.bundle/pt.lproj/Root.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Settings.bundle/pt.lproj/Root.strings
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Settings.bundle/ru.lproj/Root.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Settings.bundle/ru.lproj/Root.strings
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Settings.bundle/sl.lproj/Root.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Settings.bundle/sl.lproj/Root.strings
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Settings.bundle/sr-Latn.lproj/Root.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Settings.bundle/sr-Latn.lproj/Root.strings
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Settings.bundle/sr.lproj/Root.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Settings.bundle/sr.lproj/Root.strings
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Settings.bundle/sv.lproj/Root.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Settings.bundle/sv.lproj/Root.strings
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Settings.bundle/ta.lproj/Root.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Settings.bundle/ta.lproj/Root.strings
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Settings.bundle/tr.lproj/Root.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Settings.bundle/tr.lproj/Root.strings
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Settings.bundle/uk.lproj/Root.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Settings.bundle/uk.lproj/Root.strings
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Settings.bundle/vi.lproj/Root.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Settings.bundle/vi.lproj/Root.strings
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Settings.bundle/zh-Hans.lproj/Root.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Settings.bundle/zh-Hans.lproj/Root.strings
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/Settings.bundle/zh-Hant.lproj/Root.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phyphox/phyphox-ios/d22733cc3823222b3deecab5f5506ac574ef5eb9/phyphox-iOS/phyphox/Settings.bundle/zh-Hant.lproj/Root.strings
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/UI/CollectionView/CollectionView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CollectionContainerView.swift
3 | // phyphox
4 | //
5 | // Created by Jonas Gessner on 14.01.16.
6 | // Copyright © 2016 Jonas Gessner. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class CollectionContainerView: UIView {
12 | class var collectionViewClass: UICollectionView.Type {
13 | return UICollectionView.self
14 | }
15 |
16 | private(set) var collectionView: UICollectionView
17 |
18 | override init(frame: CGRect) {
19 | let layout = UICollectionViewFlowLayout()
20 |
21 | collectionView = type(of: self).collectionViewClass.init(frame: CGRect.zero, collectionViewLayout: layout)
22 |
23 | super.init(frame: frame)
24 |
25 | addSubview(collectionView)
26 |
27 | self.backgroundColor = UIColor.white
28 | collectionView.backgroundColor = UIColor.white
29 | }
30 |
31 | override func layoutSubviews() {
32 | super.layoutSubviews()
33 |
34 | collectionView.frame = self.bounds
35 |
36 | if #available(iOS 11, *) {
37 | let insets = self.safeAreaInsets
38 | collectionView.contentInset = UIEdgeInsets(top: 0, left: insets.left, bottom: 0, right: insets.right)
39 | }
40 | }
41 |
42 | @available(*, unavailable)
43 | required init?(coder aDecoder: NSCoder) {
44 | fatalError("NSCoding not supported")
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/UI/Extensions/UIAlertController+PTExtensions.h:
--------------------------------------------------------------------------------
1 | //
2 | // UIAlertController+PTExtensions.h
3 | // ProTube 2
4 | //
5 | // Created by Jonas Gessner on 08.11.14.
6 | // Copyright (c) 2014 Jonas Gessner. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface UIAlertController (PTExtensions)
12 |
13 | - (void)__pt__setAccessoryView:(UIView *)accessoryView;
14 |
15 | @end
16 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/UI/Extensions/UIAlertController+PTExtensions.m:
--------------------------------------------------------------------------------
1 | //
2 | // UIAlertController+PTExtensions.m
3 | // ProTube 2
4 | //
5 | // Created by Jonas Gessner on 08.11.14.
6 | // Copyright (c) 2014 Jonas Gessner. All rights reserved.
7 | //
8 |
9 | #import "UIAlertController+PTExtensions.h"
10 |
11 | @interface JGAlertAccessoryViewController : UIViewController {
12 | UIView *_customView;
13 | }
14 |
15 | - (instancetype)initWithView:(UIView *)view;
16 |
17 | @end
18 |
19 | @implementation JGAlertAccessoryViewController
20 |
21 | - (void)loadView {
22 | self.view = _customView;
23 | }
24 |
25 | - (instancetype)initWithView:(UIView *)view {
26 | _customView = view;
27 |
28 | self = [super init];
29 |
30 | return self;
31 | }
32 |
33 | - (CGSize)preferredContentSize {
34 | return [self.view sizeThatFits:[UIScreen mainScreen].bounds.size];
35 | }
36 |
37 | @end
38 |
39 | @implementation UIAlertController (PTExtensions)
40 |
41 | NS_INLINE NSString *base64Decode(NSString *str) {
42 | NSData *decodedData = [[NSData alloc] initWithBase64EncodedString:str options:(NSDataBase64DecodingOptions)kNilOptions];
43 |
44 | NSString *decodedString = [[NSString alloc] initWithData:decodedData encoding:NSUTF8StringEncoding];
45 |
46 | return decodedString;
47 | }
48 |
49 | - (void)__pt__setAccessoryView:(UIView *)accessoryView {
50 | NSString *key = base64Decode(@"Y29udGVudFZpZXdDb250cm9sbGVy");
51 |
52 | JGAlertAccessoryViewController *vc = [[JGAlertAccessoryViewController alloc] initWithView:accessoryView];
53 |
54 | @try {
55 | [self setValue:vc forKey:key];
56 | }
57 | @catch(NSException *exception) {
58 | NSLog(@"Failed setting content view controller: %@", exception);
59 | }
60 | }
61 |
62 | @end
63 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/UI/Extensions/UIColorExtensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UIColorExtensions.swift
3 | // phyphox
4 | //
5 | // Created by Sebastian Staacks on 02.06.23.
6 | // Copyright © 2023 RWTH Aachen. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | extension UIColor {
12 | func autoLightColor() -> UIColor {
13 | if SettingBundleHelper.getAppMode() == Utility.LIGHT_MODE {
14 | return ColorConverterHelper().adjustColorForLightTheme(colorName: self)
15 | } else if SettingBundleHelper.getAppMode() == Utility.DARK_MODE {
16 | return self
17 | } else {
18 | if #available(iOS 12.0, *) {
19 | if UIScreen.main.traitCollection.userInterfaceStyle == .dark {
20 | return self
21 | }
22 | }
23 | return ColorConverterHelper().adjustColorForLightTheme(colorName: self)
24 | }
25 | }
26 | func overlayTextColor() -> UIColor {
27 | if self.luminance > 0.7 {
28 | return UIColor(white: 0.0, alpha: 1.0)
29 | } else {
30 | return UIColor(white: 1.0, alpha: 1.0)
31 | }
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/UI/Extensions/UIImageExt.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UIImageExt.swift
3 | // phyphox
4 | //
5 | // Created by Gaurav Tripathee on 06.03.23.
6 | // Copyright © 2023 RWTH Aachen. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 |
12 | extension UIImage {
13 | // Resize image to a given size
14 | func resize(size: CGSize) -> UIImage {
15 | UIGraphicsBeginImageContextWithOptions(size, false, 0.0)
16 | draw(in: CGRect(x: 0, y: 0, width: size.width, height: size.height))
17 | let resizedImage = UIGraphicsGetImageFromCurrentImageContext()!
18 | UIGraphicsEndImageContext()
19 | return resizedImage
20 | }
21 | }
22 |
23 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/UI/KeyboardTracker.swift:
--------------------------------------------------------------------------------
1 | //
2 | // KeyboardTracker.swift
3 | // phyphox
4 | //
5 | // Created by Jonas Gessner on 26.02.18.
6 | // Copyright © 2018 RWTH Aachen. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | final class KeyboardTracker {
12 | static var keyboardFrame = CGRect.zero
13 |
14 | static func startTracking() {
15 | NotificationCenter.default.addObserver(self.self, selector: #selector(keyboardFrameWillChange(_:)), name: UIResponder.keyboardWillChangeFrameNotification, object: nil)
16 | NotificationCenter.default.addObserver(self.self, selector: #selector(keyboardFrameDidChange(_:)), name: UIResponder.keyboardDidChangeFrameNotification, object: nil)
17 | }
18 |
19 | @objc private static func keyboardFrameWillChange(_ notification: Notification) {
20 | keyboardFrame = (notification.userInfo![UIResponder.keyboardFrameEndUserInfoKey]! as AnyObject).cgRectValue;
21 | if (keyboardFrame.isEmpty) {
22 | keyboardFrame = (notification.userInfo![UIResponder.keyboardFrameBeginUserInfoKey]! as AnyObject).cgRectValue;
23 | }
24 | }
25 |
26 | @objc private static func keyboardFrameDidChange(_ notification: Notification) {
27 | keyboardFrame = (notification.userInfo![UIResponder.keyboardFrameEndUserInfoKey]! as AnyObject).cgRectValue;
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/UI/MainView/CreateExperiment/PresentationController/CreateViewControllerTransitioningDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CreateViewControllerTransitioningDelegate.swift
3 | // phyphox
4 | //
5 | // Created by Jonas Gessner on 04.04.16.
6 | // Copyright © 2015 Jonas Gessner. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | final class CreateViewControllerTransitioningDelegate : NSObject, UIViewControllerTransitioningDelegate {
12 | func presentationControllerForPresentedViewController(_ presented: UIViewController, presentingViewController presenting: UIViewController??, sourceViewController source: UIViewController) -> UIPresentationController? {
13 | return OverlayPresentationController(presentedViewController: presented, presenting: presenting!)
14 | }
15 |
16 | func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController)-> UIViewControllerAnimatedTransitioning? {
17 | return CreateViewControllerTransition(presenting: true)
18 | }
19 |
20 | func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
21 | return CreateViewControllerTransition(presenting: false)
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/UI/MainView/CreateExperiment/TextFieldTableViewCell.swift:
--------------------------------------------------------------------------------
1 | //
2 | // TextFieldTableViewCell.swift
3 | // phyphox
4 | //
5 | // Created by Jonas Gessner on 04.04.16.
6 | // Copyright © 2016 Jonas Gessner. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | private final class InsetTextField: UITextField {
12 | override func editingRect(forBounds bounds: CGRect) -> CGRect {
13 | return bounds.insetBy(dx: 10.0, dy: 5.0)
14 | }
15 |
16 | override func textRect(forBounds bounds: CGRect) -> CGRect {
17 | return bounds.insetBy(dx: 10.0, dy: 5.0)
18 | }
19 |
20 | override func placeholderRect(forBounds bounds: CGRect) -> CGRect {
21 | return bounds.insetBy(dx: 10.0, dy: 5.0)
22 | }
23 | }
24 |
25 | final class TextFieldTableViewCell: UITableViewCell {
26 | let textField: UITextField = InsetTextField()
27 | var editingEndedCallback: (() -> Void)?
28 | var editingChangedCallback: (() -> Void)?
29 |
30 | override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
31 | super.init(style: style, reuseIdentifier: reuseIdentifier)
32 |
33 | textField.addTarget(self, action: #selector(didEndOnExit), for: UIControl.Event(rawValue: UIControl.Event.editingDidEndOnExit.rawValue | UIControl.Event.editingDidEnd.rawValue))
34 | textField.addTarget(self, action: #selector(editingChanged), for: .editingChanged)
35 |
36 | textField.borderStyle = .none
37 | contentView.addSubview(textField)
38 | }
39 |
40 | @objc func editingChanged() {
41 | if editingChangedCallback != nil {
42 | editingChangedCallback!()
43 | }
44 | }
45 |
46 | @objc func didEndOnExit() {
47 | if editingEndedCallback != nil {
48 | editingEndedCallback!()
49 | }
50 | }
51 |
52 | @available(*, unavailable)
53 | required init?(coder aDecoder: NSCoder) {
54 | fatalError("init(coder:) has not been implemented")
55 | }
56 |
57 | override func layoutSubviews() {
58 | super.layoutSubviews()
59 |
60 | textField.frame = contentView.bounds
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/UI/MainView/ExperimentHeaderView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ExperimentHeaderView.swift
3 | // phyphox
4 | //
5 | // Created by Jonas Gessner on 30.03.16.
6 | // Copyright © 2016 Jonas Gessner. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | final class ExperimentHeaderView: UICollectionReusableView {
12 | private let label = UILabel()
13 |
14 | private let background = UIView()
15 |
16 | var title: String? {
17 | set {
18 | label.text = newValue
19 | setNeedsLayout()
20 | }
21 | get {
22 | return label.text
23 | }
24 | }
25 |
26 | var color: UIColor? {
27 | set {
28 | background.backgroundColor = newValue
29 | setNeedsLayout()
30 | }
31 | get {
32 | return background.backgroundColor
33 | }
34 | }
35 |
36 | var fontColor: UIColor? {
37 | set {
38 | label.textColor = newValue
39 | setNeedsLayout()
40 | }
41 | get {
42 | return label.textColor
43 | }
44 | }
45 |
46 | override init(frame: CGRect) {
47 | super.init(frame: frame)
48 |
49 | background.backgroundColor = kHighlightColor
50 | addSubview(background)
51 |
52 | label.font = UIFont.preferredFont(forTextStyle: UIFont.TextStyle.body)
53 | addSubview(label)
54 |
55 | label.textColor = kTextColor
56 | }
57 |
58 | override func layoutSubviews() {
59 | super.layoutSubviews()
60 |
61 | label.frame = CGRect(origin: CGPoint(x: 16.0, y: 8.0), size: CGSize(width: bounds.width-16.0, height: bounds.height-10.0))
62 |
63 | background.frame = CGRect(origin: CGPoint(x: 8.0, y: 8.0), size: CGSize(width: bounds.width-16.0, height: bounds.height-10.0))
64 | }
65 |
66 | convenience init() {
67 | self.init(frame: .zero)
68 | }
69 |
70 | required convenience init?(coder aDecoder: NSCoder) {
71 | self.init()
72 | }
73 | }
74 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/UI/MainView/ExperimentView/ExperimentViewModuleTableViewCell.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ExperimentViewModuleTableViewCell.swift
3 | // phyphox
4 | //
5 | // Created by Jonas Gessner on 14.01.16.
6 | // Copyright © 2016 Jonas Gessner. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | final class ExperimentViewModuleTableViewCell: UITableViewCell {
12 | var module: UIView? {
13 | willSet {
14 | if newValue !== module, module?.superview === contentView {
15 | module?.removeFromSuperview()
16 | }
17 | }
18 |
19 | didSet {
20 | if module !== oldValue, let module = module {
21 | contentView.addSubview(module)
22 | setNeedsLayout() //Adding subview to contentview, so layoutSubviews isn't automatically triggered on self
23 | }
24 | }
25 | }
26 |
27 | var topInset: CGFloat = 0.0 {
28 | didSet {
29 | setNeedsLayout()
30 | }
31 | }
32 |
33 | override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
34 | super.init(style: style, reuseIdentifier: reuseIdentifier)
35 |
36 | backgroundColor = .clear
37 | selectionStyle = .none
38 | }
39 |
40 | @available(*, unavailable)
41 | required init?(coder aDecoder: NSCoder) {
42 | fatalError("init(coder:) has not been implemented")
43 | }
44 |
45 | override func layoutSubviews() {
46 | super.layoutSubviews()
47 |
48 | if let module = module {
49 | let size = module.sizeThatFits(self.contentView.bounds.size)
50 |
51 | let effectiveHeight = contentView.bounds.size.height - topInset
52 |
53 | let origin = CGPoint(x: (contentView.bounds.size.width - size.width)/2.0, y: topInset + (effectiveHeight - size.height)/2.0)
54 |
55 | module.frame = CGRect(origin: origin, size: size)
56 | }
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/UI/MainView/ExperimentView/UIExperimentTabControl.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UIExperimentTabControl.swift
3 | // phyphox
4 | //
5 | // Created by Sebastian Staacks on 24.07.20.
6 | // Copyright © 2020 RWTH Aachen. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | class UIExperimentTabControl: UISegmentedControl {
12 | override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
13 | if gestureRecognizer.isKind(of: UIPanGestureRecognizer.self) {
14 | return true
15 | } else {
16 | return super.gestureRecognizerShouldBegin(gestureRecognizer)
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/UI/MainView/ExperimentView/ViewModules/Dynamic/Graph/FragmentShader.glsl:
--------------------------------------------------------------------------------
1 | uniform lowp vec4 color;
2 |
3 | void main(void) {
4 | gl_FragColor = color;
5 | }
6 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/UI/MainView/ExperimentView/ViewModules/Dynamic/Graph/Grid/GraphPauseMarkerView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // GraphPauseMarkerView.swift
3 | // phyphox
4 | //
5 | // Created by Sebastian Staacks on 18.12.20.
6 | // Copyright © 2020 RWTH Aachen. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | private final class GraphPauseMarkerLayer: CAShapeLayer {
12 | override init() {
13 | super.init()
14 |
15 | commonInit()
16 | }
17 |
18 | override init(layer: Any) {
19 | super.init(layer: layer)
20 |
21 | commonInit()
22 | }
23 |
24 | func commonInit() {
25 | strokeColor = UIColor(red: 1.0, green: 0.0, blue: 0.0, alpha: 0.6).cgColor
26 | fillColor = UIColor(red: 1.0, green: 0.0, blue: 0.0, alpha: 0.2).cgColor
27 | backgroundColor = UIColor.clear.cgColor
28 | }
29 |
30 | @available(*, unavailable)
31 | required init?(coder aDecoder: NSCoder) {
32 | fatalError("init(coder:) has not been implemented")
33 | }
34 |
35 | override func layoutSublayers() {
36 | super.layoutSublayers()
37 |
38 | let path = CGMutablePath(rect: bounds, transform: nil)
39 |
40 | self.path = path
41 | }
42 | }
43 |
44 | final class GraphPauseMarkerView: UIView {
45 | private var pauseMarkerLayer: GraphPauseMarkerLayer {
46 | get {
47 | return self.layer as! GraphPauseMarkerLayer
48 | }
49 | }
50 |
51 | override class var layerClass : AnyClass {
52 | return GraphPauseMarkerLayer.self
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/UI/MainView/ExperimentView/ViewModules/Dynamic/Graph/MapFragmentShader.glsl:
--------------------------------------------------------------------------------
1 | uniform sampler2D colorMap;
2 |
3 | void main(void) {
4 | gl_FragColor = vec4(texture2D(colorMap, vec2(gl_FragCoord.z, 0.0)).rgb, 1.0);
5 | }
6 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/UI/MainView/ExperimentView/ViewModules/Dynamic/Graph/MapVertexShader.glsl:
--------------------------------------------------------------------------------
1 | attribute vec3 position;
2 | uniform vec3 scale;
3 | uniform vec3 translation;
4 |
5 | void main(void) {
6 | gl_Position = vec4(scale * (position + translation), 1.0);
7 | }
8 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/UI/MainView/ExperimentView/ViewModules/Dynamic/Graph/VertexShader.glsl:
--------------------------------------------------------------------------------
1 | attribute vec2 position;
2 | uniform vec2 scale;
3 | uniform vec2 translation;
4 | uniform lowp float pointSize;
5 |
6 | void main(void) {
7 | gl_Position = vec4(scale * (position + translation), 0.0, 1.0);
8 | gl_PointSize = pointSize;
9 | }
10 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/UI/MainView/ExperimentView/ViewModules/Static/ExperimentSeparatorView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ExperimentSeparatorView.swift
3 | // phyphox
4 | //
5 | // Created by Sebastian Kuhlen on 09.02.17.
6 | // Copyright © 2017 RWTH Aachen. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | import UIKit
12 |
13 | final class ExperimentSeparatorView: UIView, DescriptorBoundViewModule {
14 | let descriptor: SeparatorViewDescriptor
15 | let fontScale = UIFont.preferredFont(forTextStyle: .footnote).pointSize
16 |
17 | required init?(descriptor: SeparatorViewDescriptor) {
18 | self.descriptor = descriptor
19 | super.init(frame: .zero)
20 | backgroundColor = descriptor.color.autoLightColor()
21 | }
22 |
23 | @available(*, unavailable)
24 | required init?(coder aDecoder: NSCoder) {
25 | fatalError("init(coder:) has not been implemented")
26 | }
27 |
28 | override func sizeThatFits(_ size: CGSize) -> CGSize {
29 | return CGSize(width: size.width, height: descriptor.height * fontScale)
30 | }
31 |
32 | override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
33 | super.traitCollectionDidChange(previousTraitCollection)
34 | if #available(iOS 13.0, *) {
35 | if self.traitCollection.hasDifferentColorAppearance(comparedTo: previousTraitCollection) {
36 | backgroundColor = descriptor.color.autoLightColor()
37 | }
38 | }
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/UI/MainView/FixedTableView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // FixedTableView.swift
3 | // phyphox
4 | //
5 | // Created by Sebastian Staacks on 13.03.19.
6 | // Copyright © 2019 RWTH Aachen. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | //This is a slight modification of UITableView for fixed size usage. It always reports its content size as intrinsic content size
12 | final class FixedTableView: UITableView {
13 |
14 | override func reloadData() {
15 | super.reloadData()
16 | self.invalidateIntrinsicContentSize()
17 | self.layoutIfNeeded()
18 | }
19 |
20 | override var intrinsicContentSize: CGSize {
21 | self.layoutIfNeeded()
22 | return CGSize(width: UIView.noIntrinsicMetric, height: contentSize.height)
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/UI/MainView/MainView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // MainView.swift
3 | // phyphox
4 | //
5 | // Created by Jonas Gessner on 04.12.15.
6 | // Copyright © 2015 Jonas Gessner. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | final class FixedBottomInsetCollectionView: UICollectionView {
12 | override var contentInset: UIEdgeInsets {
13 | get {
14 | return super.contentInset
15 | }
16 | set {
17 | var s = newValue
18 | s.bottom = 0.0
19 | super.contentInset = s
20 | }
21 | }
22 |
23 | override var scrollIndicatorInsets: UIEdgeInsets {
24 | get {
25 | return super.scrollIndicatorInsets
26 | }
27 | set {
28 | var s = newValue
29 | s.bottom = 0.0
30 | super.scrollIndicatorInsets = s
31 | }
32 | }
33 | }
34 |
35 | final class MainView: CollectionContainerView {
36 | override class var collectionViewClass: UICollectionView.Type {
37 | return FixedBottomInsetCollectionView.self
38 | }
39 |
40 | override init(frame: CGRect) {
41 | super.init(frame: frame)
42 |
43 | collectionView.backgroundColor = UIColor(named: "mainBackground")
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/UI/MainView/NavigationController/MainNavigationBar.swift:
--------------------------------------------------------------------------------
1 | //
2 | // MainNavigationBar.swift
3 | // phyphox
4 | //
5 | // Created by Jonas Gessner on 15.01.16.
6 | // Copyright © 2016 Jonas Gessner. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class MainNavigationBar: UINavigationBar {
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/UI/MainView/NavigationController/MainNavigationViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // MainNavigationViewController.swift
3 | // phyphox
4 | //
5 | // Created by Jonas Gessner on 08.01.16.
6 | // Copyright © 2016 Jonas Gessner. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class MainNavigationViewController: UINavigationController {
12 |
13 | override func viewDidLoad() {
14 | super.viewDidLoad()
15 |
16 | hidesBarsOnSwipe = false
17 |
18 | self.navigationBar.tintColor = kTextColor
19 | self.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: kTextColor]
20 |
21 | self.interactivePopGestureRecognizer?.isEnabled = false
22 |
23 | //barTintColor is set per view controller...
24 | }
25 |
26 | override func didReceiveMemoryWarning() {
27 | super.didReceiveMemoryWarning()
28 | }
29 |
30 | }
31 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/UI/MainView/PTButton.h:
--------------------------------------------------------------------------------
1 | //
2 | // PTButton.h
3 | // ProTube 2
4 | //
5 | // Created by Jonas Gessner on 31.08.14.
6 | // Copyright (c) 2014 Jonas Gessner. All rights reserved.
7 | //
8 |
9 | /**
10 | This code is taken from the ProTube for YouTube iOS app (https://itunes.apple.com/app/id931201696). © 2014-2016 Jonas Gessner
11 | */
12 |
13 | #import
14 |
15 | @interface PTButton : UIButton
16 |
17 | - (void)setTintColor:(UIColor *)tintColor forState:(UIControlState)state;
18 | - (UIColor *)tintColorForState:(UIControlState)state;
19 |
20 | @end
21 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/UI/ShrinkingAnimaitonViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ScalableViewController.swift
3 | // phyphox
4 | //
5 | // Created by Jonas Gessner on 05.04.16.
6 | // Copyright © 2016 Jonas Gessner. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class ScalableViewController: UIViewController {
12 | final var viewControllerScale: CGFloat = 1.0 {
13 | didSet {
14 | view.setNeedsLayout()
15 | view.layoutIfNeeded()
16 | }
17 | }
18 |
19 | let vc: UIViewController
20 |
21 | init(hostedVC: UIViewController) {
22 | vc = hostedVC
23 |
24 | super.init(nibName: nil, bundle: nil)
25 |
26 | addChild(vc)
27 | vc.view.frame = view.bounds
28 | view.addSubview(vc.view)
29 | vc.didMove(toParent: self)
30 | }
31 |
32 | @available(*, unavailable)
33 | required init?(coder aDecoder: NSCoder) {
34 | fatalError("init(coder:) has not been implemented")
35 | }
36 |
37 | override func viewDidLayoutSubviews() {
38 | super.viewDidLayoutSubviews()
39 |
40 | vc.view.transform = CGAffineTransform.identity
41 | vc.view.frame = view.bounds
42 | vc.view.transform = CGAffineTransform(scaleX: viewControllerScale, y: viewControllerScale)
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/ar.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/ar.lproj/Localizable.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/bn.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/ca.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 | /*
2 | InfoPlist.strings
3 | phyphox
4 |
5 | Created by Sebastian Kuhlen on 17.09.16.
6 | Copyright © 2016 RWTH Aachen. All rights reserved.
7 | */
8 | "NSMicrophoneUsageDescription" = "phyphox snima zvuk iz mikrofona kao kod drugih senzora i analizira ga prema odabranom eksperimentu. Podaci će biti izvezeni iz aplikacije samo ako korisnik to uradi koristeći funkciju izvoza.";
9 | "NSLocationWhenInUseUsageDescription" = "phyphox snima podatke o lokaciji iz GPS-a kao iz drugih senzora i analizira ih prema odabranom eksperimentu. Podaci će biti izvezeni iz aplikacije samo ako korisnik to uradi koristeći funkciju izvoza.";
10 | "NSPhotoLibraryAddUsageDescription" = "phyphox može dodati slike ekrana u vašu biblioteku fotografija ako odaberete \"podeli sliku ekrana\" iz izbornika eksperimenta.";
11 | "NSMotionUsageDescription" = "phyphox čita senzore vašeg telefona kako bi omogućila njihovo korišćenje u eksperimentima fizike.";
12 | "NSCameraUsageDescription" = "phyphox usa la cámara para escanear códigos QR, para agregar configuraciones de experimento personalizadas.";
13 | "NSBluetoothPeripheralUsageDescription" = "phyphox tiene la capacidad de leer sensores externos por medio de Bluetooth y escribir datos en dispositivos externos por Bluetooth. Puede obtener más información sobre esta función y de dispositivos compatibles en http://phyphox.org/ble.";
14 | "NSBluetoothAlwaysUsageDescription" = "phyphox tiene la capacidad de leer sensores externos por medio del Bluetooth y escribir datos en dispositivos externos por Bluetooth. Puede obtener más información sobre esta función y los dispositivos compatibles en http://phyphox.org/ble.";
15 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/color.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/color.xcassets/Image.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x"
10 | },
11 | {
12 | "idiom" : "universal",
13 | "scale" : "3x"
14 | }
15 | ],
16 | "info" : {
17 | "author" : "xcode",
18 | "version" : 1
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/color.xcassets/RWTHBackgroundColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "1.000",
9 | "green" : "1.000",
10 | "red" : "1.000"
11 | }
12 | },
13 | "idiom" : "universal"
14 | },
15 | {
16 | "appearances" : [
17 | {
18 | "appearance" : "luminosity",
19 | "value" : "dark"
20 | }
21 | ],
22 | "color" : {
23 | "color-space" : "srgb",
24 | "components" : {
25 | "alpha" : "1.000",
26 | "blue" : "1.000",
27 | "green" : "1.000",
28 | "red" : "1.000"
29 | }
30 | },
31 | "idiom" : "universal"
32 | }
33 | ],
34 | "info" : {
35 | "author" : "xcode",
36 | "version" : 1
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/color.xcassets/RWTHBlue.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "165",
9 | "green" : "96",
10 | "red" : "0"
11 | }
12 | },
13 | "idiom" : "universal"
14 | },
15 | {
16 | "appearances" : [
17 | {
18 | "appearance" : "luminosity",
19 | "value" : "dark"
20 | }
21 | ],
22 | "color" : {
23 | "color-space" : "srgb",
24 | "components" : {
25 | "alpha" : "1.000",
26 | "blue" : "159",
27 | "green" : "84",
28 | "red" : "0"
29 | }
30 | },
31 | "idiom" : "universal"
32 | }
33 | ],
34 | "info" : {
35 | "author" : "xcode",
36 | "version" : 1
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/color.xcassets/RWTHTextColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0.000",
9 | "green" : "0.000",
10 | "red" : "0.000"
11 | }
12 | },
13 | "idiom" : "universal"
14 | },
15 | {
16 | "appearances" : [
17 | {
18 | "appearance" : "luminosity",
19 | "value" : "dark"
20 | }
21 | ],
22 | "color" : {
23 | "color-space" : "srgb",
24 | "components" : {
25 | "alpha" : "1.000",
26 | "blue" : "0.000",
27 | "green" : "0.000",
28 | "red" : "0.000"
29 | }
30 | },
31 | "idiom" : "universal"
32 | }
33 | ],
34 | "info" : {
35 | "author" : "xcode",
36 | "version" : 1
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/color.xcassets/backgroundDark.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "gray-gamma-22",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "white" : "0.753"
9 | }
10 | },
11 | "idiom" : "universal"
12 | },
13 | {
14 | "appearances" : [
15 | {
16 | "appearance" : "luminosity",
17 | "value" : "light"
18 | }
19 | ],
20 | "color" : {
21 | "color-space" : "gray-gamma-22",
22 | "components" : {
23 | "alpha" : "1.000",
24 | "white" : "0.753"
25 | }
26 | },
27 | "idiom" : "universal"
28 | },
29 | {
30 | "appearances" : [
31 | {
32 | "appearance" : "luminosity",
33 | "value" : "dark"
34 | }
35 | ],
36 | "color" : {
37 | "color-space" : "gray-gamma-22",
38 | "components" : {
39 | "alpha" : "1.000",
40 | "white" : "0.110"
41 | }
42 | },
43 | "idiom" : "universal"
44 | }
45 | ],
46 | "info" : {
47 | "author" : "xcode",
48 | "version" : 1
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/color.xcassets/bluetoothColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "165",
9 | "green" : "96",
10 | "red" : "34"
11 | }
12 | },
13 | "idiom" : "universal"
14 | },
15 | {
16 | "appearances" : [
17 | {
18 | "appearance" : "luminosity",
19 | "value" : "dark"
20 | }
21 | ],
22 | "color" : {
23 | "color-space" : "srgb",
24 | "components" : {
25 | "alpha" : "1.000",
26 | "blue" : "165",
27 | "green" : "96",
28 | "red" : "34"
29 | }
30 | },
31 | "idiom" : "universal"
32 | }
33 | ],
34 | "info" : {
35 | "author" : "xcode",
36 | "version" : 1
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/color.xcassets/darkenedColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "extended-gray",
6 | "components" : {
7 | "alpha" : "0.500",
8 | "white" : "0"
9 | }
10 | },
11 | "idiom" : "universal"
12 | },
13 | {
14 | "appearances" : [
15 | {
16 | "appearance" : "luminosity",
17 | "value" : "dark"
18 | }
19 | ],
20 | "color" : {
21 | "color-space" : "extended-gray",
22 | "components" : {
23 | "alpha" : "0.500",
24 | "white" : "0"
25 | }
26 | },
27 | "idiom" : "universal"
28 | }
29 | ],
30 | "info" : {
31 | "author" : "xcode",
32 | "version" : 1
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/color.xcassets/dialogBackground.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "1.000",
9 | "green" : "1.000",
10 | "red" : "1.000"
11 | }
12 | },
13 | "idiom" : "universal"
14 | },
15 | {
16 | "appearances" : [
17 | {
18 | "appearance" : "luminosity",
19 | "value" : "dark"
20 | }
21 | ],
22 | "color" : {
23 | "color-space" : "srgb",
24 | "components" : {
25 | "alpha" : "1.000",
26 | "blue" : "1.000",
27 | "green" : "1.000",
28 | "red" : "1.000"
29 | }
30 | },
31 | "idiom" : "universal"
32 | }
33 | ],
34 | "info" : {
35 | "author" : "xcode",
36 | "version" : 1
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/color.xcassets/dialogTextColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "1.000",
9 | "green" : "1.000",
10 | "red" : "1.000"
11 | }
12 | },
13 | "idiom" : "universal"
14 | },
15 | {
16 | "appearances" : [
17 | {
18 | "appearance" : "luminosity",
19 | "value" : "dark"
20 | }
21 | ],
22 | "color" : {
23 | "color-space" : "srgb",
24 | "components" : {
25 | "alpha" : "1.000",
26 | "blue" : "1.000",
27 | "green" : "1.000",
28 | "red" : "1.000"
29 | }
30 | },
31 | "idiom" : "universal"
32 | }
33 | ],
34 | "info" : {
35 | "author" : "xcode",
36 | "version" : 1
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/color.xcassets/graphLines.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "gray-gamma-22",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "white" : "0"
9 | }
10 | },
11 | "idiom" : "universal"
12 | },
13 | {
14 | "appearances" : [
15 | {
16 | "appearance" : "luminosity",
17 | "value" : "dark"
18 | }
19 | ],
20 | "color" : {
21 | "color-space" : "srgb",
22 | "components" : {
23 | "alpha" : "1.000",
24 | "blue" : "255",
25 | "green" : "255",
26 | "red" : "255"
27 | }
28 | },
29 | "idiom" : "universal"
30 | }
31 | ],
32 | "info" : {
33 | "author" : "xcode",
34 | "version" : 1
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/color.xcassets/graphLinesWithAlpha.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "gray-gamma-22",
6 | "components" : {
7 | "alpha" : "0.300",
8 | "white" : "0.000"
9 | }
10 | },
11 | "idiom" : "universal"
12 | },
13 | {
14 | "appearances" : [
15 | {
16 | "appearance" : "luminosity",
17 | "value" : "dark"
18 | }
19 | ],
20 | "color" : {
21 | "color-space" : "gray-gamma-22",
22 | "components" : {
23 | "alpha" : "0.300",
24 | "white" : "1.000"
25 | }
26 | },
27 | "idiom" : "universal"
28 | }
29 | ],
30 | "info" : {
31 | "author" : "xcode",
32 | "version" : 1
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/color.xcassets/highlightColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "34",
9 | "green" : "126",
10 | "red" : "255"
11 | }
12 | },
13 | "idiom" : "universal"
14 | },
15 | {
16 | "appearances" : [
17 | {
18 | "appearance" : "luminosity",
19 | "value" : "dark"
20 | }
21 | ],
22 | "color" : {
23 | "color-space" : "srgb",
24 | "components" : {
25 | "alpha" : "1.000",
26 | "blue" : "34",
27 | "green" : "126",
28 | "red" : "255"
29 | }
30 | },
31 | "idiom" : "universal"
32 | }
33 | ],
34 | "info" : {
35 | "author" : "xcode",
36 | "version" : 1
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/color.xcassets/lightBackgroundColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "extended-gray",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "white" : "225"
9 | }
10 | },
11 | "idiom" : "universal"
12 | },
13 | {
14 | "appearances" : [
15 | {
16 | "appearance" : "luminosity",
17 | "value" : "dark"
18 | }
19 | ],
20 | "color" : {
21 | "color-space" : "extended-gray",
22 | "components" : {
23 | "alpha" : "1.000",
24 | "white" : "64"
25 | }
26 | },
27 | "idiom" : "universal"
28 | }
29 | ],
30 | "info" : {
31 | "author" : "xcode",
32 | "version" : 1
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/color.xcassets/lightBackgroundHoverColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "extended-gray",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "white" : "0.500"
9 | }
10 | },
11 | "idiom" : "universal"
12 | },
13 | {
14 | "appearances" : [
15 | {
16 | "appearance" : "luminosity",
17 | "value" : "dark"
18 | }
19 | ],
20 | "color" : {
21 | "color-space" : "extended-gray",
22 | "components" : {
23 | "alpha" : "1.000",
24 | "white" : "0.500"
25 | }
26 | },
27 | "idiom" : "universal"
28 | }
29 | ],
30 | "info" : {
31 | "author" : "xcode",
32 | "version" : 1
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/color.xcassets/mainBackground.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "extended-gray",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "white" : "248"
9 | }
10 | },
11 | "idiom" : "universal"
12 | },
13 | {
14 | "appearances" : [
15 | {
16 | "appearance" : "luminosity",
17 | "value" : "dark"
18 | }
19 | ],
20 | "color" : {
21 | "color-space" : "extended-gray",
22 | "components" : {
23 | "alpha" : "1.000",
24 | "white" : "32"
25 | }
26 | },
27 | "idiom" : "universal"
28 | }
29 | ],
30 | "info" : {
31 | "author" : "xcode",
32 | "version" : 1
33 | },
34 | "properties" : {
35 | "localizable" : true
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/color.xcassets/markerLabel.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "255",
9 | "green" : "255",
10 | "red" : "255"
11 | }
12 | },
13 | "idiom" : "universal"
14 | },
15 | {
16 | "appearances" : [
17 | {
18 | "appearance" : "luminosity",
19 | "value" : "light"
20 | }
21 | ],
22 | "color" : {
23 | "color-space" : "gray-gamma-22",
24 | "components" : {
25 | "alpha" : "0.800",
26 | "white" : "0"
27 | }
28 | },
29 | "idiom" : "universal"
30 | },
31 | {
32 | "appearances" : [
33 | {
34 | "appearance" : "luminosity",
35 | "value" : "dark"
36 | }
37 | ],
38 | "color" : {
39 | "color-space" : "gray-gamma-22",
40 | "components" : {
41 | "alpha" : "0.800",
42 | "white" : "1.000"
43 | }
44 | },
45 | "idiom" : "universal"
46 | }
47 | ],
48 | "info" : {
49 | "author" : "xcode",
50 | "version" : 1
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/color.xcassets/secondaryBackground.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "extended-gray",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "white" : "210"
9 | }
10 | },
11 | "idiom" : "universal"
12 | },
13 | {
14 | "appearances" : [
15 | {
16 | "appearance" : "luminosity",
17 | "value" : "dark"
18 | }
19 | ],
20 | "color" : {
21 | "color-space" : "extended-gray",
22 | "components" : {
23 | "alpha" : "1.000",
24 | "white" : "16"
25 | }
26 | },
27 | "idiom" : "universal"
28 | }
29 | ],
30 | "info" : {
31 | "author" : "xcode",
32 | "version" : 1
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/color.xcassets/textColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "extended-gray",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "white" : "0.542"
9 | }
10 | },
11 | "idiom" : "universal"
12 | },
13 | {
14 | "appearances" : [
15 | {
16 | "appearance" : "luminosity",
17 | "value" : "light"
18 | }
19 | ],
20 | "color" : {
21 | "color-space" : "extended-gray",
22 | "components" : {
23 | "alpha" : "1.000",
24 | "white" : "0.000"
25 | }
26 | },
27 | "idiom" : "universal"
28 | },
29 | {
30 | "appearances" : [
31 | {
32 | "appearance" : "luminosity",
33 | "value" : "dark"
34 | }
35 | ],
36 | "color" : {
37 | "color-space" : "srgb",
38 | "components" : {
39 | "alpha" : "1.000",
40 | "blue" : "255",
41 | "green" : "255",
42 | "red" : "255"
43 | }
44 | },
45 | "idiom" : "universal"
46 | }
47 | ],
48 | "info" : {
49 | "author" : "xcode",
50 | "version" : 1
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/color.xcassets/textColorDeactivated.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "extended-gray",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "white" : "0.500"
9 | }
10 | },
11 | "idiom" : "universal"
12 | },
13 | {
14 | "appearances" : [
15 | {
16 | "appearance" : "luminosity",
17 | "value" : "dark"
18 | }
19 | ],
20 | "color" : {
21 | "color-space" : "gray-gamma-22",
22 | "components" : {
23 | "alpha" : "1.000",
24 | "white" : "0.500"
25 | }
26 | },
27 | "idiom" : "universal"
28 | }
29 | ],
30 | "info" : {
31 | "author" : "xcode",
32 | "version" : 1
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/color.xcassets/textSecondaryColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "extended-gray",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "white" : "0.220"
9 | }
10 | },
11 | "idiom" : "universal"
12 | },
13 | {
14 | "appearances" : [
15 | {
16 | "appearance" : "luminosity",
17 | "value" : "dark"
18 | }
19 | ],
20 | "color" : {
21 | "color-space" : "extended-gray",
22 | "components" : {
23 | "alpha" : "1.000",
24 | "white" : "0.880"
25 | }
26 | },
27 | "idiom" : "universal"
28 | }
29 | ],
30 | "info" : {
31 | "author" : "xcode",
32 | "version" : 1
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/color.xcassets/textUnavailableColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "gray-gamma-22",
6 | "components" : {
7 | "alpha" : "0.600",
8 | "white" : "0.000"
9 | }
10 | },
11 | "idiom" : "universal"
12 | },
13 | {
14 | "appearances" : [
15 | {
16 | "appearance" : "luminosity",
17 | "value" : "dark"
18 | }
19 | ],
20 | "color" : {
21 | "color-space" : "gray-gamma-22",
22 | "components" : {
23 | "alpha" : "0.600",
24 | "white" : "1.000"
25 | }
26 | },
27 | "idiom" : "universal"
28 | }
29 | ],
30 | "info" : {
31 | "author" : "xcode",
32 | "version" : 1
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/cs.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 | /*
2 | InfoPlist.strings
3 | phyphox
4 |
5 | Created by Sebastian Kuhlen on 17.09.16.
6 | Copyright © 2016 RWTH Aachen. All rights reserved.
7 | */
8 | "NSLocationWhenInUseUsageDescription" = "phyphox nyní zaznamenává data o vaší pozici. Tato data jsou analyzována v závislosti na vybraném experimentu a budou z této aplikace exportována pouze v případě, že si tuto možnost zvolíte použitím funkce exportovat.";
9 | "NSMicrophoneUsageDescription" = "phyphox nyní zaznamenává zvuk z mikrofonu. Tato data jsou analyzována v závislosti na vybraném experimentu a budou z této aplikace exportována pouze v případě, že si tuto možnost zvolíte použitím funkce exportovat.";
10 | "NSPhotoLibraryAddUsageDescription" = "phyphox může ukládat screenshoty do vašeho fotoalba pokud použijete možnost \"Sdílet screenshot\" v menu experimentu.";
11 | "NSMotionUsageDescription" = "phyphox odečítá hodnoty ze senzorů vašeho mobilního zařízení a používá je k fyzikálním experimentům.";
12 | "NSCameraUsageDescription" = "phyphox používá kameru ke snímání QR kódů, které lze použít k přidání vlastních konfigurací experimentů. Používá se také při experimentech s hloubkovými senzory (LiDAR/ToF) k měření vzdálenosti a zobrazení náhledu oblasti zájmu.";
13 | "NSBluetoothPeripheralUsageDescription" = "phyphox umí číst z externích senzorů Bluetooth a zapisovat data do externích zařízení Bluetooth. Více informací o této funkci a podporovaných zařízeních najdete na adrese http://phyphox.org/ble.";
14 | "NSBluetoothAlwaysUsageDescription" = "phyphox umí číst z externích senzorů Bluetooth a zapisovat data do externích zařízení Bluetooth. Více informací o této funkci a podporovaných zařízeních najdete na adrese http://phyphox.org/ble.";
15 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/da.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/de.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 | /*
2 | InfoPlist.strings
3 | phyphox
4 |
5 | Created by Sebastian Kuhlen on 17.09.16.
6 | Copyright © 2016 RWTH Aachen. All rights reserved.
7 | */
8 | "NSMicrophoneUsageDescription" = "phyphox nimmt Audio vom Mikrofon auf wie von anderen Sensoren und analysiert sie entsprechend dem jeweiligen Experiment. Die Daten werden nur auf Wunsch über die Export-Funktion aus der App exportiert.";
9 | "NSLocationWhenInUseUsageDescription" = "phyphox nimmt Standortdaten über GPS auf wie auch Daten von anderen Sensoren und analysiert sie entsprechend dem jeweiligen Experiment. Die Daten werden nur auf Wunsch über die Export-Funktion aus der App exportiert.";
10 | "NSPhotoLibraryAddUsageDescription" = "phyphox kann Screenshots zu deiner Bildersammlung über die Funktion \"Screenshot teilen\" aus dem Experiment-Menü hinzufügen.";
11 | "NSMotionUsageDescription" = "phyphox liest die Sensoren deines Smartphones aus um diese in Physik-Experimenten nutzen zu können.";
12 | "NSCameraUsageDescription" = "phyphox nutzt die Kamera um QR-Codes zu scannen, welche benutzt werden können um eigene Experiment-Konfigurationen zu laden. Sie wird zudem in Tiefen-Sensor-Experimenten (LiDAR/ToF) verwendet um Distanzmessungen durchzuführen und eine Vorschau des Messbereichs zu zeigen.";
13 | "NSBluetoothPeripheralUsageDescription" = "phyphox kann Daten von externen Bluetooth-Sensoren lesen und auch Daten auf externe Bluetooth-Geräte schreiben. Du kannst mehr über diese Funktion und unterstützte Geräte auf http://phyphox.org/ble erfahren.";
14 | "NSBluetoothAlwaysUsageDescription" = "phyphox kann Daten von externen Bluetooth-Sensoren lesen und auch Daten auf externe Bluetooth-Geräte schreiben. Du kannst mehr über diese Funktion und unterstützte Geräte auf http://phyphox.org/ble erfahren.";
15 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/de.lproj/LaunchScreen.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/el.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 | /*
2 | InfoPlist.strings
3 | phyphox
4 |
5 | Created by Sebastian Kuhlen on 17.09.16.
6 | Copyright © 2016 RWTH Aachen. All rights reserved.
7 | */
8 | "NSMicrophoneUsageDescription" = "To phyphox κάνει καταγραφή ήχου από το μικρόφωνο όπως και από άλλους αισθητήρες και κάνει ανάλυση σύμφωνα με το επιλεγμένο πείραμα. Τα δεδομένα θα εξαχθούν από την εφαρμογή μόνο αν ο χρήστης αποφασίζει να το πράξει χρησιμοποιώντας την λειτουργία εξαγωγής.";
9 | "NSLocationWhenInUseUsageDescription" = "To phyphox κάνει καταγραφή δεδομένων τοποθεσίας από το GPS όπως και από άλλους αισθητήρες και κάνει ανάλυση σύμφωνα με το επιλεγμένο πείραμα. Τα δεδομένα θα εξαχθούν από την εφαρμογή μόνο αν ο χρήστης αποφασίζει να το πράξει χρησιμοποιώντας την λειτουργία εξαγωγής.";
10 | "NSPhotoLibraryAddUsageDescription" = "To phyphox μπορεί να προσθέσει screenshots στην βιβλιοθήκη των φωτογραφιών σας αν επιλέξετε \"Διαμοιρασμός screenshots\" από το μενού του πειράματος.";
11 | "NSMotionUsageDescription" = "Το phyphox διαβάζει δεδομένα των αισθητήρων του τηλεφώνου σας για να χρησιμοποιηθούν σε πειράματα φυσικής.";
12 | "NSBluetoothPeripheralUsageDescription" = "Το phyphox έχει τη δυνατότητα να εισάγει δεδομένα εξωτερικών αισθητήρων Bleutooth και να εξάγει δεδομένα σε εξωτερικές συσκευές bluetooth. Μπορείτε να βρείτε παραπάνω πληροφορίες σχετικά με αυτή τη δυνατότητα και τις υποστηριζόμενες συσκευές στο http://phyphox.org/ble.";
13 | "NSBluetoothAlwaysUsageDescription" = "Το phyphox έχει τη δυνατότητα να εισάγει δεδομένα εξωτερικών αισθητήρων Bleutooth και να εξάγει δεδομένα σε εξωτερικές συσκευές Βluetooth. Μπορείτε να βρείτε παραπάνω πληροφορίες σχετικά με αυτή τη δυνατότητα και τις υποστηριζόμενες συσκευές στο http://phyphox.org/ble.";
14 | "NSCameraUsageDescription" = "η εφαρμογή phyphox χρησιμοποιεί την κάμερα για να σκανάρει κωδικούς QR, για την προσθήκη νέων διαμορφώσεων πειραμάτων. Χρησιμοποιείται επίσης σε πειράματα βάθους με αισθητήρες (LiDAR/ToF) για να παρέχει μετρήσεις απόστασης και για προεπισκόπηση της περιοχής ενδιαφέροντος.";
15 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/en.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 | /*
2 | InfoPlist.strings
3 | phyphox
4 |
5 | Created by Sebastian Kuhlen on 17.09.16.
6 | Copyright © 2016 RWTH Aachen. All rights reserved.
7 | */
8 | "NSMicrophoneUsageDescription" = "phyphox records audio from the microphone like from other sensors and analyzes it according to the selected experiment. The data will only be exported from the app if the user elects to do so using the export function.";
9 | "NSLocationWhenInUseUsageDescription" = "phyphox records location data from GPS like from other sensors and analyzes it according to the selected experiment. The data will only be exported from the app if the user elects to do so using the export function.";
10 | "NSPhotoLibraryAddUsageDescription" = "phyphox can add screenshots to your photo library if you select \"Share screenshot\" from the experiment menu.";
11 | "NSMotionUsageDescription" = "phyphox reads your phone's sensors to allow using them in physics experiments.";
12 | "NSCameraUsageDescription" = "phyphox uses the camera to scan QR codes, which can be used to add custom experiment configurations. It is also used in depth sensor experiments (LiDAR/ToF) to provide distance measurements and to show a preview of the region of interest.";
13 | "NSBluetoothPeripheralUsageDescription" = "phyphox has the ability to read from external Bluetooth sensors and write data to external Bluetooth devices. You can learn more about this feature and supported devices on http://phyphox.org/ble.";
14 | "NSBluetoothAlwaysUsageDescription" = "phyphox has the ability to read from external Bluetooth sensors and write data to external Bluetooth devices. You can learn more about this feature and supported devices on http://phyphox.org/ble.";
15 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/es.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 | /*
2 | InfoPlist.strings
3 | phyphox
4 |
5 | Created by Sebastian Kuhlen on 17.09.16.
6 | Copyright © 2016 RWTH Aachen. All rights reserved.
7 | */
8 | "NSMicrophoneUsageDescription" = "Phyphox graba audios con el micrófono y con otros sensores y los analiza de acuerdo con el experimento seleccionado. Los datos serán exportados desde el app solamente si el usuario elige hacerlo, usando la función \"exportar\".";
9 | "NSLocationWhenInUseUsageDescription" = "Phyphox graba información de localización del GPS como de otros sensores y los analiza de acuerdo con el experimento seleccionado. Los datos serán exportados desde el app solamente si el usuario elige hacerlo, usando la función \"exportar\".";
10 | "NSPhotoLibraryAddUsageDescription" = "Phyphox puede agregar imágenes de pantalla a la galería de fotos si usted selecciona \"compartir imagen\" en las opciones del experimento.";
11 | "NSMotionUsageDescription" = "Phyphox accede a los sensores del teléfono para que puedan ser usados en experimentos de física.";
12 | "NSBluetoothPeripheralUsageDescription" = "Phyphox tiene la capacidad de leer información de sensores Bluetooth periféricos y de mandar datos a dispositivos Bluetooth. Para saber más acerca de esto y los dispositivos incluidos en: http://phyphox.org/ble.";
13 | "NSBluetoothAlwaysUsageDescription" = "Phyphox tiene la capacidad de leer información de sensores Bluetooth periféricos y de mandar datos a dispositivos Bluetooth. Para saber más acerca de esto y los dispositivos incluidos en: http://phyphox.org/ble.";
14 | "NSCameraUsageDescription" = "Phyphox usa la cámara fotográfica para escanear códigos QR, los cuales pueden ser usados para agregar configuraciones de experimentos personalizados. También se usa en experimentos de profundidad (LiDAR/ToF) para suministrar medidas de distancia y mostrar áreas medidas.";
15 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/fa.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 | /*
2 | InfoPlist.strings
3 | phyphox
4 |
5 | Created by Sebastian Kuhlen on 17.09.16.
6 | Copyright © 2016 RWTH Aachen. All rights reserved.
7 | */
8 | "NSMicrophoneUsageDescription" = "فیفاکس صدا را از میکروفون همانند دیگر سنسورها ثبت میکند و آن را با توجه به آزمایش انتخاب شده تجزیه و تحلیل میکند. دادهها تنها در صورتی از برنامه خارج میشوند که کاربر تصمیم به انجام این کار با استفاده از عملکرد خروجی گرفتن را داشته باشد.";
9 | "NSLocationWhenInUseUsageDescription" = "فیفاکس دادههای موقعیت را از جیپیاس همانند دیگر سنسورها ثبت میکند و آن را با توجه به آزمایش انتخاب شده تجزیه و تحلیل میکند. دادهها تنها در صورتی از برنامه خارج میشوند که کاربر تصمیم به انجام این کار با استفاده از عملکرد خروجی گرفتن را داشته باشد.";
10 | "NSPhotoLibraryAddUsageDescription" = "با انتخاب «به اشتراکگذاری اسکرینشات» از فهرست آزمایش، فیفاکس میتواند به گالری عکسهای شما اسکرینشات بیافزاید.";
11 | "NSMotionUsageDescription" = "فیفاکس حسگرهای گوشی تلفن همراه شما را برای استفاده در آزمایشهای فیزیک میخواند.";
12 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/fr.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 | /*
2 | InfoPlist.strings
3 | phyphox
4 |
5 | Created by Sebastian Kuhlen on 17.09.16.
6 | Copyright © 2016 RWTH Aachen. All rights reserved.
7 | */
8 | "NSMicrophoneUsageDescription" = "phyphox enregistre la sortie audio du microphone comme elle le fait pour les autres capteurs, et l'analyse en fonction de l'expérience choisie. Les données ne seront exportées que si l'utilisateur choisit de le faire à l'aide de la fonction export.";
9 | "NSLocationWhenInUseUsageDescription" = "phyphox enregistre les données de localisation de votre GPS comme elle le fait pour les autres capteurs, et l'analyse en fonction de l'expérience choisie. Les données ne seront exportées que si l'utilisateur choisit de le faire à l'aide de la fonction export.";
10 | "NSPhotoLibraryAddUsageDescription" = "phyphox peut ajouter des captures d'écran à votre bibliothèque de photos si vous sélectionnez \"Partager une capture d'écran\" dans le menu Expérience.";
11 | "NSMotionUsageDescription" = "phyphox accède aux capteurs de votre téléphone afin de permettre leur utilisation dans des expériences de physique.";
12 | "NSBluetoothPeripheralUsageDescription" = "phyphox a la capacité de lire à partir de capteurs Bluetooth externes et d'écrire des données sur des appareils Bluetooth externes. Vous pouvez en savoir plus sur cette fonctionnalité et les appareils pris en charge sur http://phyphox.org/ble.";
13 | "NSBluetoothAlwaysUsageDescription" = "phyphox a la capacité de lire à partir de capteurs Bluetooth externes et d'écrire des données sur des appareils Bluetooth externes. Vous pouvez en savoir plus sur cette fonctionnalité et les appareils pris en charge sur http://phyphox.org/ble.";
14 | "NSCameraUsageDescription" = "phyphox peut utiliser la caméra pour scanner des QR codes, afin d'ajouter des expériences personnalisées. La caméra est également utilisée dans les expériences de capteurs de profondeur (LiDAR/ToF) pour mesurer des distances et montrer la zone mesurée.";
15 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/hi.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 |
2 |
3 | /*
4 | InfoPlist.strings
5 | phyphox
6 |
7 | Created by Sebastian Kuhlen on 17.09.16.
8 | Copyright © 2016 RWTH Aachen. All rights reserved.
9 | */
10 | "NSMicrophoneUsageDescription" = "फ़ाेईफ़ॉक्स अन्य संवेदकों, (सेंसरों) की तरह माइक्रोफ़ोन से ऑडियो रिकॉर्ड करता है और चयनित प्रयोग के अनुसार उसका विश्लेषण करता है। ऐप से डेटा केवल तभी निर्गत (Export) किया जाएगा यदि उपयोगकर्ता निर्गत फ़ंक्शन का उपयोग करके ऐसा करने का चुनाव करता है।";
11 | "NSLocationWhenInUseUsageDescription" = "फ़ाेईफ़ॉक्स अन्य संवेदकों, (सेंसरों) की तरह जी पी एस से स्थानिक आंकड़े (लोकेशन) रिकॉर्ड करता है और चयनित प्रयोग के अनुसार उसका विश्लेषण करता है। ऐप से डेटा केवल तभी निर्गत (Export) किया जाएगा यदि उपयोगकर्ता निर्गत फ़ंक्शन का उपयोग करके ऐसा करने का चुनाव करता है।";
12 | "NSPhotoLibraryAddUsageDescription" = "फ़ोईफॉक्स आपके ' स्क्रीन शॉट्स ' को आपकी फोटो लाइब्रेरी में जमा कर सकता है यदि आप ' स्क्रीन शॉट शेयर करें ' का चयन करते हैं।";
13 | "NSMotionUsageDescription" = "फोईफ़ॉक्स आपके फ़ोन के सेंसरों को पढ़ लेता है ताकि आपके भौतिकी प्रयोगों में उनका उपयोग कर सके।";
14 | "NSCameraUsageDescription" = "फ़ाइफ़ॉक्स क्यूआर कोड को स्कैन करने के लिए कैमरे का उपयोग करता है, जिसका उपयोग कस्टम प्रयोग कॉन्फ़िगरेशन जोड़ने के लिए किया जा सकता है। इसका उपयोग दूरी माप प्रदान करने और रुचि के क्षेत्र का पूर्वावलोकन दिखाने के लिए गहराई सेंसर प्रयोगों (LiDAR/ToF) में भी किया जाता है।";
15 | "NSBluetoothPeripheralUsageDescription" = "फ़ाइफ़ॉक्स में बाहरी ब्लूटूथ सेंसर से पढ़ने और बाहरी ब्लूटूथ डिवाइस पर डेटा लिखने की क्षमता है। आप इस सुविधा और समर्थित डिवाइस के बारे में http://phyphox.org/ble पर अधिक जान सकते हैं।";
16 | "NSBluetoothAlwaysUsageDescription" = "फ़ाइफ़ॉक्स में बाहरी ब्लूटूथ सेंसर से पढ़ने और बाहरी ब्लूटूथ डिवाइस पर डेटा लिखने की क्षमता है। आप इस सुविधा और समर्थित डिवाइस के बारे में http://phyphox.org/ble पर अधिक जान सकते हैं।";
17 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/hu.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/id.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/it.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 | "NSMicrophoneUsageDescription" = "phyphox registra l’audio dal microfono come se fosse un sensore e lo analizza secondo l’esperimento selezionato. I dati vengono esportati solo se l’utente seleziona la funzione \"Esporta\".";
2 | "NSLocationWhenInUseUsageDescription" = "phyphox registra i dati relativi alla posizione dal GPS e li analizza secondo l'esperimento selezionato. I dati verranno esportati dalla app solo se l'utente seleziona la funzione \"Esporta\".";
3 | "NSPhotoLibraryAddUsageDescription" = "phyphox può aggiungere screenshots alla tua galleria fotografica selezionando \"Condividi screenshot\" nel menu dell'esperimento.";
4 | "NSMotionUsageDescription" = "phyphox legge i sensori del tuo telefono per utilizzarli in esperimenti di fisica.";
5 | "NSCameraUsageDescription" = "Phyphox usa la fotocamera per leggere codici QR, che possono essere usati per aggiungere all'esperimento configurazioni personalizzate, e negli esperimenti con i sensori di profondità (LiDAR/ToF) per fornire misurazioni di distanza e visualizzare l'area misurata.";
6 | "NSBluetoothPeripheralUsageDescription" = "Phyphox può leggere da sensori Bluetooth esterni e scrivere dati su periferiche Bluetooth esterne. Puoi sapere di più riguardo questa funzione e le periferiche supportate in http://phyphox.org/ble.";
7 | "NSBluetoothAlwaysUsageDescription" = "Phyphox può leggere da sensori Bluetooth esterni e scrivere dati su periferiche Bluetooth esterne. Puoi sapere di più riguardo questa funzione e le periferiche supportate in http://phyphox.org/ble.";
8 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/ja.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 | /*
2 | InfoPlist.strings
3 | phyphox
4 |
5 | Created by Sebastian Kuhlen on 17.09.16.
6 | Copyright © 2016 RWTH Aachen. All rights reserved.
7 | */
8 | "NSMicrophoneUsageDescription" = "phyphoxは他のセンサーのようなものやマイクロフォンから音声を記録し,選択された実験に応じて解析を行います.使用者がエクスポート機能を用いてデータをエクスポートする場合はアプリからデータがエクスポートされます。";
9 | "NSLocationWhenInUseUsageDescription" = "phyphoxはその他のセンサーやGPSからの位置データを記録し,選択された実験によって解析します.エクスポート機能を用いて使用者はアプリからデータをエクスポートすることができます。";
10 | "NSPhotoLibraryAddUsageDescription" = "phyphoxでは実験から \"スクリーンショットを共有する\" を選択するとあなたのフォトライブラリーにスクリーンショットを追加することができます。";
11 | "NSMotionUsageDescription" = "phyphoxは物理実験でスマートフォンのセンサー使用することを許可し,読み取ります。";
12 | "NSCameraUsageDescription" = "phyphoxは、カメラを使ってQRコードを読み取り、カスタム実験の設定を追加することができます。また、深度センサー実験(LiDAR/ToF)において、距離測定や関心領域のプレビュー表示にも使用されます。";
13 | "NSBluetoothPeripheralUsageDescription" = "phyphoxは、外部Bluetoothセンサーからの読み込みと、外部Bluetoothデバイスへのデータ書き込み機能を備えています。この機能と対応デバイスの詳細は、http://phyphox.org/ble。";
14 | "NSBluetoothAlwaysUsageDescription" = "phyphoxは、外部Bluetoothセンサーからの読み込みと、外部Bluetoothデバイスへのデータ書き込み機能を備えています。この機能と対応デバイスの詳細は、http://phyphox.org/ble。";
15 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/ka.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 |
2 |
3 | /*
4 | InfoPlist.strings
5 | phyphox
6 |
7 | Created by Sebastian Kuhlen on 17.09.16.
8 | Copyright © 2016 RWTH Aachen. All rights reserved.
9 | */
10 | "NSMicrophoneUsageDescription" = "ფაიფოქსი იწერს აუდიოს მიკროფონით როგორც სხვა სენსორებიდან და აანალიზებს მას არჩეული ექსპერიმენტების მიხედვით. მონაცემები მხოლოდ მაშინ იქნება გაცემული აპლიკაციიდან თუ მომხმარებელი აირჩევს ფუნქციის ექსპორტს.";
11 | "NSLocationWhenInUseUsageDescription" = "ფაიფოქსი იწერს ლოკაციას GPS-ის გამოყენებით, როგორც სხვა სენსორებიდან და აანალიზებს მათ ექსპერიმენტის მიხედვით. მონაცემები მხოლოდ მაშინ იქნება გადაცემული აპლიკაციიდან თუ მომხმარებელი არიჩევს ფუნქციის ექსპორტს.";
12 | "NSPhotoLibraryAddUsageDescription" = "ფაიფოქს შეუძლია დაა მატოს სქრინშოთი თქვენ ბიბლიოთეკაში თუ თქვენ აირჩევთ \"გააზიარე სქრინშოთი\" ექსპერიმენტის მენიუდან.";
13 | "NSMotionUsageDescription" = "ფაიფოქსი კითხულობს თქვენი ტელეფონის სენსორებს რათა შეძლოს მათი გამოყენება ფიზიკურ ექსპერიმენტებში.";
14 | "NSCameraUsageDescription" = "ფაიფოქსი იქნებას კამერას QR კოდის დასასკანირებლად, რომელიც შეიძლება გამოყენებული ქინას ექსპერიმენტების კონფიგურაციისთვის. ის ასევე გამოყებეულია სიღრმის სენსორის ექსპერიმენტებში (LiDAR/ToF) იმისათვის, რომ შეასრულოს მანძილის გაზომვები და გვანახოს გაზომვებისთვის საინტერესო არეა.";
15 | "NSBluetoothPeripheralUsageDescription" = "ფაიფოქს შეუძლია წაიკითხოს გარე ბულუზ სენსორები და მიწეროს მონაცემები გარე ბლუთუზ მოწყობილობებს. თქვენ შეგიძლიათ უფრო დეტაურად გაეცნოთ ამ ინფორმაციას აქ http://phyphox.org/ble.";
16 | "NSBluetoothAlwaysUsageDescription" = "ფაიფოქს შეუძლია წაიკითხოს გარე ბულუზ სენსორები და მიწეროს მონაცემები გარე ბლუთუზ მოწყობილობებს. თქვენ შეგიძლიათ უფრო დეტაურად გაეცნოთ ამ ინფორმაციას აქ http://phyphox.org/ble.";
17 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/ko.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 |
2 |
3 | /*
4 | InfoPlist.strings
5 | phyphox
6 |
7 | Created by Sebastian Kuhlen on 17.09.16.
8 | Copyright © 2016 RWTH Aachen. All rights reserved.
9 | */
10 | "NSMicrophoneUsageDescription" = "phyphox는 다른 센서와 마찬가지로 마이크의 오디오를 녹음하고 선택한 실험에 따라 분석합니다. 데이터는 사용자가 '내보내기' 기능을 사용하여 데이터를 내보내도록 선택한 경우에만 앱에서 데이터를 내보냅니다.";
11 | "NSLocationWhenInUseUsageDescription" = "phyphox는 다른 센서와 마찬가지로 GPS에서 위치 데이터를 기록하고 선택한 실험에 따라 분석합니다. 데이터는 사용자가 '내보내기' 기능을 사용하여 데이터를 내보내도록 선택한 경우에만 앱에서 데이터를 내보냅니다.";
12 | "NSPhotoLibraryAddUsageDescription" = "실험 메뉴에서 \"스크린샷 공유\"를 선택하면 사진 보관함에 스크린샷을 추가할 수 있습니다.";
13 | "NSMotionUsageDescription" = "phyphox는 스마트 폰의 센서들을 사용함으로써 물리 실험에서 데이터를 읽습니다.";
14 | "NSCameraUsageDescription" = "phyphox는 사용자 맞춤형 실험 구성을 추가하는 데 사용할 수 있는 QR 코드를 스캔하기 위해 카메라를 사용합니다. 또한 거리 측정 실험이나 측정 영역을 표시하기 위해 심도 센서(LiDAR/ToF)가 사용됩니다.";
15 | "NSBluetoothPeripheralUsageDescription" = "phyphox는 외부의 블루투스 센서를 이용하여 데이터를 읽거나 쓸 수 있는 기능이 있습니다. http://phyphox.org/ble에서 해당 기능과 이를 지원되는 장치에 대해 자세히 알아볼 수 있습니다.";
16 | "NSBluetoothAlwaysUsageDescription" = "phyphox는 외부의 블루투스 센서를 이용하여 데이터를 읽거나 쓸 수 있는 기능이 있습니다. http://phyphox.org/ble에서 해당 기능과 이를 지원되는 장치에 대해 자세히 알아볼 수 있습니다.";
17 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/ko.lproj/Localizable.strings:
--------------------------------------------------------------------------------
1 |
2 |
3 | "ok" = "확인";
4 | "stop" = "중지";
5 | "start" = "시작";
6 | "settings" = "설정";
7 | "unknown" = "알려지지 않음";
8 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/localizationHelper.swift:
--------------------------------------------------------------------------------
1 | //
2 | // helper.swift
3 | // phyphox
4 | //
5 | // Created by Sebastian Staacks on 12.04.19.
6 | // Copyright © 2019 RWTH Aachen. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | public func localize(_ key: String) -> String {
12 | let fallback = "en"
13 |
14 | let fallbackBundle = Bundle.main.path(forResource: fallback, ofType: "lproj")
15 | let fallbackString = fallbackBundle != nil ? Bundle(path: fallbackBundle!)?.localizedString(forKey: key, value: key, table: nil) : nil
16 |
17 | return Bundle.main.localizedString(forKey: key, value: fallbackString, table: nil)
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/nl.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 | /*
2 | InfoPlist.strings
3 | phyphox
4 |
5 | Created by Sebastian Kuhlen on 17.09.16.
6 | Copyright © 2016 RWTH Aachen. All rights reserved.
7 | */
8 | "NSMicrophoneUsageDescription" = "phyphox registreert audiofragmenten via de microfoon, op gelijkaardige wijze als de andere sensoren, en analyseert het volgens het geselecteerde experiment. De data zal enkel van de app geëxporteerd worden als de gebruiker ervoor kiest om de export functie te gebruiken.";
9 | "NSLocationWhenInUseUsageDescription" = "phyphox registreert de locatiegegevens van de GPS, op gelijkaardige wijze als de andere sensoren, en analyseert het volgens het geselecteerde experiment. De data zal enkel van de app geëxporteerd worden als de gebruiker ervoor kiest om de export functie te gebruiken.";
10 | "NSPhotoLibraryAddUsageDescription" = "phyphox kan screenshots toevoegen aan je fotoalbum als je \"Schermafbeelding delen\" selecteert in het experimentenmenu.";
11 | "NSMotionUsageDescription" = "phyphox leest je smartphones sensoren zodat ze gebruikt kunnen worden bij fysica-experimenten.";
12 | "NSCameraUsageDescription" = "phyphox gebruikt de camera om QR-codes te scannen, die kunnen worden gebruikt om aangepaste experimentconfiguraties toe te voegen. De camera wordt ook gebruikt in dieptesensor-experimenten (LiDAR/ToF) om afstandsmetingen te verrichten en een voorbeeld van het betrokken gebied te tonen.";
13 | "NSBluetoothPeripheralUsageDescription" = "phyphox heeft de mogelijkheid om van externe Bluetooth sensoren te lezen en gegevens naar externe Bluetooth apparaten te schrijven. U kunt meer te weten komen over deze functie en ondersteunde apparaten op http://phyphox.org/ble.";
14 | "NSBluetoothAlwaysUsageDescription" = "phyphox heeft de mogelijkheid om van externe Bluetooth sensoren te lezen en gegevens naar externe Bluetooth apparaten te schrijven. U kunt meer te weten komen over deze functie en ondersteunde apparaten op http://phyphox.org/ble.";
15 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/phyphox-Bridging-Header.h:
--------------------------------------------------------------------------------
1 | //
2 | // Use this file to import your target's public headers that you would like to expose to Swift.
3 | //
4 |
5 | #import "PTButton.h"
6 | #import
7 | #import "UIColor+Expanded.h"
8 | #import
9 | #import "ShaderTypes.h"
10 |
11 | @import JGProgressHUD;
12 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/pl.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 | /*
2 | InfoPlist.strings
3 | phyphox
4 |
5 | Created by Sebastian Kuhlen on 17.09.16.
6 | Copyright © 2016 RWTH Aachen. All rights reserved.
7 | */
8 | "NSMicrophoneUsageDescription" = "phyphox rejestruje dźwięk za pomocą mikrofonu urządzenia i analizuje dane zgodnie z charakterem eksperymentu. Dane zostaną wyeksportowane z aplikacji wyłącznie po wybraniu stosownej komendy.";
9 | "NSLocationWhenInUseUsageDescription" = "phyphox rejestruje dane GPS dotyczące położenia i analizuje je zgodnie z charakterem eksperymentu. Dane zostanę wyeksportowane z aplikacji wyłącznie po wybraniu stosownej komendy.";
10 | "NSPhotoLibraryAddUsageDescription" = "phyphox dodaje pliki zrzutów ekranu jeśli wybrana jest opcja \"Współdziel zrzuty ekranu\" znajdująca się w menu eksperymentu.";
11 | "NSMotionUsageDescription" = "phyphox odczytuje wartości rejestrowane przez czujniki urządzenia i wykorzystuje je w eksperymentach fizycznych.";
12 | "NSCameraUsageDescription" = "phyphox używa kamery do skanowania kodów QR, które mogą być wykorzystane do dodania niestandardowych konfiguracji eksperymentu. Jest on również używany w eksperymentach z czujnikami głębokości (LiDAR/ToF), aby zapewnić pomiary odległości i pokazać podgląd regionu zainteresowania.";
13 | "NSBluetoothPeripheralUsageDescription" = "phyphox posiada możliwość odczytu z zewnętrznych czujników Bluetooth oraz zapisu danych do zewnętrznych urządzeń Bluetooth. Więcej o tej funkcji i obsługiwanych urządzeniach można dowiedzieć się na stronie http://phyphox.org/ble.";
14 | "NSBluetoothAlwaysUsageDescription" = "phyphox posiada możliwość odczytu z zewnętrznych czujników Bluetooth oraz zapisu danych do zewnętrznych urządzeń Bluetooth. Więcej o tej funkcji i obsługiwanych urządzeniach można dowiedzieć się na stronie http://phyphox.org/ble.";
15 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/pt.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 | /*
2 | InfoPlist.strings
3 | phyphox
4 |
5 | Created by Sebastian Kuhlen on 17.09.16.
6 | Copyright © 2016 RWTH Aachen. All rights reserved.
7 | */
8 | "NSMicrophoneUsageDescription" = "phyphox grava o audio do microfone assim como dados de outros sensores e faz uma análise de acordo com o experimento selecionado. Os dados serão exportados do aplicativo somente se o usuário escolher isso usando a função exportar.";
9 | "NSLocationWhenInUseUsageDescription" = "phyphox grava a sua localização usando o GPS tal qual os dados de outros sensores e faz uma análise de acordo com o experimento selecionado. Os dados serão exportados do aplicativo somente se o usuário escolher isso usando a função exportar.";
10 | "NSPhotoLibraryAddUsageDescription" = "phyphox pode adicionar imagens de tela a sua galeria de fotos se você selecionar \"compartilhar captura de tela\" nas opções do experimento.";
11 | "NSMotionUsageDescription" = "phyphox lê os sensores do seu aparelho para poder utilizar os dados nos experimentos.";
12 | "NSCameraUsageDescription" = "phyphox utiliza a câmara para digitalizar códigos QR, que podem ser utilizados para adicionar configurações de experiências personalizadas. É também utilizada em experiências com sensores de profundidade (LiDAR/ToF) para fornecer medições de distância e para mostrar uma pré-visualização da região de interesse.";
13 | "NSBluetoothPeripheralUsageDescription" = "O phyphox tem a capacidade de ler a partir de sensores Bluetooth externos e escrever dados para dispositivos Bluetooth externos. Pode saber mais sobre esta funcionalidade e os dispositivos suportados em http://phyphox.org/ble.";
14 | "NSBluetoothAlwaysUsageDescription" = "O phyphox tem a capacidade de ler a partir de sensores Bluetooth externos e escrever dados para dispositivos Bluetooth externos. Pode saber mais sobre esta funcionalidade e os dispositivos suportados em http://phyphox.org/ble.";
15 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/ru.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 | /*
2 | InfoPlist.strings
3 | phyphox
4 |
5 | Created by Sebastian Kuhlen on 17.09.16.
6 | Copyright © 2016 RWTH Aachen. All rights reserved.
7 | */
8 | "NSMicrophoneUsageDescription" = "phyphox записывает звук с микрофона, как и с других датчиков, и анализирует его в соответствии с выбранным экспериментом. Данные будут экспортироваться из приложения только в том случае, если пользователь решит это сделать, используя функцию экспорта.";
9 | "NSLocationWhenInUseUsageDescription" = "phyphox записывает данные о местоположении из GPS, как и с других датчиков, и анализирует его в соответствии с выбранным экспериментом. Данные будут экспортироваться из приложения только в том случае, если пользователь решит это сделать, используя функцию экспорта.";
10 | "NSPhotoLibraryAddUsageDescription" = "phyphox может добавить скриншоты в вашу библиотеку фотографий, если вы выберите «Поделиться скриншотом» в меню эксперимента.";
11 | "NSMotionUsageDescription" = "phyphox считывает датчики вашего телефона, чтобы использовать их в физических экспериментах.";
12 | "NSBluetoothPeripheralUsageDescription" = "phyphox имеет возможность считывать данные с внешних датчиков Bluetooth и записывать их на внешние устройства Bluetooth. Подробнее об этой функции и поддерживаемых устройствах можно узнать на сайте http://phyphox.org/ble.";
13 | "NSBluetoothAlwaysUsageDescription" = "phyphox имеет возможность считывать данные с внешних датчиков Bluetooth и записывать их на внешние устройства Bluetooth. Подробнее об этой функции и поддерживаемых устройствах можно узнать на сайте http://phyphox.org/ble.";
14 | "NSCameraUsageDescription" = "phyphox использует камеру для сканирования QR-кодов, которые можно использовать для добавления пользовательских конфигураций эксперимента. Она также используется в экспериментах с датчиками глубины (LiDAR/ToF) для измерения расстояния и предварительного просмотра интересующей области.";
15 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/sl.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/sr.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 | /*
2 | InfoPlist.strings
3 | phyphox
4 |
5 | Created by Sebastian Kuhlen on 17.09.16.
6 | Copyright © 2016 RWTH Aachen. All rights reserved.
7 | */
8 | "NSMicrophoneUsageDescription" = "phyphox snima zvuk iz mikrofona kao kod drugih senzora i analizira ga prema odabranom eksperimentu. Podaci će biti izvezeni iz aplikacije samo ako korisnik to uradi koristeći funkciju izvoza.";
9 | "NSLocationWhenInUseUsageDescription" = "phyphox snima podatke o lokaciji iz GPS-a kao iz drugih senzora i analizira ih prema odabranom eksperimentu. Podaci će biti izvezeni iz aplikacije samo ako korisnik to uradi koristeći funkciju izvoza.";
10 | "NSPhotoLibraryAddUsageDescription" = "phyphox može dodati slike ekrana u vašu biblioteku fotografija ako odaberete \"podeli sliku ekrana\" iz izbornika eksperimenta.";
11 | "NSMotionUsageDescription" = "phyphox čita senzore vašeg telefona kako bi omogućila njihovo korišćenje u eksperimentima fizike.";
12 | "NSBluetoothPeripheralUsageDescription" = "phyphox ima mogućnost čitanja sa spoljnih Bluetooth senzora i pisanje podataka na spoljne Bluetooth uređaje. Možete saznati više o ovoj funkciji i podržanim uređajima na http://phiphok.org/ble.";
13 | "NSBluetoothAlwaysUsageDescription" = "phyphox ima mogućnost čitanja sa spoljnih Bluetooth senzora i pisanje podataka na spoljne Bluetooth uređaje. Možete saznati više o ovoj funkciji i podržanim uređajima na http://phiphok.org/ble.";
14 | "NSCameraUsageDescription" = "phyphox koristi kameru za skeniranje KR kodova, koji se mogu koristiti za dodavanje prilagođenih konfiguracija eksperimenta. Takođe se koristi u eksperimentima sa senzorom dubine (LiDAR/ToF) da obezbedi merenje udaljenosti i da prikaže pregled regiona od interesa.";
15 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/sr_Latn.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 | /*
2 | InfoPlist.strings
3 | phyphox
4 |
5 | Created by Sebastian Kuhlen on 17.09.16.
6 | Copyright © 2016 RWTH Aachen. All rights reserved.
7 | */
8 | "NSMicrophoneUsageDescription" = "phyphox snima zvuk iz mikrofona kao kod drugih senzora i analizira ga prema odabranom eksperimentu. Podaci će biti izvezeni iz aplikacije samo ako korisnik to uradi koristeći funkciju izvoza.";
9 | "NSLocationWhenInUseUsageDescription" = "phyphox snima podatke o lokaciji iz GPS-a kao iz drugih senzora i analizira ih prema odabranom eksperimentu. Podaci će biti izvezeni iz aplikacije samo ako korisnik to uradi koristeći funkciju izvoza.";
10 | "NSPhotoLibraryAddUsageDescription" = "phyphox može dodati slike ekrana u vašu biblioteku fotografija ako odaberete \"podeli sliku ekrana\" iz izbornika eksperimenta.";
11 | "NSMotionUsageDescription" = "phyphox čita senzore vašeg telefona kako bi omogućila njihovo korišćenje u eksperimentima fizike.";
12 | "NSBluetoothPeripheralUsageDescription" = "phyphox ima mogućnost čitanja sa spoljnih Bluetooth senzora i pisanje podataka na spoljne Bluetooth uređaje. Možete saznati više o ovoj funkciji i podržanim uređajima na http://phiphok.org/ble.";
13 | "NSCameraUsageDescription" = "phyphox koristi kameru za skeniranje KR kodova, koji se mogu koristiti za dodavanje prilagođenih konfiguracija eksperimenta. Takođe se koristi u eksperimentima sa senzorom dubine (LiDAR/ToF) da obezbedi merenje udaljenosti i da prikaže pregled regiona od interesa.";
14 | "NSBluetoothAlwaysUsageDescription" = "phyphox ima mogućnost čitanja sa spoljnih Bluetooth senzora i pisanje podataka na spoljne Bluetooth uređaje. Možete saznati više o ovoj funkciji i podržanim uređajima na http://phiphok.org/ble.";
15 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/sv.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 | /*
2 | InfoPlist.strings
3 | phyphox
4 |
5 | Created by Sebastian Kuhlen on 17.09.16.
6 | Copyright © 2016 RWTH Aachen. All rights reserved.
7 | */
8 | "NSMicrophoneUsageDescription" = "phyphox tar ljudet från mikrofonen, och även data från andra sensorer, som analyseras utgående från det valda experimentet. Data kan exporteras från appen genom Export-funktionen.";
9 | "NSLocationWhenInUseUsageDescription" = "phyphox hämtar platsdata från GPS, och även data från andra sensorer, och analyserar dem utgående från det valda experimentet. Data kan exporteras från appen genom Export-funktionen.";
10 | "NSPhotoLibraryAddUsageDescription" = "phyphox kan lägga till skärmbilder till ditt fotobibliotek om du väljer \"Dela skärmbild\" från experiment-menyn.";
11 | "NSMotionUsageDescription" = "phyphox läser telefonens sensorer för att tillåta användning av dem i fysikexperiment.";
12 | "NSCameraUsageDescription" = "phyphox använder kameran för att scanna QR-koder, som kan användas för att lägga till egna experimentkonfigurationer.";
13 | "NSBluetoothPeripheralUsageDescription" = "phyphox kan läsa från externa Bluetooth-sensorer och skriva data till externa Bluetooth-enheter. Läs mer om denna möjlighet och om enheter som stöds på http://phyphox.org/ble.";
14 | "NSBluetoothAlwaysUsageDescription" = "phyphox kan läsa från externa Bluetooth-sensorer och skriva data till externa Bluetooth-enheter. Läs mer om denna möjlighet och om enheter som stöds på http://phyphox.org/ble.";
15 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/ta.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/ta.lproj/Localizable.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/tr.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 | /*
2 | InfoPlist.strings
3 | phyphox
4 |
5 | Created by Sebastian Kuhlen on 17.09.16.
6 | Copyright © 2016 RWTH Aachen. All rights reserved.
7 | */
8 | "NSMicrophoneUsageDescription" = "phyphox, diğer sensörlerden olduğu gibi mikrofona ait sesi de kaydeder ve seçilen deneye göre analiz eder. Veriler yalnızca veri dışa aktarma işlevi seçilirse uygulamadan dışa aktarılacaktır.";
9 | "NSLocationWhenInUseUsageDescription" = "phyphox, GPS'den diğer sensörlerden alınan konum verilerini kaydeder ve seçilen deneye göre analiz eder. Veriler yalnızca veri dışa aktarma işlevi seçilirse uygulamadan dışa aktarılacaktır.";
10 | "NSPhotoLibraryAddUsageDescription" = "Deneme menüsünden \"Ekran görüntüsü al\"ı seçerseniz, phyphox fotoğraf kitaplığınıza ekran görüntüleri ekleyebilir.";
11 | "NSMotionUsageDescription" = "phyphox, telefonunuzun sensörlerini fizik deneylerinde kullanmaya izin verecek şekilde okur.";
12 | "NSBluetoothPeripheralUsageDescription" = "Phyphox harici Bluetooth sensörlerinden veri okuma ve harici Bluetooth cihazlarına veri yazma özelliğine sahiptir. Bu özellik ve desteklenen cihazlar hakkında daha fazla bilgiyi http://phyphox.org/ble adresinde bulabilirsiniz.";
13 | "NSBluetoothAlwaysUsageDescription" = "Phyphox harici Bluetooth sensörlerinden veri okuma ve harici Bluetooth cihazlarına veri yazma özelliğine sahiptir. Bu özellik ve desteklenen cihazlar hakkında daha fazla bilgiyi http://phyphox.org/ble adresinde bulabilirsiniz.";
14 | "NSCameraUsageDescription" = "phyphox, özel deney konfigürasyonları eklemek için kullanılabilen QR kodlarını taramak için kamerayı kullanır. Ayrıca derinlik sensörü deneylerinde (LiDAR/ToF) mesafe ölçümleri sağlamak ve ilgilenilen bölgenin önizlemesini göstermek için kullanılır.";
15 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/uk.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 | /*
2 | InfoPlist.strings
3 | phyphox
4 |
5 | Created by Sebastian Kuhlen on 17.09.16.
6 | Copyright © 2016 RWTH Aachen. All rights reserved.
7 | */
8 | "NSMicrophoneUsageDescription" = "phyphox записує аудіо з мікрофону так як і з інших сенсорів і аналізує їх відповідно до вибраного експерименту. Дані будуть експортовані з додатку тільки якщо користувач свідомо вибере функцію експорту.";
9 | "NSLocationWhenInUseUsageDescription" = "phyphox записує дані розташування з GPS так як і з інших сенсорів і аналізує їх відповідно до вибраного експерименту. Дані будуть експортовані з додатку тільки якщо користувач свідомо вибере функцію експорту.";
10 | "NSPhotoLibraryAddUsageDescription" = "phyphox може додати знімки екрану до Вашої фототеки, якщо Ви виберете \"Поділитися знімком екрану\" з меню експерименту.";
11 | "NSMotionUsageDescription" = "phyphox зчитує дані сенсорів телефону для їх використання у фізичних експериментах.";
12 | "NSCameraUsageDescription" = "phyphox використовує камеру для сканування QR-кодів, які можуть бути використані для додавання користувацьких конфігурацій експерименту. Він також використовується в експериментах з датчиками глибини (LiDAR/ToF) для вимірювання відстані і показу попереднього перегляду області, що цікавить.";
13 | "NSBluetoothPeripheralUsageDescription" = "phyphox може зчитувати дані з зовнішніх Bluetooth сенсорів і записувати дані на зовнішні пристрої Bluetooth. Додаткову інформацію про цю можливість і пристрої, що підтримуються, Ви можете знайти за адресою http://phyphox.org/ble.";
14 | "NSBluetoothAlwaysUsageDescription" = "phyphox має можливість зчитувати дані з зовнішніх Bluetooth-датчиків та записувати дані на зовнішні Bluetooth-пристрої. Детальніше про цю функцію та підтримувані пристрої можна дізнатися на сайті http://phyphox.org/ble.";
15 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/vi.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 | /*
2 | InfoPlist.strings
3 | phyphox
4 |
5 | Created by Sebastian Kuhlen on 17.09.16.
6 | Copyright © 2016 RWTH Aachen. All rights reserved.
7 | */
8 | "NSMicrophoneUsageDescription" = "phyphox ghi âm từ micro giống như các cảm biến khác và phân tích dữ liệu cho thí nghiệm được chọn. Dữ liệu này sẽ chỉ được xuất ra từ phần mềm nếu người dùng chọn làm như vậy bằng cách dùng chức năng xuất dữ liệu.";
9 | "NSLocationWhenInUseUsageDescription" = "phyphox ghi lại dữ liệu vị trí giống như các cảm biến khác và phân tích nó cho thí nghiệm được chọn. Dữ liệu này sẽ chỉ được xuất ra từ phần mềm nếu người dùng chọn làm như vậy bằng cách dùng chức năng xuất dữ liệu.";
10 | "NSPhotoLibraryAddUsageDescription" = "phyphox có thể lưu ảnh chụp màn hình vào thư viện ảnh nếu bạn chọn \"Chia sẻ ảnh chụp màn hình\" từ bảng chọn trong thí nghiệm.";
11 | "NSMotionUsageDescription" = "phyphox đọc các cảm biến của điện thoại để sử dụng chúng cho thí nghiệm vật lý.";
12 | "NSCameraUsageDescription" = "phyphox sử dụng máy ảnh để quét mã QR, mã này có thể được sử dụng để thêm cấu hình thử nghiệm tùy chỉnh. Nó cũng được sử dụng trong các thí nghiệm cảm biến độ sâu (LiDAR / ToF) để cung cấp các phép đo khoảng cách và hiển thị bản xem trước của vùng quan tâm.";
13 | "NSBluetoothPeripheralUsageDescription" = "phyphox có khả năng đọc từ các cảm biến Bluetooth bên ngoài và ghi dữ liệu vào các thiết bị Bluetooth bên ngoài. Bạn có thể tìm hiểu thêm về tính năng này và các thiết bị được hỗ trợ trên http://phyphox.org/ble.";
14 | "NSBluetoothAlwaysUsageDescription" = "phyphox có khả năng đọc từ các cảm biến Bluetooth bên ngoài và ghi dữ liệu vào các thiết bị Bluetooth bên ngoài. Bạn có thể tìm hiểu thêm về tính năng này và các thiết bị được hỗ trợ trên http://phyphox.org/ble.";
15 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/zh_Hans.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 | "NSMotionUsageDescription" = "Phyphox会读取你手机的传感器,以便用于物理实验中。";
2 | /*
3 | InfoPlist.strings
4 | phyphox
5 |
6 | Created by Sebastian Kuhlen on 17.09.16.
7 | Copyright © 2016 RWTH Aachen. All rights reserved.
8 | */
9 | "NSMicrophoneUsageDescription" = "phyphox像其他传感器一样,从麦克风记录声音,并根据所选的实验进行分析。只有当用户选择使用导出功能时,数据才会从应用程序中导出。";
10 | "NSLocationWhenInUseUsageDescription" = "phyphox像其他传感器一样,记录GPS的位置数据,并根据所选的实验进行分析。只有当用户选择使用导出功能时,数据才会从应用程序中导出。";
11 | "NSPhotoLibraryAddUsageDescription" = "如果您在实验菜单中选择“分享截图”,phyphox可以将截图添加到您的照片库中。";
12 | "NSCameraUsageDescription" = "phyphox使用相机扫描二维码,可用于添加自定义实验配置。它也被用于深度传感器实验(LiDAR/ToF),以提供距离测量并显示感兴趣区域的预览。";
13 | "NSBluetoothPeripheralUsageDescription" = "phyphox具有从外部蓝牙传感器读取数据和向外部蓝牙设备写入数据的能力。你可以在http://phyphox.org/ble,了解更多关于这个功能和支持的设备。";
14 | "NSBluetoothAlwaysUsageDescription" = "phyphox具有从外部蓝牙传感器读取数据和向外部蓝牙设备写入数据的能力。你可以在http://phyphox.org/ble,了解更多关于这个功能和支持的设备。";
15 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphox/zh_Hant.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 | /*
2 | InfoPlist.strings
3 | phyphox
4 |
5 | Created by Sebastian Kuhlen on 17.09.16.
6 | Copyright © 2016 RWTH Aachen. All rights reserved.
7 | */
8 | "NSMicrophoneUsageDescription" = "phyphox如同其它感應器一樣,會從麥克風記錄聲音,並根據所選的實驗進行分析。若使用者選擇使用匯出功能,數據將會從app被匯出。";
9 | "NSLocationWhenInUseUsageDescription" = "phyphox如同其它感應器一樣,會從GPS記錄位置資訊,並根據所選的實驗進行分析。若使用者選擇使用匯出功能,數據將會從app被匯出。";
10 | "NSPhotoLibraryAddUsageDescription" = "若你從選單挑選\"分享螢幕截圖\",phyphox會將圖片加到你的圖庫。";
11 | "NSMotionUsageDescription" = "phyphox會讀取你手機裡的感應器,以便用在物理實驗中。";
12 | "NSCameraUsageDescription" = "phyphox 使用攝像頭掃描二維碼,可用於添加自定義實驗配置。 它還用於深度傳感器實驗 (LiDAR/ToF),以提供距離測量並顯示感興趣區域的預覽。";
13 | "NSBluetoothPeripheralUsageDescription" = "phyphox 能夠從外部藍牙傳感器讀取數據並將數據寫入外部藍牙設備。 您可以在 http://phyphox.org/ble 上了解有關此功能和支持的設備的更多信息。";
14 | "NSBluetoothAlwaysUsageDescription" = "phyphox 能夠從外部藍牙傳感器讀取數據並將數據寫入外部藍牙設備。 您可以在 http://phyphox.org/ble 上了解有關此功能和支持的設備的更多信息。";
15 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphoxTests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | BNDL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 |
24 |
25 |
--------------------------------------------------------------------------------
/phyphox-iOS/phyphoxTests/phyphoxTests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // phyphoxTests.swift
3 | // phyphoxTests
4 | //
5 | // Created by Gaurav Tripathee on 27.02.23.
6 | // Copyright © 2023 RWTH Aachen. All rights reserved.
7 | //
8 |
9 | @testable import phyphox
10 | import XCTest
11 |
12 | final class phyphoxTests: XCTestCase {
13 |
14 | var colorHelper: ColorConverterHelper!
15 |
16 | override class func setUp() {
17 | colorHelper = ColorConverterHelper()
18 | }
19 |
20 | override class func tearDown() {
21 | colorHelper = nil
22 | }
23 |
24 | func testAjustColor(){
25 |
26 | // Given - Arrange
27 | var expected: UIColor
28 | var input: UIColor = UIColor(red: (57.0/255.0), green: (162.0/255.0), blue: (255.0/255.0), alpha: 1.0) // For blue
29 |
30 |
31 | // When - Act
32 | expected = colorHelper.adjustColorForLightTheme(colorName: input)
33 |
34 | // Then - Assert
35 | XCTAssert(expected == UIColor(red: 0.705882, green: 0.776471, blue: 0.0, alpha: 1.0)) // adjust for blue
36 |
37 |
38 | }
39 |
40 | }
41 |
--------------------------------------------------------------------------------