├── _config.yml
├── LICENSE
├── img
├── shake.gif
├── usage.png
├── buildrun.png
├── camera.gif
├── connect.png
└── wechat.jpg
├── MacOS
└── YourView
│ ├── YourView
│ ├── img
│ │ ├── empty.scn
│ │ ├── refresh.png
│ │ ├── toolbar_segment
│ │ │ ├── left_blue.png
│ │ │ ├── left_gray.png
│ │ │ ├── right_blue.png
│ │ │ └── right_gray.png
│ │ └── cellimage
│ │ │ └── cellimage_view@2x.png
│ ├── Assets.xcassets
│ │ ├── Contents.json
│ │ └── AppIcon.appiconset
│ │ │ └── Contents.json
│ ├── Window
│ │ ├── YVWindow.m
│ │ ├── YVWindow.h
│ │ └── YVWindowController.h
│ ├── view
│ │ ├── cell
│ │ │ ├── binding
│ │ │ │ ├── YVStepperModel.m
│ │ │ │ ├── YVObjectController.m
│ │ │ │ ├── YVObjectController.h
│ │ │ │ └── YVStepperModel.h
│ │ │ ├── YVRightCellBase.h
│ │ │ ├── YVRightCellViewFrame.h
│ │ │ ├── YVRightCellViewInfo.h
│ │ │ ├── YVRightCellBase.m
│ │ │ ├── YVRightCellViewFrame.m
│ │ │ └── YVRightCellViewInfo.m
│ │ ├── YVSelectableTextView.h
│ │ ├── YVSelectableTextView.m
│ │ └── YVSceneView.h
│ ├── main.m
│ ├── AppDelegate.h
│ ├── Controller
│ │ ├── split
│ │ │ ├── YVLeftViewController.h
│ │ │ ├── YVSplitViewController.h
│ │ │ ├── YVRightViewController.h
│ │ │ ├── YVSplitViewController.m
│ │ │ └── YVMiddleViewController.h
│ │ ├── YVHomeViewController.h
│ │ ├── loading
│ │ │ └── YVLoadingViewController.h
│ │ ├── script
│ │ │ ├── YVScriptEditorViewController.h
│ │ │ └── YVScriptEditorViewController.m
│ │ └── YVHomeViewController.m
│ ├── helper
│ │ ├── SCNNode+YVBorder.h
│ │ ├── SCNNode+YVIdentifier.h
│ │ ├── SCNNode+YVPlane.h
│ │ ├── SCNNode+YVSelected.h
│ │ ├── SCNNode+YVVisual.h
│ │ ├── YVCGRectHelper.h
│ │ ├── YVNodeBackTracking.h
│ │ ├── SCNNode+YVIdentifier.m
│ │ ├── TravseralContext.h
│ │ ├── TravseralContext.m
│ │ ├── YVDisplayControl.m
│ │ ├── SCNNode+YVZIndex.h
│ │ ├── YVDisplayControl.h
│ │ ├── SCNNode+YVSelected.m
│ │ ├── SCNNode+YVVisual.m
│ │ ├── YVCGRectHelper.m
│ │ ├── SCNNode+YVPlane.m
│ │ ├── SCNNode+YVBorder.m
│ │ └── YVNodeBackTracking.m
│ ├── YourView.entitlements
│ ├── AppDelegate.m
│ ├── Theme
│ │ └── YVTheme.h
│ ├── Info.plist
│ ├── define
│ │ └── defines.h
│ └── YourView.pch
│ └── YourView.xcodeproj
│ ├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ ├── xcuserdata
│ │ └── bliss_ddo.xcuserdatad
│ │ │ └── UserInterfaceState.xcuserstate
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
│ └── xcuserdata
│ └── bliss_ddo.xcuserdatad
│ ├── xcschemes
│ └── xcschememanagement.plist
│ └── xcdebugger
│ └── Breakpoints_v2.xcbkptlist
├── iOS
├── TalkingDataSDKDemo
│ ├── PhoneDemo
│ │ ├── Assets.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ │ ├── Icon-20.png
│ │ │ │ ├── Icon-29.png
│ │ │ │ ├── Icon-40.png
│ │ │ │ ├── Icon-76.png
│ │ │ │ ├── Icon-20@2x.png
│ │ │ │ ├── Icon-20@3x.png
│ │ │ │ ├── Icon-29@2x.png
│ │ │ │ ├── Icon-29@3x.png
│ │ │ │ ├── Icon-40@2x.png
│ │ │ │ ├── Icon-40@3x.png
│ │ │ │ ├── Icon-60@2x.png
│ │ │ │ ├── Icon-60@3x.png
│ │ │ │ ├── Icon-76@2x.png
│ │ │ │ ├── Icon-83.5@2x.png
│ │ │ │ └── Contents.json
│ │ │ ├── FunIcon
│ │ │ │ ├── Base.imageset
│ │ │ │ │ ├── FunIcon.png
│ │ │ │ │ ├── FunIcon@2x.png
│ │ │ │ │ ├── FunIcon@3x.png
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Page.imageset
│ │ │ │ │ ├── FunIcon.png
│ │ │ │ │ ├── FunIcon@2x.png
│ │ │ │ │ ├── FunIcon@3x.png
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Push.imageset
│ │ │ │ │ ├── FunIcon.png
│ │ │ │ │ ├── FunIcon@2x.png
│ │ │ │ │ ├── FunIcon@3x.png
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── eAuth.imageset
│ │ │ │ │ ├── FunIcon.png
│ │ │ │ │ ├── FunIcon@2x.png
│ │ │ │ │ ├── FunIcon@3x.png
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Codeless.imageset
│ │ │ │ │ ├── FunIcon.png
│ │ │ │ │ ├── FunIcon@2x.png
│ │ │ │ │ ├── FunIcon@3x.png
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Custom.imageset
│ │ │ │ │ ├── FunIcon.png
│ │ │ │ │ ├── FunIcon@2x.png
│ │ │ │ │ ├── FunIcon@3x.png
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Standard.imageset
│ │ │ │ │ ├── FunIcon.png
│ │ │ │ │ ├── FunIcon@2x.png
│ │ │ │ │ ├── FunIcon@3x.png
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── AntiCheating.imageset
│ │ │ │ │ ├── FunIcon.png
│ │ │ │ │ ├── FunIcon@2x.png
│ │ │ │ │ ├── FunIcon@3x.png
│ │ │ │ │ └── Contents.json
│ │ │ │ └── BrandGrowth.imageset
│ │ │ │ │ ├── FunIcon.png
│ │ │ │ │ ├── FunIcon@2x.png
│ │ │ │ │ ├── FunIcon@3x.png
│ │ │ │ │ └── Contents.json
│ │ │ ├── CheckIcon
│ │ │ │ ├── selected.imageset
│ │ │ │ │ ├── selected.png
│ │ │ │ │ ├── selected@2x.png
│ │ │ │ │ ├── selected@3x.png
│ │ │ │ │ └── Contents.json
│ │ │ │ └── unselected.imageset
│ │ │ │ │ ├── unselected.png
│ │ │ │ │ ├── unselected@2x.png
│ │ │ │ │ ├── unselected@3x.png
│ │ │ │ │ └── Contents.json
│ │ │ └── PlaceholderImage.imageset
│ │ │ │ ├── PlaceholderImage.png
│ │ │ │ └── Contents.json
│ │ ├── IQKeyboardManager
│ │ │ ├── Resources
│ │ │ │ └── IQKeyboardManager.bundle
│ │ │ │ │ ├── IQButtonBarArrowUp@2x.png
│ │ │ │ │ ├── IQButtonBarArrowUp@3x.png
│ │ │ │ │ ├── IQButtonBarArrowDown@2x.png
│ │ │ │ │ ├── IQButtonBarArrowDown@3x.png
│ │ │ │ │ ├── IQButtonBarArrowLeft@2x.png
│ │ │ │ │ ├── IQButtonBarArrowLeft@3x.png
│ │ │ │ │ ├── IQButtonBarArrowRight@2x.png
│ │ │ │ │ ├── IQButtonBarArrowRight@3x.png
│ │ │ │ │ ├── zh-Hans
│ │ │ │ │ └── IQKeyboardManager.strings
│ │ │ │ │ └── en.lproj
│ │ │ │ │ └── IQKeyboardManager.strings
│ │ │ ├── IQToolbar
│ │ │ │ ├── IQPreviousNextView.m
│ │ │ │ ├── IQBarButtonItem.h
│ │ │ │ ├── IQPreviousNextView.h
│ │ │ │ ├── IQToolbar.h
│ │ │ │ └── IQTitleBarButtonItem.h
│ │ │ ├── Categories
│ │ │ │ ├── IQUIScrollView+Additions.h
│ │ │ │ ├── IQUIViewController+Additions.h
│ │ │ │ ├── IQUIViewController+Additions.m
│ │ │ │ ├── IQNSArray+Sort.h
│ │ │ │ ├── IQUITextFieldView+Additions.h
│ │ │ │ ├── IQUIScrollView+Additions.m
│ │ │ │ ├── IQUITextFieldView+Additions.m
│ │ │ │ └── IQNSArray+Sort.m
│ │ │ └── Constants
│ │ │ │ └── IQKeyboardManagerConstantsInternal.h
│ │ ├── TDInfoViewController.h
│ │ ├── TDHomeViewController.h
│ │ ├── eAuth
│ │ │ ├── TDEAAuthViewController.h
│ │ │ ├── TDEACheckViewController.h
│ │ │ ├── TDEAMatchViewController.h
│ │ │ ├── TDEAUnbindViewController.h
│ │ │ ├── TDEACheckViewController.m
│ │ │ ├── TDEAMatchViewController.m
│ │ │ ├── TDEAUnbindViewController.m
│ │ │ └── TDEAAuthViewController.m
│ │ ├── AdTracking
│ │ │ ├── TDATGameTableViewCell.h
│ │ │ ├── TDATOtherTableViewCell.h
│ │ │ ├── TDATDeviceIDTableViewCell.h
│ │ │ ├── TDATECommerceTableViewCell.h
│ │ │ ├── TDATCustomViewController.h
│ │ │ ├── TDATCustomViewController.m
│ │ │ ├── TDATGameTableViewCell.m
│ │ │ ├── TDATDeviceIDTableViewCell.m
│ │ │ ├── TDATECommerceTableViewCell.m
│ │ │ └── TDATOtherTableViewCell.m
│ │ ├── GameAnalytics
│ │ │ ├── TDGAItemTableViewCell.h
│ │ │ ├── TDGAOtherTableViewCell.h
│ │ │ ├── TDGAAccountTableViewCell.h
│ │ │ ├── TDGAMissionTableViewCell.h
│ │ │ ├── TDGADeviceIDTableViewCell.h
│ │ │ ├── TDGAVirtualCurrencyTableViewCell.h
│ │ │ ├── TDGACustomViewController.h
│ │ │ ├── TDGADeviceIDTableViewCell.m
│ │ │ ├── TDGAOtherTableViewCell.m
│ │ │ ├── TDGAItemTableViewCell.m
│ │ │ ├── TDGAMissionTableViewCell.m
│ │ │ ├── TDGACustomViewController.m
│ │ │ └── TDGAVirtualCurrencyTableViewCell.m
│ │ ├── AppAnalytics
│ │ │ ├── TDAAAccountTableViewCell.h
│ │ │ ├── TDAAVersionTableViewCell.h
│ │ │ ├── TDAADeviceIDTableViewCell.h
│ │ │ ├── TDAAExceptionTableViewCell.h
│ │ │ ├── TDAALocationTableViewCell.h
│ │ │ ├── TDAAPageFirstViewController.h
│ │ │ ├── TDAAPageSecondViewController.h
│ │ │ ├── TDAAPageViewController.h
│ │ │ ├── TDAACustomViewController.h
│ │ │ ├── TDAAStandardViewController.h
│ │ │ ├── TDAAAntiCheatingViewController.h
│ │ │ ├── TDAAExceptionTableViewCell.m
│ │ │ ├── TDAADeviceIDTableViewCell.m
│ │ │ ├── TDAAPageViewController.m
│ │ │ ├── TDAAPageFirstViewController.m
│ │ │ ├── TDAAPageSecondViewController.m
│ │ │ ├── TDAAStandardViewController.m
│ │ │ ├── TDAALocationTableViewCell.m
│ │ │ ├── TDAAVersionTableViewCell.m
│ │ │ ├── TDAAAntiCheatingViewController.m
│ │ │ ├── TDAACustomViewController.m
│ │ │ └── TDAAAccountTableViewCell.m
│ │ ├── TDTableViewController.h
│ │ ├── PhoneDemo.entitlements
│ │ ├── TDGeneralViewController.h
│ │ ├── TDHomeTableViewCell.h
│ │ ├── main.m
│ │ ├── TDInfoViewController.m
│ │ ├── AppDelegate.h
│ │ ├── Info.plist
│ │ ├── AppDelegate.m
│ │ ├── TDHomeTableViewCell.m
│ │ └── TDHomeViewController.m
│ └── TalkingDataSDKDemo.xcodeproj
│ │ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ ├── xcuserdata
│ │ │ └── bliss_ddo.xcuserdatad
│ │ │ │ └── UserInterfaceState.xcuserstate
│ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ ├── xcuserdata
│ │ └── bliss_ddo.xcuserdatad
│ │ │ └── xcschemes
│ │ │ └── xcschememanagement.plist
│ │ └── xcshareddata
│ │ └── xcschemes
│ │ └── PhoneDemo.xcscheme
└── libyourview
│ ├── libyourview.xcodeproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ ├── xcuserdata
│ │ │ └── bliss_ddo.xcuserdatad
│ │ │ │ └── UserInterfaceState.xcuserstate
│ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ └── xcuserdata
│ │ └── bliss_ddo.xcuserdatad
│ │ └── xcschemes
│ │ └── xcschememanagement.plist
│ ├── main
│ └── Main.h
│ ├── serializer
│ ├── NSObject+YVNodeInfo.h
│ ├── UIView+YVNodeInfo.h
│ ├── UIView+YVViewTree.h
│ ├── YVTraversalStepin.h
│ ├── UIView+YVTraversal.h
│ ├── YVTraversalContext.h
│ ├── UIView+YVTraversal.m
│ ├── NSObject+YVNodeInfo.m
│ ├── UIView+YVViewTree.m
│ ├── YVTraversalContext.m
│ ├── UIView+YVNodeInfo.m
│ └── YVTraversalStepin.m
│ ├── manager
│ ├── YVObjectManager.h
│ └── YVObjectManager.m
│ ├── yourviewdynamic
│ ├── yourviewdynamic.h
│ └── Info.plist
│ ├── libyourview
│ └── Info.plist
│ ├── youview
│ └── Info.plist
│ └── vendor
│ └── GCDWebServer
│ ├── Requests
│ ├── GCDWebServerFileRequest.h
│ ├── GCDWebServerURLEncodedFormRequest.h
│ ├── GCDWebServerURLEncodedFormRequest.m
│ └── GCDWebServerDataRequest.h
│ └── Responses
│ ├── GCDWebServerStreamedResponse.m
│ └── GCDWebServerStreamedResponse.h
└── README.md
/_config.yml:
--------------------------------------------------------------------------------
1 | theme: jekyll-theme-cayman
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/LICENSE
--------------------------------------------------------------------------------
/img/shake.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/img/shake.gif
--------------------------------------------------------------------------------
/img/usage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/img/usage.png
--------------------------------------------------------------------------------
/img/buildrun.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/img/buildrun.png
--------------------------------------------------------------------------------
/img/camera.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/img/camera.gif
--------------------------------------------------------------------------------
/img/connect.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/img/connect.png
--------------------------------------------------------------------------------
/img/wechat.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/img/wechat.jpg
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/img/empty.scn:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/MacOS/YourView/YourView/img/empty.scn
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/img/refresh.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/MacOS/YourView/YourView/img/refresh.png
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/img/toolbar_segment/left_blue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/MacOS/YourView/YourView/img/toolbar_segment/left_blue.png
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/img/toolbar_segment/left_gray.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/MacOS/YourView/YourView/img/toolbar_segment/left_gray.png
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/img/toolbar_segment/right_blue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/MacOS/YourView/YourView/img/toolbar_segment/right_blue.png
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/img/toolbar_segment/right_gray.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/MacOS/YourView/YourView/img/toolbar_segment/right_gray.png
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/img/cellimage/cellimage_view@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/MacOS/YourView/YourView/img/cellimage/cellimage_view@2x.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/AppIcon.appiconset/Icon-20.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/AppIcon.appiconset/Icon-20.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/AppIcon.appiconset/Icon-29.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/AppIcon.appiconset/Icon-29.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/AppIcon.appiconset/Icon-40.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/AppIcon.appiconset/Icon-40.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/AppIcon.appiconset/Icon-76.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/AppIcon.appiconset/Icon-76.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/AppIcon.appiconset/Icon-20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/AppIcon.appiconset/Icon-20@2x.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/AppIcon.appiconset/Icon-20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/AppIcon.appiconset/Icon-20@3x.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/AppIcon.appiconset/Icon-29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/AppIcon.appiconset/Icon-29@2x.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/AppIcon.appiconset/Icon-29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/AppIcon.appiconset/Icon-29@3x.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/AppIcon.appiconset/Icon-40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/AppIcon.appiconset/Icon-40@2x.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/AppIcon.appiconset/Icon-40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/AppIcon.appiconset/Icon-40@3x.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/Base.imageset/FunIcon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/Base.imageset/FunIcon.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/Page.imageset/FunIcon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/Page.imageset/FunIcon.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/Push.imageset/FunIcon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/Push.imageset/FunIcon.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/eAuth.imageset/FunIcon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/eAuth.imageset/FunIcon.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/AppIcon.appiconset/Icon-83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/AppIcon.appiconset/Icon-83.5@2x.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/Base.imageset/FunIcon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/Base.imageset/FunIcon@2x.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/Base.imageset/FunIcon@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/Base.imageset/FunIcon@3x.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/Codeless.imageset/FunIcon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/Codeless.imageset/FunIcon.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/Custom.imageset/FunIcon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/Custom.imageset/FunIcon.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/Page.imageset/FunIcon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/Page.imageset/FunIcon@2x.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/Page.imageset/FunIcon@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/Page.imageset/FunIcon@3x.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/Push.imageset/FunIcon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/Push.imageset/FunIcon@2x.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/Push.imageset/FunIcon@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/Push.imageset/FunIcon@3x.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/Standard.imageset/FunIcon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/Standard.imageset/FunIcon.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/eAuth.imageset/FunIcon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/eAuth.imageset/FunIcon@2x.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/eAuth.imageset/FunIcon@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/eAuth.imageset/FunIcon@3x.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/Custom.imageset/FunIcon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/Custom.imageset/FunIcon@2x.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/Custom.imageset/FunIcon@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/Custom.imageset/FunIcon@3x.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/CheckIcon/selected.imageset/selected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/CheckIcon/selected.imageset/selected.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/AntiCheating.imageset/FunIcon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/AntiCheating.imageset/FunIcon.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/BrandGrowth.imageset/FunIcon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/BrandGrowth.imageset/FunIcon.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/Codeless.imageset/FunIcon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/Codeless.imageset/FunIcon@2x.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/Codeless.imageset/FunIcon@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/Codeless.imageset/FunIcon@3x.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/Standard.imageset/FunIcon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/Standard.imageset/FunIcon@2x.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/Standard.imageset/FunIcon@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/Standard.imageset/FunIcon@3x.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/CheckIcon/selected.imageset/selected@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/CheckIcon/selected.imageset/selected@2x.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/CheckIcon/selected.imageset/selected@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/CheckIcon/selected.imageset/selected@3x.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/CheckIcon/unselected.imageset/unselected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/CheckIcon/unselected.imageset/unselected.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/AntiCheating.imageset/FunIcon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/AntiCheating.imageset/FunIcon@2x.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/AntiCheating.imageset/FunIcon@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/AntiCheating.imageset/FunIcon@3x.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/BrandGrowth.imageset/FunIcon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/BrandGrowth.imageset/FunIcon@2x.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/BrandGrowth.imageset/FunIcon@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/BrandGrowth.imageset/FunIcon@3x.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/CheckIcon/unselected.imageset/unselected@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/CheckIcon/unselected.imageset/unselected@2x.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/CheckIcon/unselected.imageset/unselected@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/CheckIcon/unselected.imageset/unselected@3x.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/PlaceholderImage.imageset/PlaceholderImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/PlaceholderImage.imageset/PlaceholderImage.png
--------------------------------------------------------------------------------
/MacOS/YourView/YourView.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/TalkingDataSDKDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/iOS/libyourview/libyourview.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowUp@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowUp@2x.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowUp@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowUp@3x.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowDown@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowDown@2x.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowDown@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowDown@3x.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowLeft@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowLeft@2x.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowLeft@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowLeft@3x.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowRight@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowRight@2x.png
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowRight@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/PhoneDemo/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowRight@3x.png
--------------------------------------------------------------------------------
/MacOS/YourView/YourView.xcodeproj/project.xcworkspace/xcuserdata/bliss_ddo.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/MacOS/YourView/YourView.xcodeproj/project.xcworkspace/xcuserdata/bliss_ddo.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/Window/YVWindow.m:
--------------------------------------------------------------------------------
1 | //
2 | // YVWindow.m
3 | // YourView
4 | //
5 | // Created by bliss_ddo on 2019/4/24.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import "YVWindow.h"
10 |
11 | @implementation YVWindow
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/iOS/libyourview/libyourview.xcodeproj/project.xcworkspace/xcuserdata/bliss_ddo.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/libyourview/libyourview.xcodeproj/project.xcworkspace/xcuserdata/bliss_ddo.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/view/cell/binding/YVStepperModel.m:
--------------------------------------------------------------------------------
1 | //
2 | // YVStepperModel.m
3 | // YourView
4 | //
5 | // Created by bliss_ddo on 2019/5/6.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import "YVStepperModel.h"
10 |
11 | @implementation YVStepperModel
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/TalkingDataSDKDemo.xcodeproj/project.xcworkspace/xcuserdata/bliss_ddo.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TalkingData/YourView/HEAD/iOS/TalkingDataSDKDemo/TalkingDataSDKDemo.xcodeproj/project.xcworkspace/xcuserdata/bliss_ddo.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/main.m:
--------------------------------------------------------------------------------
1 | //
2 | // main.m
3 | // YourView
4 | //
5 | // Created by bliss_ddo on 2019/4/24.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | int main(int argc, const char * argv[]) {
12 | return NSApplicationMain(argc, argv);
13 | }
14 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/AppDelegate.h:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.h
3 | // YourView
4 | //
5 | // Created by bliss_ddo on 2019/4/24.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface AppDelegate : NSObject
12 |
13 |
14 | @end
15 |
16 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/view/cell/binding/YVObjectController.m:
--------------------------------------------------------------------------------
1 | //
2 | // YVObjectController.m
3 | // YourView
4 | //
5 | // Created by bliss_ddo on 2019/5/6.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import "YVObjectController.h"
10 |
11 | @implementation YVObjectController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/TDInfoViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // TDInfoViewController.h
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2017/5/22.
6 | // Copyright © 2017年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface TDInfoViewController : UIViewController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/iOS/libyourview/main/Main.h:
--------------------------------------------------------------------------------
1 | //
2 | // Main.h
3 | // libyourview
4 | //
5 | // Created by bliss_ddo on 2019/4/24.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface Main : NSObject
14 |
15 | @end
16 |
17 | NS_ASSUME_NONNULL_END
18 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/TDHomeViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // TDHomeViewController.h
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2017/5/22.
6 | // Copyright © 2017年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface TDHomeViewController : UIViewController
12 |
13 | @end
14 |
15 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/Window/YVWindow.h:
--------------------------------------------------------------------------------
1 | //
2 | // YVWindow.h
3 | // YourView
4 | //
5 | // Created by bliss_ddo on 2019/4/24.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface YVWindow : NSWindow
14 |
15 | @end
16 |
17 | NS_ASSUME_NONNULL_END
18 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/eAuth/TDEAAuthViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // TDEAAuthViewController.h
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2018/1/9.
6 | // Copyright © 2018年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface TDEAAuthViewController : UIViewController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/iOS/libyourview/libyourview.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/AdTracking/TDATGameTableViewCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // TDATGameTableViewCell.h
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2017/5/22.
6 | // Copyright © 2017年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface TDATGameTableViewCell : UITableViewCell
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/AdTracking/TDATOtherTableViewCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // TDATOtherTableViewCell.h
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2017/5/22.
6 | // Copyright © 2017年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface TDATOtherTableViewCell : UITableViewCell
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/GameAnalytics/TDGAItemTableViewCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // TDGAItemTableViewCell.h
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2017/5/22.
6 | // Copyright © 2017年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface TDGAItemTableViewCell : UITableViewCell
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/eAuth/TDEACheckViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // TDEACheckViewController.h
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2018/1/9.
6 | // Copyright © 2018年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface TDEACheckViewController : UIViewController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/eAuth/TDEAMatchViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // TDEAMatchViewController.h
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2018/1/9.
6 | // Copyright © 2018年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface TDEAMatchViewController : UIViewController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/GameAnalytics/TDGAOtherTableViewCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // TDGAOtherTableViewCell.h
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2017/5/22.
6 | // Copyright © 2017年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface TDGAOtherTableViewCell : UITableViewCell
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/eAuth/TDEAUnbindViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // TDEAUnbindViewController.h
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2018/1/9.
6 | // Copyright © 2018年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface TDEAUnbindViewController : UIViewController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/AdTracking/TDATDeviceIDTableViewCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // TDATDeviceIDTableViewCell.h
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2018/8/29.
6 | // Copyright © 2018年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface TDATDeviceIDTableViewCell : UITableViewCell
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/AppAnalytics/TDAAAccountTableViewCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // TDAAAccountTableViewCell.h
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2017/6/26.
6 | // Copyright © 2017年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface TDAAAccountTableViewCell : UITableViewCell
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/AppAnalytics/TDAAVersionTableViewCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // TDAAVersionTableViewCell.h
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2018/8/29.
6 | // Copyright © 2018年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface TDAAVersionTableViewCell : UITableViewCell
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/GameAnalytics/TDGAAccountTableViewCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // TDGAAccountTableViewCell.h
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2017/5/22.
6 | // Copyright © 2017年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface TDGAAccountTableViewCell : UITableViewCell
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/GameAnalytics/TDGAMissionTableViewCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // TDGAMissionTableViewCell.h
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2017/5/22.
6 | // Copyright © 2017年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface TDGAMissionTableViewCell : UITableViewCell
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/TalkingDataSDKDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/AdTracking/TDATECommerceTableViewCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // TDATECommerceTableViewCell.h
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2017/5/22.
6 | // Copyright © 2017年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface TDATECommerceTableViewCell : UITableViewCell
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/AppAnalytics/TDAADeviceIDTableViewCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // TDAADeviceIDTableViewCell.h
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2018/8/29.
6 | // Copyright © 2018年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface TDAADeviceIDTableViewCell : UITableViewCell
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/AppAnalytics/TDAAExceptionTableViewCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // TDAAExceptionTableViewCell.h
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2017/6/26.
6 | // Copyright © 2017年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface TDAAExceptionTableViewCell : UITableViewCell
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/AppAnalytics/TDAALocationTableViewCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // TDAALocationTableViewCell.h
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2017/6/26.
6 | // Copyright © 2017年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface TDAALocationTableViewCell : UITableViewCell
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/GameAnalytics/TDGADeviceIDTableViewCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // TDGADeviceIDTableViewCell.h
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2018/8/29.
6 | // Copyright © 2018年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface TDGADeviceIDTableViewCell : UITableViewCell
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/AppAnalytics/TDAAPageFirstViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // TDAAPageFirstViewController.h
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2017/5/22.
6 | // Copyright © 2017年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface TDAAPageFirstViewController : UIViewController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/AppAnalytics/TDAAPageSecondViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // TDAAPageSecondViewController.h
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2017/5/22.
6 | // Copyright © 2017年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface TDAAPageSecondViewController : UIViewController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/view/YVSelectableTextView.h:
--------------------------------------------------------------------------------
1 | //
2 | // YVSelectableTextView.h
3 | // YourView
4 | //
5 | // Created by bliss_ddo on 2019/5/5.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface YVSelectableTextView : NSTextView
14 |
15 | @end
16 |
17 | NS_ASSUME_NONNULL_END
18 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/GameAnalytics/TDGAVirtualCurrencyTableViewCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // TDGAVirtualCurrencyTableViewCell.h
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2017/5/22.
6 | // Copyright © 2017年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface TDGAVirtualCurrencyTableViewCell : UITableViewCell
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/TDTableViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // TDTableViewController.h
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2017/8/1.
6 | // Copyright © 2017年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "TDGeneralViewController.h"
11 |
12 | @interface TDTableViewController : TDGeneralViewController
13 |
14 | @end
15 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/view/cell/binding/YVObjectController.h:
--------------------------------------------------------------------------------
1 | //
2 | // YVObjectController.h
3 | // YourView
4 | //
5 | // Created by bliss_ddo on 2019/5/6.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface YVObjectController : NSObjectController
14 |
15 | @end
16 |
17 | NS_ASSUME_NONNULL_END
18 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/PhoneDemo.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | aps-environment
6 | development
7 | com.apple.developer.networking.wifi-info
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/AdTracking/TDATCustomViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // TDATCustomViewController.h
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2017/5/22.
6 | // Copyright © 2017年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "TDGeneralViewController.h"
11 |
12 | @interface TDATCustomViewController : TDGeneralViewController
13 |
14 | @end
15 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/AppAnalytics/TDAAPageViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // TDAAPageViewController.h
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2017/5/22.
6 | // Copyright © 2017年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "TDGeneralViewController.h"
11 |
12 | @interface TDAAPageViewController : TDGeneralViewController
13 |
14 | @end
15 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/TDGeneralViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // TDGeneralViewController.h
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2017/5/22.
6 | // Copyright © 2017年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface TDGeneralViewController : UIViewController
12 |
13 | @property (strong, nonatomic) NSDictionary *info;
14 |
15 | @end
16 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/TDHomeTableViewCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // TDHomeTableViewCell.m
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2017/5/22.
6 | // Copyright © 2017年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface TDHomeTableViewCell : UITableViewCell
12 |
13 | @property (nonatomic, weak) IBOutlet UIImageView *selectImage;
14 |
15 | @end
16 |
--------------------------------------------------------------------------------
/iOS/libyourview/serializer/NSObject+YVNodeInfo.h:
--------------------------------------------------------------------------------
1 | //
2 | // NSObject+YVNodeInfo.h
3 | // libyourview
4 | //
5 | // Created by bliss_ddo on 2019/4/24.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface NSObject (YVNodeInfo)
14 | -(NSDictionary*)nodeInfo;
15 | @end
16 |
17 | NS_ASSUME_NONNULL_END
18 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/Controller/split/YVLeftViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // YVLeftViewController.h
3 | // YourView
4 | //
5 | // Created by bliss_ddo on 2019/4/25.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface YVLeftViewController : NSViewController
14 |
15 |
16 |
17 | @end
18 |
19 | NS_ASSUME_NONNULL_END
20 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/Controller/split/YVSplitViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // YVSplitViewController.h
3 | // YourView
4 | //
5 | // Created by bliss_ddo on 2019/4/25.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface YVSplitViewController : NSSplitViewController
14 |
15 | @end
16 |
17 | NS_ASSUME_NONNULL_END
18 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/helper/SCNNode+YVBorder.h:
--------------------------------------------------------------------------------
1 | //
2 | // SCNNode+border.h
3 | // YourView
4 | //
5 | // Created by bliss_ddo on 2019/4/28.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface SCNNode (YVBorder)
14 | +(SCNNode*)borderNodeWithPlane:(SCNNode*)plane;
15 | @end
16 |
17 | NS_ASSUME_NONNULL_END
18 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/AppAnalytics/TDAACustomViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // TDAACustomViewController.h
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2017/5/22.
6 | // Copyright © 2017年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "TDGeneralViewController.h"
11 |
12 | @interface TDAACustomViewController : TDGeneralViewController
13 |
14 | @end
15 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/GameAnalytics/TDGACustomViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // TDGACustomViewController.h
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2017/5/22.
6 | // Copyright © 2017年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "TDGeneralViewController.h"
11 |
12 | @interface TDGACustomViewController : TDGeneralViewController
13 |
14 | @end
15 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/AppAnalytics/TDAAStandardViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // TDAAStandardViewController.h
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2017/6/26.
6 | // Copyright © 2017年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "TDGeneralViewController.h"
11 |
12 | @interface TDAAStandardViewController : TDGeneralViewController
13 |
14 | @end
15 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/helper/SCNNode+YVIdentifier.h:
--------------------------------------------------------------------------------
1 | //
2 | // SCNNode+YVIdentifier.h
3 | // YourView
4 | //
5 | // Created by bliss_ddo on 2019/5/5.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface SCNNode (YVIdentifier)
14 | @property (nonatomic,strong) NSString * uniqueID;
15 | @end
16 |
17 | NS_ASSUME_NONNULL_END
18 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/AdTracking/TDATCustomViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // TDATCustomViewController.m
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2017/5/22.
6 | // Copyright © 2017年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import "TDATCustomViewController.h"
10 |
11 | @implementation TDATCustomViewController
12 |
13 | - (IBAction)customEvent:(UIButton *)sender {
14 |
15 | }
16 |
17 | @end
18 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/AppAnalytics/TDAAAntiCheatingViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // TDAAAntiCheatingViewController.h
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2017/5/22.
6 | // Copyright © 2017年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "TDGeneralViewController.h"
11 |
12 | @interface TDAAAntiCheatingViewController : TDGeneralViewController
13 |
14 | @end
15 |
--------------------------------------------------------------------------------
/iOS/libyourview/serializer/UIView+YVNodeInfo.h:
--------------------------------------------------------------------------------
1 | //
2 | // UIView+YVNodeInfo.h
3 | // libyourview
4 | //
5 | // Created by bliss_ddo on 2019/4/24.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "NSObject+YVNodeInfo.h"
11 |
12 | NS_ASSUME_NONNULL_BEGIN
13 |
14 | @interface UIView (YVNodeInfo)
15 | -(NSDictionary*)nodeInfo;
16 | @end
17 |
18 | NS_ASSUME_NONNULL_END
19 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/Controller/YVHomeViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // YVHomeViewController.h
3 | // YourView
4 | //
5 | // Created by bliss_ddo on 2019/4/24.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface YVHomeViewController : NSViewController
14 | -(IBAction)buttonPressed:(NSButton*)btn;
15 | @end
16 |
17 | NS_ASSUME_NONNULL_END
18 |
--------------------------------------------------------------------------------
/iOS/libyourview/serializer/UIView+YVViewTree.h:
--------------------------------------------------------------------------------
1 | //
2 | // UIView+YVViewTree.h
3 | // libyourview
4 | //
5 | // Created by bliss_ddo on 2019/4/24.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import
10 | NS_ASSUME_NONNULL_BEGIN
11 |
12 | @interface UIView (YVViewTree)
13 | +(NSString*)rootViewTreeString;
14 | +(NSDictionary*)rootViewTreeDictionary;
15 | @end
16 |
17 | NS_ASSUME_NONNULL_END
18 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/main.m:
--------------------------------------------------------------------------------
1 | //
2 | // main.m
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2017/5/22.
6 | // Copyright © 2017年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "AppDelegate.h"
11 |
12 | int main(int argc, char * argv[]) {
13 | @autoreleasepool {
14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/helper/SCNNode+YVPlane.h:
--------------------------------------------------------------------------------
1 | //
2 | // SCNNode+plane.h
3 | // YourView
4 | //
5 | // Created by bliss_ddo on 2019/4/28.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface SCNNode (YVPlane)
14 | +(SCNNode*)yvplaneWithWidth:(CGFloat)width height:(CGFloat)height content:(id)content;
15 | @end
16 |
17 | NS_ASSUME_NONNULL_END
18 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/helper/SCNNode+YVSelected.h:
--------------------------------------------------------------------------------
1 | //
2 | // SCNNode+selected.h
3 | // YourView
4 | //
5 | // Created by bliss_ddo on 2019/4/28.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface SCNNode (YVSelected)
14 | +(SCNNode*)yvselectedNodeWithwidth:(CGFloat)width height:(CGFloat)height;
15 |
16 | @end
17 |
18 | NS_ASSUME_NONNULL_END
19 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/Controller/split/YVRightViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // YVRightViewController.h
3 | // YourView
4 | //
5 | // Created by bliss_ddo on 2019/4/25.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface YVRightViewController : NSViewController
14 |
15 | @property (nonatomic) IBOutlet NSTableView * viewtable;
16 | @end
17 |
18 | NS_ASSUME_NONNULL_END
19 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/helper/SCNNode+YVVisual.h:
--------------------------------------------------------------------------------
1 | //
2 | // SCNNode+YVVisual.h
3 | // YourView
4 | //
5 | // Created by bliss_ddo on 2019/5/5.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface SCNNode (YVVisual)
14 |
15 | -(void)hover;
16 | -(void)unhover;
17 |
18 | -(void)highlight;
19 | -(void)lowlight;
20 |
21 | @end
22 |
23 | NS_ASSUME_NONNULL_END
24 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/view/cell/binding/YVStepperModel.h:
--------------------------------------------------------------------------------
1 | //
2 | // YVStepperModel.h
3 | // YourView
4 | //
5 | // Created by bliss_ddo on 2019/5/6.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface YVStepperModel : NSObject
14 | {
15 | CGFloat x;
16 | CGFloat y;
17 | CGFloat w;
18 | CGFloat h;
19 | }
20 | @end
21 |
22 | NS_ASSUME_NONNULL_END
23 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView.xcodeproj/xcuserdata/bliss_ddo.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | YourView.xcscheme
8 |
9 | orderHint
10 | 0
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/view/YVSelectableTextView.m:
--------------------------------------------------------------------------------
1 | //
2 | // YVSelectableTextView.m
3 | // YourView
4 | //
5 | // Created by bliss_ddo on 2019/5/5.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import "YVSelectableTextView.h"
10 |
11 | @implementation YVSelectableTextView
12 |
13 | - (void)drawRect:(NSRect)dirtyRect {
14 | [super drawRect:dirtyRect];
15 | }
16 |
17 | -(NSView *)hitTest:(NSPoint)point
18 | {
19 | return self.superview;
20 | }
21 |
22 | @end
23 |
--------------------------------------------------------------------------------
/iOS/libyourview/manager/YVObjectManager.h:
--------------------------------------------------------------------------------
1 | //
2 | // YVObjectManager.h
3 | // libyourview
4 | //
5 | // Created by bliss_ddo on 2019/5/5.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "YVTraversalContext.h"
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface YVObjectManager : NSObject
14 | +(YVObjectManager *)sharedInstance;
15 | @property (nonatomic,strong) YVTraversalContext * context;
16 | @end
17 |
18 | NS_ASSUME_NONNULL_END
19 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/helper/YVCGRectHelper.h:
--------------------------------------------------------------------------------
1 | //
2 | // YVCGRectHelper.h
3 | // YourView
4 | //
5 | // Created by bliss_ddo on 2019/4/28.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface YVCGRectHelper : NSObject
14 | +(CGRect)CGRectExpand:(CGRect)rect;
15 | +(CGRect)UIKitRectTransformToSceneRect:(CGRect)UIKitRect withScreenSize:(CGSize)screenSize;
16 | @end
17 |
18 | NS_ASSUME_NONNULL_END
19 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/AppAnalytics/TDAAExceptionTableViewCell.m:
--------------------------------------------------------------------------------
1 | //
2 | // TDAAExceptionTableViewCell.m
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2017/6/26.
6 | // Copyright © 2017年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import "TDAAExceptionTableViewCell.h"
10 |
11 | @implementation TDAAExceptionTableViewCell
12 |
13 | - (IBAction)exception:(UIButton *)sender {
14 | NSArray *array = [NSArray array];
15 | [array objectAtIndex:0];
16 | }
17 |
18 | @end
19 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/Controller/loading/YVLoadingViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // YVLoadingViewController.h
3 | // YourView
4 | //
5 | // Created by bliss_ddo on 2019/4/25.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface YVLoadingViewController : NSViewController
14 | @property (weak) IBOutlet NSTextField *infolabel;
15 | @property (nonatomic,copy) NSString * host;
16 | @end
17 |
18 | NS_ASSUME_NONNULL_END
19 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/Controller/split/YVSplitViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // YVSplitViewController.m
3 | // YourView
4 | //
5 | // Created by bliss_ddo on 2019/4/25.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import "YVSplitViewController.h"
10 |
11 | @interface YVSplitViewController ()
12 |
13 | @end
14 |
15 | @implementation YVSplitViewController
16 |
17 | - (void)viewDidLoad {
18 | [super viewDidLoad];
19 | NSLog(@"1123123123123");
20 | }
21 |
22 |
23 |
24 |
25 | @end
26 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/YourView.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | com.apple.security.app-sandbox
6 |
7 | com.apple.security.files.user-selected.read-only
8 |
9 | com.apple.security.network.client
10 |
11 | com.apple.security.network.server
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/TalkingDataSDKDemo.xcodeproj/xcuserdata/bliss_ddo.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | PhoneDemo.xcscheme_^#shared#^_
8 |
9 | orderHint
10 | 0
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/Controller/split/YVMiddleViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // YVMiddleViewController.h
3 | // YourView
4 | //
5 | // Created by bliss_ddo on 2019/4/25.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface YVMiddleViewController : NSViewController
14 | -(void)changeDisplayMode:(YVSceneViewDisplayMode)newmode;
15 | -(void)changeHiddenMode:(BOOL)newmode;
16 | -(void)reset;
17 | @end
18 |
19 | NS_ASSUME_NONNULL_END
20 |
--------------------------------------------------------------------------------
/iOS/libyourview/serializer/YVTraversalStepin.h:
--------------------------------------------------------------------------------
1 | //
2 | // YVTraversalStepin.h
3 | // libyourview
4 | //
5 | // Created by bliss_ddo on 2019/4/24.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import
10 | #import
11 |
12 | NS_ASSUME_NONNULL_BEGIN
13 |
14 | @interface YVTraversalStepin : NSObject
15 | +(YVTraversalStepin*)stepInWithView:(UIView*)b parentInfo:(YVTraversalStepin*)parent;
16 | -(NSDictionary*)stepinfo;
17 | @end
18 |
19 | NS_ASSUME_NONNULL_END
20 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/AdTracking/TDATGameTableViewCell.m:
--------------------------------------------------------------------------------
1 | //
2 | // TDATGameTableViewCell.m
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2017/5/22.
6 | // Copyright © 2017年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import "TDATGameTableViewCell.h"
10 |
11 | @interface TDATGameTableViewCell ()
12 |
13 | @property (weak, nonatomic) IBOutlet UITextField *roleNameField;
14 |
15 | @end
16 |
17 | @implementation TDATGameTableViewCell
18 |
19 | - (IBAction)createRole {
20 | }
21 |
22 | @end
23 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/helper/YVNodeBackTracking.h:
--------------------------------------------------------------------------------
1 | //
2 | // YVNodeBackTracking.h
3 | // YourView
4 | //
5 | // Created by bliss_ddo on 2019/4/28.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface YVNodeBackTracking : NSObject
14 | +(NSInteger)findBestZFromlevelDict:(NSMutableDictionary*)levelDict minDepth:(NSInteger)minDeepth maxDepth:(NSInteger)maxDeepth frame:(CGRect)crect;
15 | @end
16 |
17 | NS_ASSUME_NONNULL_END
18 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/AdTracking/TDATDeviceIDTableViewCell.m:
--------------------------------------------------------------------------------
1 | //
2 | // TDATDeviceIDTableViewCell.m
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2018/8/29.
6 | // Copyright © 2018年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import "TDATDeviceIDTableViewCell.h"
10 |
11 | @interface TDATDeviceIDTableViewCell ()
12 |
13 | @property (weak, nonatomic) IBOutlet UITextField *deviceIDField;
14 |
15 | @end
16 |
17 | @implementation TDATDeviceIDTableViewCell
18 |
19 | - (IBAction)showDeviceID {
20 | }
21 |
22 | @end
23 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/AppAnalytics/TDAADeviceIDTableViewCell.m:
--------------------------------------------------------------------------------
1 | //
2 | // TDAADeviceIDTableViewCell.m
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2018/8/29.
6 | // Copyright © 2018年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import "TDAADeviceIDTableViewCell.h"
10 |
11 | @interface TDAADeviceIDTableViewCell ()
12 |
13 | @property (weak, nonatomic) IBOutlet UITextField *deviceIDField;
14 |
15 | @end
16 |
17 | @implementation TDAADeviceIDTableViewCell
18 |
19 | - (IBAction)showDeviceID {
20 | }
21 |
22 | @end
23 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/Base.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "FunIcon.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "FunIcon@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "FunIcon@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/Page.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "FunIcon.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "FunIcon@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "FunIcon@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/Push.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "FunIcon.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "FunIcon@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "FunIcon@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/AppAnalytics/TDAAPageViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // TDAAPageViewController.m
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2017/5/22.
6 | // Copyright © 2017年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import "TDAAPageViewController.h"
10 |
11 | @implementation TDAAPageViewController
12 |
13 | - (void)viewDidAppear:(BOOL)animated {
14 | [super viewDidAppear:animated];
15 | }
16 |
17 | - (void)viewWillDisappear:(BOOL)animated {
18 | [super viewWillDisappear:animated];
19 | }
20 |
21 | @end
22 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/Codeless.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "FunIcon.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "FunIcon@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "FunIcon@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/Custom.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "FunIcon.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "FunIcon@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "FunIcon@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/Standard.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "FunIcon.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "FunIcon@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "FunIcon@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/eAuth.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "FunIcon.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "FunIcon@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "FunIcon@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/GameAnalytics/TDGADeviceIDTableViewCell.m:
--------------------------------------------------------------------------------
1 | //
2 | // TDGADeviceIDTableViewCell.m
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2018/8/29.
6 | // Copyright © 2018年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import "TDGADeviceIDTableViewCell.h"
10 |
11 | @interface TDGADeviceIDTableViewCell ()
12 |
13 | @property (weak, nonatomic) IBOutlet UITextField *deviceIDField;
14 |
15 | @end
16 |
17 | @implementation TDGADeviceIDTableViewCell
18 |
19 | - (IBAction)showDeviceID {
20 | }
21 |
22 | @end
23 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/CheckIcon/selected.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "selected.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "selected@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "selected@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/AntiCheating.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "FunIcon.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "FunIcon@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "FunIcon@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/FunIcon/BrandGrowth.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "FunIcon.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "FunIcon@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "FunIcon@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/iOS/libyourview/manager/YVObjectManager.m:
--------------------------------------------------------------------------------
1 | //
2 | // YVObjectManager.m
3 | // libyourview
4 | //
5 | // Created by bliss_ddo on 2019/5/5.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import "YVObjectManager.h"
10 |
11 | @implementation YVObjectManager
12 | static YVObjectManager * _signleton;
13 | +(YVObjectManager *)sharedInstance
14 | {
15 | static dispatch_once_t oneToken;
16 | dispatch_once(&oneToken, ^{
17 | _signleton = [[YVObjectManager alloc]init];
18 | });
19 | return _signleton;
20 | }
21 | @end
22 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/CheckIcon/unselected.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "unselected.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "unselected@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "unselected@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/AppAnalytics/TDAAPageFirstViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // TDAAPageFirstViewController.m
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2017/5/22.
6 | // Copyright © 2017年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import "TDAAPageFirstViewController.h"
10 |
11 | @implementation TDAAPageFirstViewController
12 |
13 | - (void)viewDidAppear:(BOOL)animated {
14 | [super viewDidAppear:animated];
15 | }
16 |
17 | - (void)viewWillDisappear:(BOOL)animated {
18 | [super viewWillDisappear:animated];
19 | }
20 |
21 | @end
22 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/PlaceholderImage.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "PlaceholderImage.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "PlaceholderImage.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "PlaceholderImage.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/iOS/libyourview/serializer/UIView+YVTraversal.h:
--------------------------------------------------------------------------------
1 | //
2 | // UIView+YVTraversal.h
3 | // libyourview
4 | //
5 | // Created by bliss_ddo on 2019/4/24.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "YVTraversalStepin.h"
11 | #import "YVTraversalContext.h"
12 | #import "UIView+YVNodeInfo.m"
13 |
14 | NS_ASSUME_NONNULL_BEGIN
15 |
16 | @interface UIView (YVTraversal)
17 |
18 | -(NSDictionary*)traversal:(YVTraversalStepin*)stepIn context:(YVTraversalContext*)context;
19 |
20 | @end
21 |
22 | NS_ASSUME_NONNULL_END
23 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/AppAnalytics/TDAAPageSecondViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // TDAAPageSecondViewController.m
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2017/5/22.
6 | // Copyright © 2017年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import "TDAAPageSecondViewController.h"
10 |
11 | @implementation TDAAPageSecondViewController
12 |
13 | - (void)viewDidAppear:(BOOL)animated {
14 | [super viewDidAppear:animated];
15 | }
16 |
17 | - (void)viewWillDisappear:(BOOL)animated {
18 | [super viewWillDisappear:animated];
19 | }
20 |
21 | @end
22 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/IQKeyboardManager/Resources/IQKeyboardManager.bundle/zh-Hans/IQKeyboardManager.strings:
--------------------------------------------------------------------------------
1 |
2 | "enabled" = "开启";
3 |
4 | "disabled" = "关闭";
5 |
6 | "already disabled" = "已经开启";
7 |
8 | "already enabled" = "已经关闭";
9 |
10 | "You must set UIWindow.rootViewController in your AppDelegate to work with IQKeyboardManager" = "为了使用IQKeyboardManager,必须在你的 AppDelegate 中设置 UIWindow.rootViewController。";
11 |
12 | "Previous" = "前一个";
13 | "Next" = "下一个";
14 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/Controller/script/YVScriptEditorViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // YVScriptEditorViewController.h
3 | // YourView
4 | //
5 | // Created by bliss_ddo on 2019/4/30.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface YVScriptEditorViewController : NSViewController
14 | @property (nonatomic,strong) NSString * host;
15 | -(IBAction)onSendingEvent:(NSButton*)sender;
16 | @property (nonatomic) IBOutlet NSTextView * tv;
17 | @end
18 |
19 | NS_ASSUME_NONNULL_END
20 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/helper/SCNNode+YVIdentifier.m:
--------------------------------------------------------------------------------
1 | //
2 | // SCNNode+YVIdentifier.m
3 | // YourView
4 | //
5 | // Created by bliss_ddo on 2019/5/5.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import "SCNNode+YVIdentifier.h"
10 | #import
11 |
12 | @implementation SCNNode (YVIdentifier)
13 | -(void)setUniqueID:(NSString *)uniqueID
14 | {
15 | objc_setAssociatedObject(self, "UniqueID", uniqueID, OBJC_ASSOCIATION_RETAIN);
16 | }
17 | -(NSString *)uniqueID
18 | {
19 | return objc_getAssociatedObject(self, "UniqueID");
20 | }
21 |
22 | @end
23 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/helper/TravseralContext.h:
--------------------------------------------------------------------------------
1 | //
2 | // TravseralContext.h
3 | // revealY
4 | //
5 | // Created by bliss_ddo on 2019/4/22.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface TravseralContext : NSObject
14 | @property (nonatomic,assign,readonly) NSInteger objectCounter;
15 | @property (nonatomic,assign,readonly) NSInteger objectCounterWithoutOffScreenObject;
16 | -(void)stepin;
17 | -(void)stepinOffScreen:(BOOL)isoffScreen;
18 | @end
19 |
20 | NS_ASSUME_NONNULL_END
21 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/view/YVSceneView.h:
--------------------------------------------------------------------------------
1 | //
2 | // YVSceneView.h
3 | // YourView
4 | //
5 | // Created by bliss_ddo on 2019/4/28.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @protocol YVSceneViewDelegate
14 |
15 | -(void)sceneView:(SCNView*)scnview DidSelectedNode:(SCNNode*)node;
16 |
17 | @end
18 |
19 | @interface YVSceneView : SCNView
20 | @property(nonatomic,weak) id delegate;
21 | -(void)selectedNode:(NSString*)uuid;
22 | @end
23 |
24 | NS_ASSUME_NONNULL_END
25 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/GameAnalytics/TDGAOtherTableViewCell.m:
--------------------------------------------------------------------------------
1 | //
2 | // TDGAOtherTableViewCell.m
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2017/5/22.
6 | // Copyright © 2017年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import "TDGAOtherTableViewCell.h"
10 |
11 | @interface TDGAOtherTableViewCell ()
12 |
13 | @property (weak, nonatomic) IBOutlet UITextField *latitudeField;
14 | @property (weak, nonatomic) IBOutlet UITextField *longitudeField;
15 |
16 | @end
17 |
18 | @implementation TDGAOtherTableViewCell
19 |
20 | - (IBAction)setLocation {
21 |
22 | }
23 |
24 | @end
25 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/AppAnalytics/TDAAStandardViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // TDAAStandardViewController.m
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2017/6/26.
6 | // Copyright © 2017年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import "TDAAStandardViewController.h"
10 |
11 | @implementation TDAAStandardViewController
12 |
13 | - (IBAction)placeOrder {
14 |
15 | }
16 |
17 | - (IBAction)payOrder {
18 |
19 | }
20 |
21 | - (IBAction)viewItem {
22 | }
23 |
24 | - (IBAction)addItem {
25 | }
26 |
27 | - (IBAction)viewShoppingCart {
28 |
29 | }
30 |
31 |
32 | @end
33 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/TDInfoViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // TDInfoViewController.m
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2017/5/22.
6 | // Copyright © 2017年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import "TDInfoViewController.h"
10 |
11 | @implementation TDInfoViewController
12 |
13 | - (IBAction)back:(UIButton *)sender {
14 | [self dismissViewControllerAnimated:YES completion:nil];
15 | }
16 |
17 | - (IBAction)reapply:(UIButton *)sender {
18 | [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://doc.talkingdata.com"]];
19 | }
20 |
21 | @end
22 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/IQKeyboardManager/Resources/IQKeyboardManager.bundle/en.lproj/IQKeyboardManager.strings:
--------------------------------------------------------------------------------
1 |
2 | "enabled" = "enabled";
3 |
4 | "disabled" = "disabled";
5 |
6 | "already disabled" = "already disabled";
7 |
8 | "already enabled" = "already enabled";
9 |
10 | "You must set UIWindow.rootViewController in your AppDelegate to work with IQKeyboardManager" = "You must set UIWindow.rootViewController in your AppDelegate to work with IQKeyboardManager";
11 |
12 | "Previous" = "Previous";
13 | "Next" = "Next";
14 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/AppAnalytics/TDAALocationTableViewCell.m:
--------------------------------------------------------------------------------
1 | //
2 | // TDAALocationTableViewCell.m
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2017/6/26.
6 | // Copyright © 2017年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import "TDAALocationTableViewCell.h"
10 |
11 | @interface TDAALocationTableViewCell ()
12 |
13 | @property (weak, nonatomic) IBOutlet UITextField *latitudeField;
14 | @property (weak, nonatomic) IBOutlet UITextField *longitudeField;
15 |
16 | @end
17 |
18 | @implementation TDAALocationTableViewCell
19 |
20 | - (IBAction)setLocation:(UIButton *)sender {
21 |
22 | }
23 |
24 | @end
25 |
--------------------------------------------------------------------------------
/iOS/libyourview/yourviewdynamic/yourviewdynamic.h:
--------------------------------------------------------------------------------
1 | //
2 | // yourviewdynamic.h
3 | // yourviewdynamic
4 | //
5 | // Created by bliss_ddo on 2019/4/30.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | //! Project version number for yourviewdynamic.
12 | FOUNDATION_EXPORT double yourviewdynamicVersionNumber;
13 |
14 | //! Project version string for yourviewdynamic.
15 | FOUNDATION_EXPORT const unsigned char yourviewdynamicVersionString[];
16 |
17 | // In this header, you should import all the public headers of your framework using statements like #import
18 |
19 |
20 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/AdTracking/TDATECommerceTableViewCell.m:
--------------------------------------------------------------------------------
1 | //
2 | // TDATECommerceTableViewCell.m
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2017/5/22.
6 | // Copyright © 2017年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import "TDATECommerceTableViewCell.h"
10 |
11 | @implementation TDATECommerceTableViewCell
12 |
13 | - (IBAction)onPay1 {
14 | }
15 |
16 | - (IBAction)onPay2 {
17 |
18 | }
19 |
20 | - (IBAction)placeOrder {
21 |
22 | }
23 |
24 | - (IBAction)payOrder {
25 | }
26 |
27 | - (IBAction)viewItem {
28 | }
29 |
30 | - (IBAction)addItem {
31 | }
32 |
33 | - (IBAction)viewShoppingCart {
34 |
35 | }
36 |
37 | @end
38 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/view/cell/YVRightCellBase.h:
--------------------------------------------------------------------------------
1 | //
2 | // YVRightCellBase.h
3 | // YourView
4 | //
5 | // Created by bliss_ddo on 2019/5/6.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 | @protocol YVRightCellProtocol
13 | -(void)cellDidClick:(NSView*)cell withData:(nullable id)data cmd:(NSString*)cmd;
14 | @end
15 |
16 | @interface YVRightCellBase : NSView
17 | +(instancetype)makeView:(NSTableView*)tableView owner:(id)owner identifer:(NSString*)identifer;
18 | -(void)fillData:(id)data;
19 | @property(nonatomic,weak) id delegate;
20 | @end
21 |
22 | NS_ASSUME_NONNULL_END
23 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/AppDelegate.h:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.h
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2017/5/22.
6 | // Copyright © 2017年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import
10 | #if __IPHONE_OS_VERSION_MAX_ALLOWED > 100000
11 | #import
12 | #endif
13 | #import
14 |
15 | @interface AppDelegate : UIResponder <
16 | #if __IPHONE_OS_VERSION_MAX_ALLOWED > 100000
17 | UNUserNotificationCenterDelegate,
18 | #endif
19 | CLLocationManagerDelegate,
20 | UIApplicationDelegate>
21 |
22 | @property (strong, nonatomic) UIWindow *window;
23 |
24 | @end
25 |
26 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/GameAnalytics/TDGAItemTableViewCell.m:
--------------------------------------------------------------------------------
1 | //
2 | // TDGAItemTableViewCell.m
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2017/5/22.
6 | // Copyright © 2017年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import "TDGAItemTableViewCell.h"
10 |
11 | @interface TDGAItemTableViewCell ()
12 |
13 | @property (weak, nonatomic) IBOutlet UITextField *itemIDField;
14 | @property (weak, nonatomic) IBOutlet UITextField *itemNumberField;
15 | @property (weak, nonatomic) IBOutlet UITextField *itemPriceField;
16 |
17 | @end
18 |
19 | @implementation TDGAItemTableViewCell
20 |
21 | - (IBAction)purchaseItem {
22 |
23 | }
24 |
25 | - (IBAction)useItem {
26 |
27 | }
28 |
29 | @end
30 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/GameAnalytics/TDGAMissionTableViewCell.m:
--------------------------------------------------------------------------------
1 | //
2 | // TDGAMissionTableViewCell.m
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2017/5/22.
6 | // Copyright © 2017年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import "TDGAMissionTableViewCell.h"
10 |
11 | @interface TDGAMissionTableViewCell ()
12 |
13 | @property (weak, nonatomic) IBOutlet UITextField *missionIDField;
14 | @property (weak, nonatomic) IBOutlet UITextField *failedCauseField;
15 |
16 | @end
17 |
18 | @implementation TDGAMissionTableViewCell
19 |
20 | - (IBAction)missionBegin {
21 | }
22 |
23 | - (IBAction)missionCompleted {
24 | }
25 |
26 | - (IBAction)missionFailed {
27 |
28 | }
29 |
30 | @end
31 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/helper/TravseralContext.m:
--------------------------------------------------------------------------------
1 | //
2 | // TravseralContext.m
3 | // revealY
4 | //
5 | // Created by bliss_ddo on 2019/4/22.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import "TravseralContext.h"
10 |
11 | @implementation TravseralContext
12 | -(instancetype)init
13 | {
14 | if (self = [super init]) {
15 | _objectCounter = -1;
16 | _objectCounterWithoutOffScreenObject = -1;
17 | }
18 | return self;
19 | }
20 | -(void)stepin
21 | {
22 | _objectCounter++;
23 | }
24 | -(void)stepinOffScreen:(BOOL)isoffScreen
25 | {
26 | _objectCounter++;
27 | if (!isoffScreen) {
28 | _objectCounterWithoutOffScreenObject++;
29 | }
30 | }
31 | @end
32 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/eAuth/TDEACheckViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // TDEACheckViewController.m
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2018/1/9.
6 | // Copyright © 2018年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import "TDEACheckViewController.h"
10 |
11 | @interface TDEACheckViewController ()
12 |
13 | @property (weak, nonatomic) IBOutlet UITextField *accountNameField;
14 | @property (weak, nonatomic) IBOutlet UILabel *statusLabel;
15 |
16 | @end
17 |
18 | @implementation TDEACheckViewController
19 |
20 | #pragma mark - Control event
21 |
22 | - (IBAction)useTDID {
23 | }
24 |
25 | - (IBAction)check {
26 | }
27 |
28 | #pragma mark - TalkingData eAuth Delegate
29 |
30 |
31 | @end
32 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/AppAnalytics/TDAAVersionTableViewCell.m:
--------------------------------------------------------------------------------
1 | //
2 | // TDAAVersionTableViewCell.m
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2018/8/29.
6 | // Copyright © 2018年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import "TDAAVersionTableViewCell.h"
10 |
11 | @interface TDAAVersionTableViewCell ()
12 |
13 | @property (weak, nonatomic) IBOutlet UITextField *versionCodeField;
14 | @property (weak, nonatomic) IBOutlet UITextField *versionNameField;
15 |
16 | @end
17 |
18 | @implementation TDAAVersionTableViewCell
19 |
20 | - (IBAction)setVersion {
21 | NSString *versionCode = self.versionCodeField.text;
22 | NSString *versionName = self.versionNameField.text;
23 | }
24 |
25 | @end
26 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/helper/YVDisplayControl.m:
--------------------------------------------------------------------------------
1 | //
2 | // YVDisplayControl.m
3 | // YourView
4 | //
5 | // Created by bliss_ddo on 2019/4/28.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import "YVDisplayControl.h"
10 |
11 | @implementation YVDisplayControl
12 | -(instancetype)init
13 | {
14 | if (self = [super init]) {
15 | _displayMode = YVSceneViewDisplayModeSmart;
16 | _displayHiddenObject = NO;
17 | _defaultDisplayFactor = 0.01;
18 | _defaultDisplayZFactor = 0.3;
19 | _maxZDFS = 0;
20 | _maxZDFSOffScreen = 0;
21 | _maxZFlatten = 0;
22 | _maxZFlattenOffScreen = 0;
23 | _maxZSmart = 0;
24 | _maxZSmartOoffScreen = 0;
25 |
26 | }
27 | return self;
28 | }
29 | @end
30 |
--------------------------------------------------------------------------------
/iOS/libyourview/libyourview.xcodeproj/xcuserdata/bliss_ddo.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | libyourview.xcscheme
8 |
9 | orderHint
10 | 1
11 |
12 | youview.xcscheme
13 |
14 | orderHint
15 | 2
16 |
17 |
18 | SuppressBuildableAutocreation
19 |
20 | 80010DB12277E61B0057477D
21 |
22 | primary
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/iOS/libyourview/serializer/YVTraversalContext.h:
--------------------------------------------------------------------------------
1 | //
2 | // YVTraversalContext.h
3 | // libyourview
4 | //
5 | // Created by bliss_ddo on 2019/4/24.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import
10 | #import
11 |
12 | NS_ASSUME_NONNULL_BEGIN
13 |
14 | @interface YVTraversalContext : NSObject
15 | -(void)updateFromView:(UIView*)v;
16 | @property (nonatomic,assign,readonly) NSInteger objectCounter ;
17 | @property (nonatomic,assign,readonly) NSInteger hidenObjectCounter;
18 | @property (nonatomic,assign,readonly) NSInteger notHidenObjectCounter;
19 | @property (nonatomic,strong,readonly) NSDictionary * contextDict;
20 | @property (nonatomic,strong,readonly) NSMapTable * viewMap;
21 | @end
22 |
23 | NS_ASSUME_NONNULL_END
24 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/AppDelegate.m:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.m
3 | // YourView
4 | //
5 | // Created by bliss_ddo on 2019/4/24.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import "AppDelegate.h"
10 |
11 | @interface AppDelegate ()
12 | @property (strong) NSWindow * window;
13 | @end
14 |
15 | @implementation AppDelegate
16 | - (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
17 | self.window = NSApp.windows.firstObject;
18 | [self.window center];
19 | }
20 | - (BOOL)applicationShouldHandleReopen:(NSApplication *)theApplication
21 | hasVisibleWindows:(BOOL)flag{
22 | if (!flag){
23 | [NSApp activateIgnoringOtherApps:NO];
24 | [self.window makeKeyAndOrderFront:self];
25 | }
26 | return YES;
27 | }
28 | @end
29 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/AppAnalytics/TDAAAntiCheatingViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // TDAAAntiCheatingViewController.m
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2017/5/22.
6 | // Copyright © 2017年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import "TDAAAntiCheatingViewController.h"
10 |
11 | @interface TDAAAntiCheatingViewController ()
12 |
13 | @property (weak, nonatomic) IBOutlet UISwitch *antiCheatingSwitch;
14 |
15 | @end
16 |
17 | @implementation TDAAAntiCheatingViewController
18 |
19 | static BOOL antiCheatingSwitchOn = YES;
20 |
21 | - (void)viewDidLoad {
22 | [super viewDidLoad];
23 | self.antiCheatingSwitch.on = antiCheatingSwitchOn;
24 | }
25 |
26 | - (IBAction)enabledAntiCheating:(UISwitch *)sender {
27 | antiCheatingSwitchOn = sender.on;
28 | }
29 |
30 | @end
31 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/GameAnalytics/TDGACustomViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // TDGACustomViewController.m
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2017/5/22.
6 | // Copyright © 2017年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import "TDGACustomViewController.h"
10 |
11 | @interface TDGACustomViewController ()
12 |
13 | @property (weak, nonatomic) IBOutlet UITextField *eventIDField;
14 | @property (weak, nonatomic) IBOutlet UITextField *key1Field;
15 | @property (weak, nonatomic) IBOutlet UITextField *value1Field;
16 | @property (weak, nonatomic) IBOutlet UITextField *key2Field;
17 | @property (weak, nonatomic) IBOutlet UITextField *value2Field;
18 |
19 | @end
20 |
21 | @implementation TDGACustomViewController
22 |
23 | - (IBAction)submit:(UIButton *)sender {
24 |
25 | }
26 |
27 | @end
28 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/Theme/YVTheme.h:
--------------------------------------------------------------------------------
1 | //
2 | // YVTheme.h
3 | // YourView
4 | //
5 | // Created by bliss_ddo on 2019/4/27.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #ifndef YVTheme_h
10 | #define YVTheme_h
11 |
12 |
13 | #define YVTHEME_TITLEBAR_BACKGROUNDCOLOR RGBCOLOR(240,240,240).CGColor
14 | #define YVTHEME_TITLEBAR_BORDERCOLOR RGBCOLOR(172,172,172).CGColor
15 | #define YVTHEME_NODE_HOVERBORDERCOLOR RGBCOLOR(80,131,219)
16 | #define YVTHEME_NODE_HOVERBORDERNORMALCOLOR RGBCOLOR(218,218,218)
17 |
18 | #define YVTHEME_NODE_HIGHLIGHTCOLOR RGBCOLOR(206,214,255)
19 | //#define YVTHEME_NODE_HIGHLIGHTCOLOR [NSColor blueColor]
20 |
21 |
22 | //#define YVTHEME_SCNVIEW_BACKGROUNDCOLOR RGBCOLOR(225,227,230)
23 | #define YVTHEME_SCNVIEW_BACKGROUNDCOLOR [NSColor blackColor]
24 |
25 |
26 | #endif /* YVTheme_h */
27 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/view/cell/YVRightCellViewFrame.h:
--------------------------------------------------------------------------------
1 | //
2 | // YVRightCellViewFrame.h
3 | // YourView
4 | //
5 | // Created by bliss_ddo on 2019/5/6.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import "YVRightCellBase.h"
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface YVRightCellViewFrame : YVRightCellBase
14 | @property (weak) IBOutlet NSStepper *stepperx;
15 | @property (weak) IBOutlet NSTextField *fieldx;
16 | @property (weak) IBOutlet NSStepper *steppery;
17 | @property (weak) IBOutlet NSTextField *fieldy;
18 | @property (weak) IBOutlet NSStepper *stepperw;
19 | @property (weak) IBOutlet NSTextField *fieldw;
20 | @property (weak) IBOutlet NSStepper *stepperh;
21 | @property (weak) IBOutlet NSTextField *fieldh;
22 | - (IBAction)setFrameButtonPressed:(id)sender;
23 |
24 | @end
25 |
26 | NS_ASSUME_NONNULL_END
27 |
--------------------------------------------------------------------------------
/iOS/libyourview/yourviewdynamic/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 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | $(CURRENT_PROJECT_VERSION)
21 |
22 |
23 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/eAuth/TDEAMatchViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // TDEAMatchViewController.m
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2018/1/9.
6 | // Copyright © 2018年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import "TDEAMatchViewController.h"
10 |
11 | @interface TDEAMatchViewController ()
12 |
13 | @property (weak, nonatomic) IBOutlet UITextField *accountNameField;
14 | @property (weak, nonatomic) IBOutlet UITextField *countryCodeField;
15 | @property (weak, nonatomic) IBOutlet UITextField *phoneNumberField;
16 | @property (weak, nonatomic) IBOutlet UILabel *statusLabel;
17 |
18 | @end
19 |
20 | @implementation TDEAMatchViewController
21 |
22 | #pragma mark - Control event
23 |
24 | - (IBAction)useTDID {
25 | }
26 |
27 | - (IBAction)check {
28 | }
29 |
30 | #pragma mark - TalkingData eAuth Delegate
31 |
32 |
33 |
34 | @end
35 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/helper/SCNNode+YVZIndex.h:
--------------------------------------------------------------------------------
1 | //
2 | // SCNNode+zstorage.h
3 | // revealY
4 | //
5 | // Created by bliss_ddo on 2019/4/23.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "YVDisplayControl.h"
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface SCNNode (YVZindex)
14 | -(void)reloadZ:(YVDisplayControl*)displayControl;
15 | @property (nonatomic,strong) NSNumber * ZSmart;
16 | @property (nonatomic,strong) NSNumber * ZSmartWihtoutOffScreenItem;
17 | @property (nonatomic,strong) NSNumber * ZDeepsFirst;
18 | @property (nonatomic,strong) NSNumber * ZDeepsFirstWithoutOffScreenItem;
19 | @property (nonatomic,strong) NSNumber * ZFlatten;
20 | @property (nonatomic,strong) NSNumber * ZFlattenWithoutOffScreenItem;
21 | @property (nonatomic,strong) NSNumber * isOffScreen;
22 | @end
23 |
24 | NS_ASSUME_NONNULL_END
25 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/eAuth/TDEAUnbindViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // TDEAUnbindViewController.m
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2018/1/9.
6 | // Copyright © 2018年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import "TDEAUnbindViewController.h"
10 |
11 | @interface TDEAUnbindViewController ()
12 |
13 | @property (weak, nonatomic) IBOutlet UITextField *accountNameField;
14 | @property (weak, nonatomic) IBOutlet UITextField *countryCodeField;
15 | @property (weak, nonatomic) IBOutlet UITextField *phoneNumberField;
16 | @property (weak, nonatomic) IBOutlet UILabel *statusLabel;
17 |
18 | @end
19 |
20 | @implementation TDEAUnbindViewController
21 |
22 | #pragma mark - Control event
23 |
24 | - (IBAction)useTDID {
25 | }
26 |
27 | - (IBAction)unbind {
28 |
29 | }
30 |
31 | #pragma mark - TalkingData eAuth Delegate
32 |
33 |
34 |
35 | @end
36 |
--------------------------------------------------------------------------------
/iOS/libyourview/libyourview/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | CFBundleDevelopmentRegion
8 | $(DEVELOPMENT_LANGUAGE)
9 | CFBundleExecutable
10 | $(EXECUTABLE_NAME)
11 | CFBundleIdentifier
12 | $(PRODUCT_BUNDLE_IDENTIFIER)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | $(PRODUCT_NAME)
17 | CFBundlePackageType
18 | FMWK
19 | CFBundleShortVersionString
20 | 1.0
21 | CFBundleVersion
22 | $(CURRENT_PROJECT_VERSION)
23 |
24 |
25 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/AdTracking/TDATOtherTableViewCell.m:
--------------------------------------------------------------------------------
1 | //
2 | // TDATOtherTableViewCell.m
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2017/5/22.
6 | // Copyright © 2017年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import "TDATOtherTableViewCell.h"
10 |
11 | @interface TDATOtherTableViewCell ()
12 |
13 | @property (weak, nonatomic) IBOutlet UITextField *accountField;
14 | @property (weak, nonatomic) IBOutlet UITextField *orderIDField;
15 | @property (weak, nonatomic) IBOutlet UITextField *amountField;
16 | @property (weak, nonatomic) IBOutlet UITextField *currencyTypeField;
17 | @property (weak, nonatomic) IBOutlet UITextField *payTypeField;
18 |
19 | @end
20 |
21 | @implementation TDATOtherTableViewCell
22 |
23 | - (IBAction)registerAccount {
24 | }
25 |
26 | - (IBAction)loginAccount {
27 | }
28 |
29 | - (IBAction)pay {
30 |
31 | }
32 | - (IBAction)adSearch:(id)sender {
33 | }
34 | @end
35 |
--------------------------------------------------------------------------------
/iOS/libyourview/youview/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 | NSHumanReadableCopyright
22 | Copyright © 2019 bliss_ddo. All rights reserved.
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/view/cell/YVRightCellViewInfo.h:
--------------------------------------------------------------------------------
1 | //
2 | // YVRightCellViewInfo.h
3 | // YourView
4 | //
5 | // Created by bliss_ddo on 2019/5/6.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "YVRightCellBase.h"
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface YVRightCellViewInfo : YVRightCellBase
14 | @property (weak) IBOutlet NSTextField *addressfield;
15 | @property (weak) IBOutlet NSTextField *classfield;
16 | @property (weak) IBOutlet NSTextField *viewcontrollerfield;
17 | @property (weak) IBOutlet NSTextField *levelfield;
18 | @property (weak) IBOutlet NSTextField *depthfield;
19 | @property (weak) IBOutlet NSTextField *isintablefield;
20 | @property (weak) IBOutlet NSTextField *isincollectionfield;
21 | @property (weak) IBOutlet NSTextField *indexpathfield;
22 | @property (weak) IBOutlet NSTextField *inheritfield;
23 |
24 | -(IBAction)hereButtonPressed:(NSButton*)sender;
25 | @end
26 |
27 | NS_ASSUME_NONNULL_END
28 |
--------------------------------------------------------------------------------
/iOS/libyourview/serializer/UIView+YVTraversal.m:
--------------------------------------------------------------------------------
1 | //
2 | // UIView+YVTraversal.m
3 | // libyourview
4 | //
5 | // Created by bliss_ddo on 2019/4/24.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import "UIView+YVTraversal.h"
10 |
11 |
12 | @implementation UIView (YVTraversal)
13 | -(NSDictionary*)traversal:(YVTraversalStepin*)stepIn context:(YVTraversalContext*)context
14 | {
15 | [context updateFromView:self];
16 | YVTraversalStepin * stepined = [YVTraversalStepin stepInWithView:self parentInfo:stepIn];
17 | NSMutableDictionary * resDict = [NSMutableDictionary dictionary];
18 | NSMutableArray * children = [NSMutableArray array];
19 | for (UIView * each in self.subviews) {
20 | [children addObject:[each traversal:stepined context:context]];
21 | }
22 | resDict[@"children"] = children.copy;
23 | [resDict addEntriesFromDictionary:[stepined stepinfo]];
24 | [resDict addEntriesFromDictionary:[self nodeInfo]];
25 | return resDict.copy;
26 | }
27 | @end
28 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/helper/YVDisplayControl.h:
--------------------------------------------------------------------------------
1 | //
2 | // YVDisplayControl.h
3 | // YourView
4 | //
5 | // Created by bliss_ddo on 2019/4/28.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface YVDisplayControl : NSObject
14 | @property (nonatomic,assign)YVSceneViewDisplayMode displayMode;
15 | @property (nonatomic,assign)BOOL displayHiddenObject;
16 | @property (nonatomic,assign)CGFloat defaultDisplayFactor;
17 | @property (nonatomic,assign)CGFloat defaultDisplayZFactor;
18 | @property (nonatomic,assign)CGSize screenSize;
19 |
20 | @property (nonatomic,assign)NSInteger maxZDFS;
21 | @property (nonatomic,assign)NSInteger maxZDFSOffScreen;
22 | @property (nonatomic,assign)NSInteger maxZFlatten;
23 | @property (nonatomic,assign)NSInteger maxZFlattenOffScreen;
24 | @property (nonatomic,assign)NSInteger maxZSmart;
25 | @property (nonatomic,assign)NSInteger maxZSmartOoffScreen;
26 |
27 | @end
28 |
29 | NS_ASSUME_NONNULL_END
30 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/helper/SCNNode+YVSelected.m:
--------------------------------------------------------------------------------
1 | //
2 | // SCNNode+selected.m
3 | // YourView
4 | //
5 | // Created by bliss_ddo on 2019/4/28.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import "SCNNode+YVSelected.h"
10 |
11 | @implementation SCNNode (YVSelected)
12 | +(SCNNode*)yvselectedNodeWithwidth:(CGFloat)width height:(CGFloat)height
13 | {
14 | SCNPlane *planeMirror =[SCNPlane planeWithWidth:width height:height];
15 | planeMirror.firstMaterial.diffuse.contents = YVTHEME_NODE_HIGHLIGHTCOLOR;
16 | planeMirror.firstMaterial.doubleSided = YES;
17 | // planeMirror.firstMaterial.writesToDepthBuffer = NO;
18 | // planeMirror.firstMaterial.readsFromDepthBuffer = NO;
19 | SCNNode *planeMirrorNode = [SCNNode nodeWithGeometry:planeMirror];
20 | planeMirrorNode.opacity = 0.8;
21 | planeMirrorNode.hidden = YES;
22 | planeMirrorNode.categoryBitMask = YVHitTestOptionCategoryBitMask2SelectedIndicator;
23 | planeMirrorNode.name = YVNodeNameIndicator;
24 |
25 | return planeMirrorNode;
26 | }
27 | @end
28 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/Window/YVWindowController.h:
--------------------------------------------------------------------------------
1 | //
2 | // YVWindowController.h
3 | // YourView
4 | //
5 | // Created by bliss_ddo on 2019/4/24.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface YVWindowController : NSWindowController
14 | @property (weak) IBOutlet NSButton *loadingButton;
15 | @property (weak) IBOutlet NSProgressIndicator *progress;
16 |
17 | -(void)showToolbar:(BOOL)visable;
18 | -(void)updateAppInfo:(NSDictionary*)appinfo;
19 | -(void)updateViewTree:(NSDictionary*)dict;
20 | -(void)configureSplit;
21 |
22 | -(IBAction)onDisplayModeSegmentEvent:(NSSegmentedControl*)sender;
23 | -(IBAction)onSplitSegmentEvent:(NSSegmentedControl*)sender;
24 | -(IBAction)onDisplayCheckboxEvent:(NSButton*)sender;
25 | -(IBAction)onRefreshButtonEvent:(NSButton*)sender;
26 | -(IBAction)onResetButtonEvent:(NSButton*)sender;
27 | -(IBAction)onJSPatchButtonEvent:(NSButton*)sender;
28 |
29 |
30 | @property (nonatomic) NSString * host;
31 | @end
32 |
33 | NS_ASSUME_NONNULL_END
34 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/Controller/script/YVScriptEditorViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // YVScriptEditorViewController.m
3 | // YourView
4 | //
5 | // Created by bliss_ddo on 2019/4/30.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import "YVScriptEditorViewController.h"
10 |
11 | @implementation YVScriptEditorViewController
12 | -(IBAction)onSendingEvent:(NSButton*)sender
13 | {
14 | NSLog(@"%@",NSStringFromSelector(_cmd));
15 | if (!self.tv.string) {
16 | return;
17 | }
18 | NSURL * url = [NSURL URLWithString:[NSString stringWithFormat:@"http://%@:8080?cmd=jspatch",self.host]];
19 | NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:url];
20 | request.HTTPBody = [self.tv.string dataUsingEncoding:NSUTF8StringEncoding];
21 | request.HTTPMethod = @"POST";
22 | [request addValue:@"text/text" forHTTPHeaderField:@"Content-Type"];
23 | [[[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
24 |
25 | }]resume];
26 | }
27 | @end
28 |
--------------------------------------------------------------------------------
/iOS/libyourview/serializer/NSObject+YVNodeInfo.m:
--------------------------------------------------------------------------------
1 | //
2 | // NSObject+YVNodeInfo.m
3 | // libyourview
4 | //
5 | // Created by bliss_ddo on 2019/4/24.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import "NSObject+YVNodeInfo.h"
10 |
11 | @implementation NSObject (YVNodeInfo)
12 | -(NSDictionary*)nodeInfo
13 | {
14 | NSString * _class = [self _class];
15 | NSString * _address = [self _address];
16 | NSString * _inherit = [self _inherit];
17 |
18 | return @{
19 | @"class":_class,
20 | @"address":_address,
21 | @"inherit":_inherit,
22 | };
23 | }
24 |
25 | -(NSString*)_class
26 | {
27 | return NSStringFromClass(self.class);
28 | }
29 |
30 | -(NSString*)_inherit
31 | {
32 | NSString * inherit = @"";
33 | Class c = self.class;
34 | while (c) {
35 | inherit = [NSString stringWithFormat:@"%@:%@",inherit,NSStringFromClass(c.class)];
36 | c = c.superclass;
37 | }
38 | return [inherit substringFromIndex:1];
39 | }
40 |
41 | -(NSString*)_address
42 | {
43 | return [NSString stringWithFormat:@"%p",self];
44 | }
45 | @end
46 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/view/cell/YVRightCellBase.m:
--------------------------------------------------------------------------------
1 | //
2 | // YVRightCellBase.m
3 | // YourView
4 | //
5 | // Created by bliss_ddo on 2019/5/6.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import "YVRightCellBase.h"
10 |
11 | @implementation YVRightCellBase
12 |
13 | -(void)awakeFromNib
14 | {
15 | self.layer.backgroundColor = [NSColor clearColor].CGColor;
16 | }
17 |
18 | +(NSView*)makeView:(NSTableView*)tableView owner:(id)owner identifer:(NSString*)identifer
19 | {
20 | YVRightCellBase * t = [tableView makeViewWithIdentifier:identifer owner:owner];
21 | if (t == nil) {
22 | NSArray * bundleviews;
23 | [[NSBundle mainBundle]loadNibNamed:identifer owner:owner topLevelObjects:&bundleviews];
24 | for (id object in bundleviews) {
25 | if ([object isKindOfClass:[NSView class]]) {
26 | t = object;
27 | break;
28 | }
29 | }
30 | }
31 | return t;
32 | }
33 |
34 | -(void)fillData:(id)data
35 | {
36 |
37 | }
38 |
39 | - (void)drawRect:(NSRect)dirtyRect {
40 | [super drawRect:dirtyRect];
41 |
42 | // Drawing code here.
43 | }
44 |
45 | @end
46 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIconFile
10 |
11 | CFBundleIdentifier
12 | $(PRODUCT_BUNDLE_IDENTIFIER)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | $(PRODUCT_NAME)
17 | CFBundlePackageType
18 | APPL
19 | CFBundleShortVersionString
20 | 1.0
21 | CFBundleVersion
22 | 1
23 | LSMinimumSystemVersion
24 | $(MACOSX_DEPLOYMENT_TARGET)
25 | NSHumanReadableCopyright
26 | Copyright © 2019 bliss_ddo. All rights reserved.
27 | NSMainStoryboardFile
28 | Main
29 | NSPrincipalClass
30 | NSApplication
31 |
32 |
33 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/helper/SCNNode+YVVisual.m:
--------------------------------------------------------------------------------
1 | //
2 | // SCNNode+YVVisual.m
3 | // YourView
4 | //
5 | // Created by bliss_ddo on 2019/5/5.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import "SCNNode+YVVisual.h"
10 |
11 | @implementation SCNNode (YVVisual)
12 | -(void)hover
13 | {
14 | SCNNode * borderChild = [self childNodeWithName:YVNodeNameBorder recursively:YES];
15 | if (borderChild) {
16 | borderChild.geometry.firstMaterial.diffuse.contents = YVTHEME_NODE_HOVERBORDERCOLOR;
17 | }
18 | }
19 | -(void)unhover
20 | {
21 | SCNNode * borderChild = [self childNodeWithName:YVNodeNameBorder recursively:YES];
22 | if (borderChild) {
23 | borderChild.geometry.firstMaterial.diffuse.contents = YVTHEME_NODE_HOVERBORDERNORMALCOLOR;
24 | }
25 | }
26 |
27 | -(void)highlight
28 | {
29 | SCNNode * indicator = [self childNodeWithName:YVNodeNameIndicator recursively:YES];
30 | if (indicator) {
31 | indicator.hidden = NO;
32 | }
33 | }
34 | -(void)lowlight
35 | {
36 | SCNNode * indicator = [self childNodeWithName:YVNodeNameIndicator recursively:YES];
37 | if (indicator) {
38 | indicator.hidden = YES;
39 | }
40 | }
41 | @end
42 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/GameAnalytics/TDGAVirtualCurrencyTableViewCell.m:
--------------------------------------------------------------------------------
1 | //
2 | // TDGAVirtualCurrencyTableViewCell.m
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2017/5/22.
6 | // Copyright © 2017年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import "TDGAVirtualCurrencyTableViewCell.h"
10 |
11 | @interface TDGAVirtualCurrencyTableViewCell ()
12 |
13 | @property (weak, nonatomic) IBOutlet UITextField *orderIDField;
14 | @property (weak, nonatomic) IBOutlet UITextField *iapIDField;
15 | @property (weak, nonatomic) IBOutlet UITextField *currencyAmountField;
16 | @property (weak, nonatomic) IBOutlet UITextField *currencyTypeField;
17 | @property (weak, nonatomic) IBOutlet UITextField *virtualCurrencyAmountField;
18 | @property (weak, nonatomic) IBOutlet UITextField *paymentTypeField;
19 | @property (weak, nonatomic) IBOutlet UITextField *rewardVirtualCurrencyAmountField;
20 | @property (weak, nonatomic) IBOutlet UITextField *rewardReasonField;
21 |
22 | @end
23 |
24 | @implementation TDGAVirtualCurrencyTableViewCell
25 |
26 | - (IBAction)chargeRequst {
27 |
28 | }
29 |
30 | - (IBAction)chargeSuccess {
31 | }
32 |
33 | - (IBAction)rewardVirtualCurrency {
34 |
35 | }
36 |
37 | @end
38 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "mac",
5 | "size" : "16x16",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "mac",
10 | "size" : "16x16",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "mac",
15 | "size" : "32x32",
16 | "scale" : "1x"
17 | },
18 | {
19 | "idiom" : "mac",
20 | "size" : "32x32",
21 | "scale" : "2x"
22 | },
23 | {
24 | "idiom" : "mac",
25 | "size" : "128x128",
26 | "scale" : "1x"
27 | },
28 | {
29 | "idiom" : "mac",
30 | "size" : "128x128",
31 | "scale" : "2x"
32 | },
33 | {
34 | "idiom" : "mac",
35 | "size" : "256x256",
36 | "scale" : "1x"
37 | },
38 | {
39 | "idiom" : "mac",
40 | "size" : "256x256",
41 | "scale" : "2x"
42 | },
43 | {
44 | "idiom" : "mac",
45 | "size" : "512x512",
46 | "scale" : "1x"
47 | },
48 | {
49 | "idiom" : "mac",
50 | "size" : "512x512",
51 | "scale" : "2x"
52 | }
53 | ],
54 | "info" : {
55 | "version" : 1,
56 | "author" : "xcode"
57 | }
58 | }
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/Controller/YVHomeViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // YVHomeViewController.m
3 | // YourView
4 | //
5 | // Created by bliss_ddo on 2019/4/24.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import "YVHomeViewController.h"
10 | #import "YVLoadingViewController.h"
11 |
12 | @interface YVHomeViewController ()
13 |
14 | @end
15 |
16 | @implementation YVHomeViewController
17 | -(IBAction)buttonPressed:(NSButton*)btn
18 | {
19 | NSTextField * tf = [self.view viewWithTag:666];
20 | NSString * ip = tf.stringValue;
21 | if (ip) {
22 | [[NSUserDefaults standardUserDefaults]setObject:ip forKey:@"ip"];
23 | }
24 | NSStoryboard * sb = [NSStoryboard storyboardWithName:@"Main" bundle:nil];
25 | YVLoadingViewController * loadingVC =[sb instantiateControllerWithIdentifier:@"loading"];
26 | loadingVC.host = ip;
27 | [NSApp.keyWindow.contentViewController presentViewControllerAsSheet:loadingVC];;
28 | }
29 | -(void)fillIP
30 | {
31 | NSString * ip = [[NSUserDefaults standardUserDefaults]objectForKey:@"ip"];
32 | if (ip) {
33 | NSTextField * tf = [self.view viewWithTag:666];
34 | tf.stringValue = ip;
35 | }
36 | }
37 | - (void)viewDidLoad {
38 | [super viewDidLoad];
39 | [self fillIP];
40 | }
41 |
42 | @end
43 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/helper/YVCGRectHelper.m:
--------------------------------------------------------------------------------
1 | //
2 | // YVCGRectHelper.m
3 | // YourView
4 | //
5 | // Created by bliss_ddo on 2019/4/28.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import "YVCGRectHelper.h"
10 |
11 | @implementation YVCGRectHelper
12 | +(CGRect)CGRectExpand:(CGRect)rect
13 | {
14 | return [self CGRectExpand:rect threashold:YVRectDefaultExpandThreshold];
15 | }
16 |
17 | +(CGRect)CGRectExpand:(CGRect)rect threashold:(CGFloat)threshold
18 | {
19 | CGFloat x = rect.origin.x - threshold / 2;
20 | CGFloat y = rect.origin.y - threshold / 2;
21 | CGFloat w = rect.size.width + threshold;
22 | CGFloat h = rect.size.height + threshold;
23 | return CGRectMake(x, y, w, h);
24 | }
25 |
26 | +(CGRect)UIKitRectTransformToSceneRect:(CGRect)UIKitRect withScreenSize:(CGSize)screenSize;
27 | {
28 | CGFloat x = UIKitRect.origin.x;
29 | CGFloat y = UIKitRect.origin.y;
30 | CGFloat w = UIKitRect.size.width;
31 | CGFloat h = UIKitRect.size.height;
32 | CGFloat xOffSet = -screenSize.width / 2;
33 | CGFloat yOffSet = screenSize.height / 2;
34 | CGFloat x_transformed = (x + w / 2 + xOffSet) ;
35 | CGFloat y_transformed = (-(y + h / 2) + yOffSet) ;
36 | return CGRectMake(x_transformed, y_transformed, w, h);
37 | }
38 |
39 | @end
40 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/helper/SCNNode+YVPlane.m:
--------------------------------------------------------------------------------
1 | //
2 | // SCNNode+plane.m
3 | // YourView
4 | //
5 | // Created by bliss_ddo on 2019/4/28.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import "SCNNode+YVPlane.h"
10 |
11 | @implementation SCNNode (YVPlane)
12 | +(SCNNode*)yvplaneWithWidth:(CGFloat)width height:(CGFloat)height content:(id)content
13 | {
14 | SCNPlane *plane =[SCNPlane planeWithWidth:width height:height];
15 | NSString * snapshot = content;
16 | NSImage *image;
17 | if (snapshot && snapshot.length > 0) {
18 | NSData *imageData = [[NSData alloc] initWithBase64EncodedString:snapshot options:NSDataBase64DecodingIgnoreUnknownCharacters];
19 | image =[[NSImage alloc]initWithData:imageData];
20 | }
21 | if (image) {
22 | plane.firstMaterial.diffuse.contents = image;
23 | }else{
24 | plane.firstMaterial.diffuse.contents = [NSColor clearColor];
25 | }
26 | plane.firstMaterial.doubleSided = YES;
27 | // plane.firstMaterial.writesToDepthBuffer = NO;
28 | // plane.firstMaterial.readsFromDepthBuffer = NO;
29 | SCNNode *planeNode = [SCNNode nodeWithGeometry:plane];
30 | planeNode.categoryBitMask = YVHitTestOptionCategoryBitMaskPlaneNode;
31 | planeNode.name = YVNodeNamePlane;
32 | return planeNode;
33 | }
34 | @end
35 |
--------------------------------------------------------------------------------
/iOS/libyourview/serializer/UIView+YVViewTree.m:
--------------------------------------------------------------------------------
1 | //
2 | // UIView+YVViewTree.m
3 | // libyourview
4 | //
5 | // Created by bliss_ddo on 2019/4/24.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import "UIView+YVViewTree.h"
10 | #import "UIView+YVTraversal.h"
11 | #import "YVTraversalStepin.h"
12 | #import "YVTraversalContext.h"
13 | #import "YVObjectManager.h"
14 |
15 | @implementation UIView (YVViewTree)
16 |
17 | +(UIView*)_defaultRootView
18 | {
19 | return [UIApplication sharedApplication].keyWindow;
20 | }
21 |
22 | +(NSString*)rootViewTreeString
23 | {
24 | NSData * viewtreedata = [NSJSONSerialization dataWithJSONObject:[self rootViewTreeDictionary] options:0 error:nil];
25 | return [[NSString alloc]initWithData:viewtreedata encoding:NSUTF8StringEncoding];
26 | }
27 | +(NSDictionary*)rootViewTreeDictionary
28 | {
29 | YVTraversalStepin * stepIn = [[YVTraversalStepin alloc]init];
30 | YVTraversalContext * context = [[YVTraversalContext alloc]init];
31 | NSDictionary * viewtree = [[UIView _defaultRootView]traversal:stepIn context:context];
32 | NSDictionary * extraInfo = [context contextDict];
33 | [YVObjectManager sharedInstance].context = context;
34 | return @{
35 | @"viewtree":viewtree,
36 | @"extrainfo":extraInfo,
37 | };
38 | }
39 | @end
40 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/AppAnalytics/TDAACustomViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // TDAACustomViewController.m
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2017/5/22.
6 | // Copyright © 2017年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import "TDAACustomViewController.h"
10 |
11 | @interface TDAACustomViewController ()
12 |
13 | @property (weak, nonatomic) IBOutlet UITextField *eventIDField;
14 | @property (weak, nonatomic) IBOutlet UITextField *eventLableField;
15 | @property (weak, nonatomic) IBOutlet UITextField *key1Field;
16 | @property (weak, nonatomic) IBOutlet UITextField *value1Field;
17 | @property (weak, nonatomic) IBOutlet UITextField *key2Field;
18 | @property (weak, nonatomic) IBOutlet UITextField *value2Field;
19 |
20 | @end
21 |
22 | @implementation TDAACustomViewController
23 |
24 | - (IBAction)submit:(UIButton *)sender {
25 | if (self.eventIDField.text.length == 0) {
26 | return;
27 | }
28 |
29 | NSMutableDictionary *eventData = [NSMutableDictionary dictionary];
30 | if (self.key1Field.text.length > 0 && self.value1Field.text.length > 0) {
31 | [eventData setObject:self.value1Field.text forKey:self.key1Field.text];
32 | }
33 | if (self.key2Field.text.length > 0 && self.value2Field.text.length > 0) {
34 | [eventData setObject:self.value2Field.text forKey:self.key2Field.text];
35 | }
36 |
37 |
38 | }
39 |
40 | @end
41 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/IQKeyboardManager/IQToolbar/IQPreviousNextView.m:
--------------------------------------------------------------------------------
1 | //
2 | // IQPreviousNextView.m
3 | // https://github.com/hackiftekhar/IQKeyboardManager
4 | // Copyright (c) 2013-16 Iftekhar Qurashi.
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 |
24 | #import "IQPreviousNextView.h"
25 |
26 | @implementation IQPreviousNextView
27 |
28 | @end
29 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/view/cell/YVRightCellViewFrame.m:
--------------------------------------------------------------------------------
1 | //
2 | // YVRightCellViewFrame.m
3 | // YourView
4 | //
5 | // Created by bliss_ddo on 2019/5/6.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import "YVRightCellViewFrame.h"
10 |
11 | @implementation YVRightCellViewFrame
12 |
13 | - (void)drawRect:(NSRect)dirtyRect {
14 | [super drawRect:dirtyRect];
15 |
16 | // Drawing code here.
17 | }
18 |
19 |
20 | -(void)fillData:(NSDictionary*)data
21 | {
22 | NSString * frameStr = data[@"localframe"];
23 | CGRect frame = NSRectFromString(frameStr);
24 | self.fieldx.floatValue = frame.origin.x;
25 | self.stepperx.floatValue = frame.origin.x;
26 | self.fieldy.floatValue = frame.origin.y;
27 | self.steppery.floatValue = frame.origin.y;
28 | self.fieldw.floatValue = frame.size.width;
29 | self.stepperw.floatValue = frame.size.width;
30 | self.fieldh.floatValue = frame.size.height;
31 | self.stepperh.floatValue = frame.size.height;
32 | }
33 | - (IBAction)setFrameButtonPressed:(id)sender {
34 | if (self.delegate && [self.delegate respondsToSelector:@selector(cellDidClick:withData:cmd:)]) {
35 | CGRect frame = CGRectMake(self.fieldx.floatValue, self.fieldy.floatValue, self.fieldw.floatValue, self.fieldh.floatValue);
36 | NSString * framestring = NSStringFromRect(frame);
37 | [self.delegate cellDidClick:self withData:framestring cmd:@"setframe"];
38 | }
39 | }
40 | @end
41 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/IQKeyboardManager/IQToolbar/IQBarButtonItem.h:
--------------------------------------------------------------------------------
1 | //
2 | // IQBarButtonItem.h
3 | // https://github.com/hackiftekhar/IQKeyboardManager
4 | // Copyright (c) 2013-16 Iftekhar Qurashi.
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 |
24 |
25 | #import
26 |
27 | /**
28 | IQBarButtonItem used for IQToolbar.
29 | */
30 | @interface IQBarButtonItem : UIBarButtonItem
31 |
32 | @end
33 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/define/defines.h:
--------------------------------------------------------------------------------
1 | //
2 | // defines.h
3 | // YourView
4 | //
5 | // Created by bliss_ddo on 2019/4/28.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #ifndef defines_h
10 | #define defines_h
11 | #import
12 |
13 | typedef enum:NSInteger {
14 | YVWindowDisplayStatusHome,
15 | YVWindowDisplayStatusInspect,
16 | }YVWindowDisplayStatus;
17 |
18 | typedef enum:NSInteger {
19 | YVSceneViewDisplayModeNone = -1,
20 | YVSceneViewDisplayModeDeepsFirst,
21 | YVSceneViewDisplayModeSmart,
22 | YVSceneViewDisplayModeFlatten,
23 | }YVSceneViewDisplayMode;
24 |
25 | static NSString * const YVViewTreeDidLoadNotificationName = @"YVViewTreeDidLoadNotificationName";
26 | static NSString * const YVSelectionChangeMiddleToLeft = @"YVSelectionChangeMiddleToLeft";
27 | static NSString * const YVSelectionChangeLeftToMiddle = @"YVSelectionChangeLeftToMiddle";
28 | static NSString * const YVSelectionChangeLeftToRight = @"YVSelectionChangeLeftToRight";
29 | static NSString * const YVNodeNamePlane = @"YVNodeNamePlane";
30 | static NSString * const YVNodeNameIndicator = @"YVNodeNameIndicator";
31 | static NSString * const YVNodeNameCamera = @"YVNodeNameCamera";
32 | static NSString * const YVNodeNameBorder = @"YVNodeNameBorder";
33 |
34 | static NSInteger const YVHitTestOptionCategoryBitMaskPlaneNode = 1<<1;
35 | static NSInteger const YVHitTestOptionCategoryBitMask2SelectedIndicator = 1<<2;
36 | static NSInteger const YVHitTestOptionCategoryBitMask3HoverBorder = 1<<3;
37 |
38 | static CGFloat const YVRectDefaultExpandThreshold = 1.0f;
39 |
40 |
41 | #endif /* defines_h */
42 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/IQKeyboardManager/IQToolbar/IQPreviousNextView.h:
--------------------------------------------------------------------------------
1 | //
2 | // IQPreviousNextView.h
3 | // https://github.com/hackiftekhar/IQKeyboardManager
4 | // Copyright (c) 2013-16 Iftekhar Qurashi.
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 |
24 | #import
25 |
26 | /**
27 | If you need to enable previous/next toolbar button with some complex hierarchy where your textFields are not in same view, then make the top view as IQPreviousNextView.
28 | */
29 | @interface IQPreviousNextView : UIView
30 |
31 | @end
32 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/IQKeyboardManager/Categories/IQUIScrollView+Additions.h:
--------------------------------------------------------------------------------
1 | //
2 | // IQUIScrollView+Additions.h
3 | // https://github.com/hackiftekhar/IQKeyboardManager
4 | // Copyright (c) 2013-16 Iftekhar Qurashi.
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 |
24 | #import
25 |
26 |
27 | @interface UIScrollView (Additions)
28 |
29 | /**
30 | Restore scrollViewContentOffset when resigning from scrollView. Default is NO.
31 | */
32 | @property(nonatomic, assign) BOOL shouldRestoreScrollViewContentOffset;
33 |
34 |
35 | @end
36 |
--------------------------------------------------------------------------------
/iOS/libyourview/serializer/YVTraversalContext.m:
--------------------------------------------------------------------------------
1 | //
2 | // YVTraversalContext.m
3 | // libyourview
4 | //
5 | // Created by bliss_ddo on 2019/4/24.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import "YVTraversalContext.h"
10 |
11 |
12 |
13 | @implementation YVTraversalContext
14 | @synthesize objectCounter = _objectCounter;
15 | @synthesize hidenObjectCounter = _hidenObjectCounter;
16 | @synthesize notHidenObjectCounter = _notHidenObjectCounter;
17 |
18 | -(instancetype)init
19 | {
20 | if (self = [super init]) {
21 | _objectCounter = 0;
22 | _hidenObjectCounter = 0;
23 | _notHidenObjectCounter = 0;
24 | _viewMap = [NSMapTable mapTableWithKeyOptions:NSMapTableCopyIn valueOptions:NSMapTableWeakMemory];
25 | }
26 | return self;
27 | }
28 |
29 | -(NSInteger)objectCounter
30 | {
31 | return _objectCounter;
32 | }
33 |
34 | -(NSInteger)hidenObjectCounter
35 | {
36 | return _hidenObjectCounter;
37 | }
38 |
39 | -(NSInteger)notHidenObjectCounter
40 | {
41 | return _notHidenObjectCounter;
42 | }
43 |
44 | -(void)updateFromView:(UIView*)v
45 | {
46 | _objectCounter++;
47 | if (v.hidden) {
48 | _hidenObjectCounter++;
49 | }else{
50 | _notHidenObjectCounter++;
51 | }
52 | NSString * memoryKey = [NSString stringWithFormat:@"%p",v];
53 | [self.viewMap setObject:v forKey:memoryKey];
54 | }
55 |
56 | -(NSDictionary *)contextDict
57 | {
58 |
59 | return @{
60 | @"screeninfo":NSStringFromCGRect([UIScreen mainScreen].bounds),
61 | @"totalcount":@(_objectCounter),
62 | };
63 | }
64 |
65 | @end
66 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/helper/SCNNode+YVBorder.m:
--------------------------------------------------------------------------------
1 | //
2 | // SCNNode+border.m
3 | // YourView
4 | //
5 | // Created by bliss_ddo on 2019/4/28.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import "SCNNode+YVBorder.h"
10 |
11 | @implementation SCNNode (YVBorder)
12 | +(SCNNode*)borderNodeWithPlane:(SCNNode*)planeNode
13 | {
14 | SCNVector3 max,min;
15 | [planeNode getBoundingBoxMin:&min max:&max];
16 | CGFloat xx = max.x - min.x;
17 | CGFloat yy = max.y - min.y;
18 | SCNVector3 vec[] =
19 | {
20 | max,
21 | SCNVector3Make(max.x, max.y-yy, max.z),
22 | SCNVector3Make(max.x-xx, max.y-yy, max.z),
23 | SCNVector3Make(max.x-xx, max.y, max.z),
24 | };
25 | GLubyte indexs[] ={
26 | 0,1,1,2,2,3,3,0
27 | };
28 | SCNGeometrySource * vecSource = [SCNGeometrySource geometrySourceWithVertices:vec count:4];
29 | NSData * indexData = [NSData dataWithBytes:indexs length:8];
30 | SCNGeometryElement * indexElement = [SCNGeometryElement geometryElementWithData:indexData primitiveType:SCNGeometryPrimitiveTypeLine primitiveCount:4 bytesPerIndex:sizeof(GLubyte)];
31 | SCNGeometry * geometry = [SCNGeometry geometryWithSources:@[vecSource] elements:@[indexElement]];
32 | geometry.firstMaterial.diffuse.contents = [NSColor colorWithRed:215.f/255.f green:215.f/255.f blue:215.f/255.f alpha:1];
33 | geometry.firstMaterial.doubleSided = YES;
34 | SCNNode * borderNode = [SCNNode nodeWithGeometry:geometry];
35 | borderNode.name = YVNodeNameBorder;
36 | borderNode.categoryBitMask = YVHitTestOptionCategoryBitMask3HoverBorder;
37 | return borderNode;
38 | }
39 | @end
40 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/helper/YVNodeBackTracking.m:
--------------------------------------------------------------------------------
1 | //
2 | // YVNodeBackTracking.m
3 | // YourView
4 | //
5 | // Created by bliss_ddo on 2019/4/28.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import "YVNodeBackTracking.h"
10 | #import "YVCGRectHelper.h"
11 |
12 | @implementation YVNodeBackTracking
13 | +(NSInteger)findBestZFromlevelDict:(NSMutableDictionary*)levelDict minDepth:(NSInteger)minDeepth maxDepth:(NSInteger)maxDeepth frame:(CGRect)crect
14 | {
15 | CGRect crect_expand = [YVCGRectHelper CGRectExpand:crect];
16 | NSInteger bestZ = 0;
17 | while (YES) {
18 | if (maxDeepth < 0 || maxDeepth < minDeepth) {
19 | break;
20 | }
21 | NSMutableArray * levelArray = levelDict[@(maxDeepth)];
22 | if (levelArray == nil) {
23 | bestZ = maxDeepth--;
24 | }else{
25 | BOOL hit = NO;
26 | for (NSValue * eachValue in levelArray) {
27 | CGRect eachFrame;
28 | [eachValue getValue:&eachFrame size:sizeof(CGRect)];
29 | if (CGRectIntersectsRect(crect_expand, eachFrame)) {
30 | hit = YES;
31 | break;
32 | }
33 | }
34 | if (hit) {
35 | break;
36 | }
37 | bestZ = maxDeepth--;
38 | }
39 | }
40 | NSMutableArray * levelArray = levelDict[@(bestZ)];
41 | if (!levelArray) {
42 | levelArray = [NSMutableArray array];
43 | levelDict[@(bestZ)] = levelArray;
44 | }
45 | [levelArray addObject:[NSValue valueWithRect:crect]];
46 | return bestZ;
47 | }
48 | @end
49 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/IQKeyboardManager/Categories/IQUIViewController+Additions.h:
--------------------------------------------------------------------------------
1 | //
2 | // IQUIViewController+Additions.h
3 | // https://github.com/hackiftekhar/IQKeyboardManager
4 | // Copyright (c) 2013-16 Iftekhar Qurashi.
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 |
24 | #import
25 |
26 | @interface UIViewController (Additions)
27 |
28 | /**
29 | Top/Bottom Layout constraint which help library to manage keyboardTextField distance
30 | */
31 | @property(nullable, nonatomic, strong) IBOutlet NSLayoutConstraint *IQLayoutGuideConstraint;
32 |
33 | @end
34 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView.xcodeproj/xcuserdata/bliss_ddo.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
8 |
20 |
21 |
22 |
24 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | zh_CN
7 | CFBundleDisplayName
8 | TD SDK Demo
9 | CFBundleExecutable
10 | $(EXECUTABLE_NAME)
11 | CFBundleIdentifier
12 | $(PRODUCT_BUNDLE_IDENTIFIER)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | $(PRODUCT_NAME)
17 | CFBundlePackageType
18 | APPL
19 | CFBundleShortVersionString
20 | 1.1
21 | CFBundleVersion
22 | 1
23 | LSRequiresIPhoneOS
24 |
25 | NSLocationWhenInUseUsageDescription
26 | TalkingData SDK Demo需要获取您的位置信息
27 | UILaunchStoryboardName
28 | LaunchScreen
29 | UIMainStoryboardFile
30 | Main
31 | UIRequiredDeviceCapabilities
32 |
33 | armv7
34 |
35 | UISupportedInterfaceOrientations
36 |
37 | UIInterfaceOrientationPortrait
38 | UIInterfaceOrientationLandscapeLeft
39 | UIInterfaceOrientationLandscapeRight
40 |
41 | UISupportedInterfaceOrientations~ipad
42 |
43 | UIInterfaceOrientationPortrait
44 | UIInterfaceOrientationPortraitUpsideDown
45 | UIInterfaceOrientationLandscapeLeft
46 | UIInterfaceOrientationLandscapeRight
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/IQKeyboardManager/Categories/IQUIViewController+Additions.m:
--------------------------------------------------------------------------------
1 | //
2 | // IQUIViewController+Additions.m
3 | // https://github.com/hackiftekhar/IQKeyboardManager
4 | // Copyright (c) 2013-16 Iftekhar Qurashi.
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 |
24 | #import "IQUIViewController+Additions.h"
25 | #import
26 |
27 | @implementation UIViewController (Additions)
28 |
29 | -(void)setIQLayoutGuideConstraint:(NSLayoutConstraint *)IQLayoutGuideConstraint
30 | {
31 | objc_setAssociatedObject(self, @selector(IQLayoutGuideConstraint), IQLayoutGuideConstraint, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
32 | }
33 |
34 | -(NSLayoutConstraint *)IQLayoutGuideConstraint
35 | {
36 | return objc_getAssociatedObject(self, @selector(IQLayoutGuideConstraint));
37 | }
38 |
39 | @end
40 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/IQKeyboardManager/Categories/IQNSArray+Sort.h:
--------------------------------------------------------------------------------
1 | //
2 | // NSArray+Sort.h
3 | // https://github.com/hackiftekhar/IQKeyboardManager
4 | // Copyright (c) 2013-16 Iftekhar Qurashi.
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 |
24 | #import
25 |
26 | /**
27 | UIView.subviews sorting category.
28 | */
29 | @interface NSArray (IQ_NSArray_Sort)
30 |
31 | ///--------------
32 | /// @name Sorting
33 | ///--------------
34 |
35 | /**
36 | Returns the array by sorting the UIView's by their tag property.
37 | */
38 | @property (nonatomic, readonly, copy) NSArray * _Nonnull sortedArrayByTag;
39 |
40 | /**
41 | Returns the array by sorting the UIView's by their tag property.
42 | */
43 | @property (nonatomic, readonly, copy) NSArray * _Nonnull sortedArrayByPosition;
44 |
45 | @end
46 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/IQKeyboardManager/Categories/IQUITextFieldView+Additions.h:
--------------------------------------------------------------------------------
1 | //
2 | // IQUITextFieldView+Additions.h
3 | // https://github.com/hackiftekhar/IQKeyboardManager
4 | // Copyright (c) 2013-16 Iftekhar Qurashi.
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 |
24 | #import
25 |
26 | /**
27 | UIView category for managing UITextField/UITextView
28 | */
29 |
30 | @interface UIView (Additions)
31 |
32 | /**
33 | To set customized distance from keyboard for textField/textView. Can't be less than zero
34 | */
35 | @property(nonatomic, assign) CGFloat keyboardDistanceFromTextField;
36 |
37 | @end
38 |
39 | ///-------------------------------------------
40 | /// @name Custom KeyboardDistanceFromTextField
41 | ///-------------------------------------------
42 |
43 | /**
44 | Uses default keyboard distance for textField.
45 | */
46 | extern CGFloat const kIQUseDefaultKeyboardDistance;
47 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/IQKeyboardManager/Categories/IQUIScrollView+Additions.m:
--------------------------------------------------------------------------------
1 | //
2 | // IQUIScrollView+Additions.m
3 | // https://github.com/hackiftekhar/IQKeyboardManager
4 | // Copyright (c) 2013-16 Iftekhar Qurashi.
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 |
24 | #import "IQUIScrollView+Additions.h"
25 | #import
26 |
27 | @implementation UIScrollView (Additions)
28 |
29 | -(void)setShouldRestoreScrollViewContentOffset:(BOOL)shouldRestoreScrollViewContentOffset
30 | {
31 | objc_setAssociatedObject(self, @selector(shouldRestoreScrollViewContentOffset), @(shouldRestoreScrollViewContentOffset), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
32 | }
33 |
34 | -(BOOL)shouldRestoreScrollViewContentOffset
35 | {
36 | NSNumber *shouldRestoreScrollViewContentOffset = objc_getAssociatedObject(self, @selector(shouldRestoreScrollViewContentOffset));
37 |
38 | return [shouldRestoreScrollViewContentOffset boolValue];
39 | }
40 |
41 | @end
42 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/view/cell/YVRightCellViewInfo.m:
--------------------------------------------------------------------------------
1 | //
2 | // YVRightCellViewInfo.m
3 | // YourView
4 | //
5 | // Created by bliss_ddo on 2019/5/6.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import "YVRightCellViewInfo.h"
10 |
11 | @implementation YVRightCellViewInfo
12 |
13 | -(void)fillData:(NSDictionary*)data
14 | {
15 | NSString * address = data[@"address"];
16 | NSString * class = data[@"class"];
17 | NSString * vc = data[@"assign_to_viewcontroller"];
18 | NSString * level =data[@"view_level"];
19 | NSNumber * depth = data[@"view_deepth"];
20 | NSNumber * isintable = data[@"is_in_tableview"];
21 | NSNumber * isincollection = data[@"is_in_collectionview"];
22 | NSString * indexrow = data[@"index_row"];
23 | NSString * indexsection = data[@"index_section"];
24 | NSString * inherit = data[@"inherit"];
25 | self.addressfield.stringValue = [NSString stringWithFormat:@"%@",address];
26 | self.classfield.stringValue = [NSString stringWithFormat:@"%@",class];
27 | self.viewcontrollerfield.stringValue = [NSString stringWithFormat:@"%@",vc];
28 | self.levelfield.stringValue = [NSString stringWithFormat:@"%@",level];
29 | self.depthfield.stringValue = [NSString stringWithFormat:@"%@",depth];
30 | self.isintablefield.stringValue = [NSString stringWithFormat:@"%@",isintable];
31 | self.isincollectionfield.stringValue = [NSString stringWithFormat:@"%@",isincollection];
32 | self.indexpathfield.stringValue = [NSString stringWithFormat:@"(%@,%@)",indexsection,indexrow];
33 | self.inheritfield.stringValue = [NSString stringWithFormat:@"%@",inherit];
34 |
35 | }
36 | -(IBAction)hereButtonPressed:(NSButton*)sender
37 | {
38 | NSLog(@"btn pressed");
39 | if (self.delegate && [self.delegate respondsToSelector:@selector(cellDidClick:withData:cmd:)]) {
40 | [self.delegate cellDidClick:self withData:nil cmd:@"shake"];
41 | }
42 | }
43 | - (void)drawRect:(NSRect)dirtyRect {
44 | [super drawRect:dirtyRect];
45 |
46 | // Drawing code here.
47 | }
48 |
49 | @end
50 |
--------------------------------------------------------------------------------
/MacOS/YourView/YourView/YourView.pch:
--------------------------------------------------------------------------------
1 | //
2 | // YourView.pch
3 | // YourView
4 | //
5 | // Created by bliss_ddo on 2019/4/25.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #ifndef YourView_pch
10 | #define YourView_pch
11 |
12 | #ifdef DEBUG
13 | #define NSLog(FORMAT, ...) fprintf(stderr,"%s:%d\t%s\n",[[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], __LINE__, [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);
14 | #else
15 | #define NSLog(FORMAT, ...) nil
16 | #endif
17 |
18 |
19 |
20 | #ifndef weakify
21 | #if DEBUG
22 | #if __has_feature(objc_arc)
23 | #define weakify(object) autoreleasepool{} __weak __typeof__(object) weak##_##object = object;
24 | #else
25 | #define weakify(object) autoreleasepool{} __block __typeof__(object) block##_##object = object;
26 | #endif
27 | #else
28 | #if __has_feature(objc_arc)
29 | #define weakify(object) try{} @finally{} {} __weak __typeof__(object) weak##_##object = object;
30 | #else
31 | #define weakify(object) try{} @finally{} {} __block __typeof__(object) block##_##object = object;
32 | #endif
33 | #endif
34 | #endif
35 |
36 | #ifndef strongify
37 | #if DEBUG
38 | #if __has_feature(objc_arc)
39 | #define strongify(object) autoreleasepool{} __typeof__(object) object = weak##_##object;
40 | #else
41 | #define strongify(object) autoreleasepool{} __typeof__(object) object = block##_##object;
42 | #endif
43 | #else
44 | #if __has_feature(objc_arc)
45 | #define strongify(object) try{} @finally{} __typeof__(object) object = weak##_##object;
46 | #else
47 | #define strongify(object) try{} @finally{} __typeof__(object) object = block##_##object;
48 | #endif
49 | #endif
50 | #endif
51 |
52 | /**
53 | * Creates an opaque UIColor object from a byte-value color definition.
54 | */
55 | #define RGBCOLOR(r,g,b) [NSColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:1]
56 |
57 | /**
58 | * Creates a UIColor object from a byte-value color definition and alpha transparency.
59 | */
60 | #define RGBACOLOR(r,g,b,a) [NSColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:(a)]
61 |
62 | #import "YVTheme.h"
63 | #import "defines.h"
64 |
65 | #endif /* YourView_pch */
66 |
--------------------------------------------------------------------------------
/iOS/libyourview/vendor/GCDWebServer/Requests/GCDWebServerFileRequest.h:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright (c) 2012-2019, Pierre-Olivier Latour
3 | All rights reserved.
4 |
5 | Redistribution and use in source and binary forms, with or without
6 | modification, are permitted provided that the following conditions are met:
7 | * Redistributions of source code must retain the above copyright
8 | notice, this list of conditions and the following disclaimer.
9 | * Redistributions in binary form must reproduce the above copyright
10 | notice, this list of conditions and the following disclaimer in the
11 | documentation and/or other materials provided with the distribution.
12 | * The name of Pierre-Olivier Latour may not be used to endorse
13 | or promote products derived from this software without specific
14 | prior written permission.
15 |
16 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
17 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 | DISCLAIMED. IN NO EVENT SHALL PIERRE-OLIVIER LATOUR BE LIABLE FOR ANY
20 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 | */
27 |
28 | #import "GCDWebServerRequest.h"
29 |
30 | NS_ASSUME_NONNULL_BEGIN
31 |
32 | /**
33 | * The GCDWebServerFileRequest subclass of GCDWebServerRequest stores the body
34 | * of the HTTP request to a file on disk.
35 | */
36 | @interface GCDWebServerFileRequest : GCDWebServerRequest
37 |
38 | /**
39 | * Returns the path to the temporary file containing the request body.
40 | *
41 | * @warning This temporary file will be automatically deleted when the
42 | * GCDWebServerFileRequest is deallocated. If you want to preserve this file,
43 | * you must move it to a different location beforehand.
44 | */
45 | @property(nonatomic, readonly) NSString* temporaryPath;
46 |
47 | @end
48 |
49 | NS_ASSUME_NONNULL_END
50 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/IQKeyboardManager/IQToolbar/IQToolbar.h:
--------------------------------------------------------------------------------
1 | //
2 | // IQToolbar.h
3 | // https://github.com/hackiftekhar/IQKeyboardManager
4 | // Copyright (c) 2013-16 Iftekhar Qurashi.
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 |
24 | #import
25 |
26 | /**
27 | IQToolbar for IQKeyboardManager.
28 | */
29 | @interface IQToolbar : UIToolbar
30 |
31 | /**
32 | Title font for toolbar.
33 | */
34 | @property(nullable, nonatomic, strong) UIFont *titleFont;
35 |
36 | /**
37 | Toolbar done title
38 | */
39 | @property(nullable, nonatomic, strong) NSString *doneTitle;
40 |
41 | /**
42 | Toolbar done image
43 | */
44 | @property(nullable, nonatomic, strong) UIImage *doneImage;
45 |
46 | /**
47 | Toolbar title
48 | */
49 | @property(nullable, nonatomic, strong) NSString *title;
50 |
51 | /**
52 | Optional target & action to behave toolbar title button as clickable button
53 |
54 | @param target Target object.
55 | @param action Target Selector.
56 | */
57 | -(void)setTitleTarget:(nullable id)target action:(nullable SEL)action;
58 |
59 | /**
60 | Customized Invocation to be called on title button action. titleInvocation is internally created using setTitleTarget:action: method.
61 | */
62 | @property (nullable, strong, nonatomic) NSInvocation *titleInvocation;
63 |
64 | @end
65 |
66 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | **YourView** is a desktop App in MacOS. You can use it to view iOS App's view hierarchy. I think it could be a `basic project` in app view visualization. Depend on it, you may do your add-on functions's development such as visual tracking like mixpanel, iOS reverse tool just like reveal, frida, even though, you can develop android studio plugin for view debugging. Now I treat it as a iOS reverse tool. Now it is a version of 0.1, I will maintain continuedly.
2 |
3 | ## Quick Start
4 |
5 | - Open `YourView/iOS/TalkingDataSDKDemo/TalkingDataSDKDemo.xcodeproj`. It's a demo project with the libyourview source code as framework in it. Build and Run,keep the demo app in foreground.
6 |
7 | - Open `YourView/MacOS/YourView/YourView.xcodeproj`.Build and Run.
8 |
9 | 
10 |
11 | - Input IP(only ip,without port and scheme) address ,click connect
12 |
13 | 
14 |
15 | - Enjoy it!
16 |
17 | 
18 |
19 | ## Demo
20 |
21 | Camera control:
22 |
23 | 
24 |
25 |
26 |
27 | Search and Live edit
28 |
29 | 
30 |
31 | ## Tips
32 |
33 | - Now the `libyourview.framework` is build as a static libiary. If you want to get a dynamic libiary,you must change the mach-o type in the project settings and build it by yourself.
34 | - You don't need write any code. Once the framework is loaded,it will start a server automatily
35 | - The iOS UIView serilization operation will block the main thread.It maybe faster in Simulator than iOS devices.
36 |
37 | ## TODO
38 | - Auto network scan using bonjour service like reveal.
39 | - Make the right panel powerful. Now it is hard coded.Make it dynamic,more functions in Object explore just like flex.
40 | - Add the the layout,gesture,viewController infomation to the left tree,just like reveal or Xcode.
41 | - User experience improvment.
42 | - Art works.
43 | - Script editor and inject support,such as JSPatch.
44 | - bug fix.
45 |
46 | ## Explore others App
47 |
48 | - Build this project as a dynamic lib and inject the dynamic lib into others app by using MonkeyDev,IPAPatch,etc. Do it yourself.
49 |
50 | 
51 |
52 |
53 | ## Thanks
54 |
55 | [swisspol/GCDWebServer](https://github.com/swisspol/GCDWebServer ) This project provide a good http service in iOS App.
56 |
57 | ## Links
58 | - [TalkingData](https://github.com/TalkingData)
59 |
60 | ## License
61 |
62 | [LICENSE](./LICENSE)
63 |
64 |
65 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/IQKeyboardManager/Constants/IQKeyboardManagerConstantsInternal.h:
--------------------------------------------------------------------------------
1 | //
2 | // IQKeyboardManagerConstantsInternal.h
3 | // https://github.com/hackiftekhar/IQKeyboardManager
4 | // Copyright (c) 2013-16 Iftekhar Qurashi.
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 |
24 | #ifndef IQKeyboardManagerConstantsInternal_h
25 | #define IQKeyboardManagerConstantsInternal_h
26 |
27 |
28 | ///-----------------------------------
29 | /// @name IQLayoutGuidePosition
30 | ///-----------------------------------
31 |
32 | /**
33 | `IQLayoutGuidePositionNone`
34 | If there are no IQLayoutGuideConstraint associated with viewController
35 |
36 | `IQLayoutGuidePositionTop`
37 | If provided IQLayoutGuideConstraint is associated with with viewController topLayoutGuide
38 |
39 | `IQLayoutGuidePositionBottom`
40 | If provided IQLayoutGuideConstraint is associated with with viewController bottomLayoutGuide
41 | */
42 | typedef NS_ENUM(NSInteger, IQLayoutGuidePosition) {
43 | IQLayoutGuidePositionNone,
44 | IQLayoutGuidePositionTop,
45 | IQLayoutGuidePositionBottom,
46 | };
47 |
48 | //Xcode 8 compatibility check
49 | #ifdef NSFoundationVersionNumber_iOS_9_x_Max
50 | #define IQ_IS_IOS10_OR_GREATER (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_9_x_Max)
51 | #else
52 | #define IQ_IS_IOS10_OR_GREATER NO
53 | #endif
54 |
55 |
56 | #endif
57 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/IQKeyboardManager/Categories/IQUITextFieldView+Additions.m:
--------------------------------------------------------------------------------
1 | //
2 | // IQUITextFieldView+Additions.m
3 | // https://github.com/hackiftekhar/IQKeyboardManager
4 | // Copyright (c) 2013-16 Iftekhar Qurashi.
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 |
24 | #import "IQUITextFieldView+Additions.h"
25 | #import
26 |
27 | @implementation UIView (Additions)
28 |
29 | -(void)setKeyboardDistanceFromTextField:(CGFloat)keyboardDistanceFromTextField
30 | {
31 | //Can't be less than zero. Minimum is zero.
32 | keyboardDistanceFromTextField = MAX(keyboardDistanceFromTextField, 0);
33 |
34 | objc_setAssociatedObject(self, @selector(keyboardDistanceFromTextField), [NSNumber numberWithFloat:keyboardDistanceFromTextField], OBJC_ASSOCIATION_RETAIN_NONATOMIC);
35 | }
36 |
37 | -(CGFloat)keyboardDistanceFromTextField
38 | {
39 | NSNumber *keyboardDistanceFromTextField = objc_getAssociatedObject(self, @selector(keyboardDistanceFromTextField));
40 |
41 | return (keyboardDistanceFromTextField)?[keyboardDistanceFromTextField floatValue]:kIQUseDefaultKeyboardDistance;
42 | }
43 |
44 | @end
45 |
46 | ///------------------------------------
47 | /// @name keyboardDistanceFromTextField
48 | ///------------------------------------
49 |
50 | /**
51 | Uses default keyboard distance for textField.
52 | */
53 | CGFloat const kIQUseDefaultKeyboardDistance = CGFLOAT_MAX;
54 |
55 |
--------------------------------------------------------------------------------
/iOS/libyourview/vendor/GCDWebServer/Requests/GCDWebServerURLEncodedFormRequest.h:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright (c) 2012-2019, Pierre-Olivier Latour
3 | All rights reserved.
4 |
5 | Redistribution and use in source and binary forms, with or without
6 | modification, are permitted provided that the following conditions are met:
7 | * Redistributions of source code must retain the above copyright
8 | notice, this list of conditions and the following disclaimer.
9 | * Redistributions in binary form must reproduce the above copyright
10 | notice, this list of conditions and the following disclaimer in the
11 | documentation and/or other materials provided with the distribution.
12 | * The name of Pierre-Olivier Latour may not be used to endorse
13 | or promote products derived from this software without specific
14 | prior written permission.
15 |
16 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
17 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 | DISCLAIMED. IN NO EVENT SHALL PIERRE-OLIVIER LATOUR BE LIABLE FOR ANY
20 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 | */
27 |
28 | #import "GCDWebServerDataRequest.h"
29 |
30 | NS_ASSUME_NONNULL_BEGIN
31 |
32 | /**
33 | * The GCDWebServerURLEncodedFormRequest subclass of GCDWebServerRequest
34 | * parses the body of the HTTP request as a URL encoded form using
35 | * GCDWebServerParseURLEncodedForm().
36 | */
37 | @interface GCDWebServerURLEncodedFormRequest : GCDWebServerDataRequest
38 |
39 | /**
40 | * Returns the unescaped control names and values for the URL encoded form.
41 | *
42 | * The text encoding used to interpret the data is extracted from the
43 | * "Content-Type" header or defaults to UTF-8.
44 | */
45 | @property(nonatomic, readonly) NSDictionary* arguments;
46 |
47 | /**
48 | * Returns the MIME type for URL encoded forms
49 | * i.e. "application/x-www-form-urlencoded".
50 | */
51 | + (NSString*)mimeType;
52 |
53 | @end
54 |
55 | NS_ASSUME_NONNULL_END
56 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/AppDelegate.m:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.m
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2017/5/22.
6 | // Copyright © 2017年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import "AppDelegate.h"
10 |
11 |
12 | @interface AppDelegate ()
13 | #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 100000
14 |
15 | #endif
16 |
17 | @property (strong, nonatomic) CLLocationManager *locationManager;
18 |
19 | @end
20 |
21 | @implementation AppDelegate
22 |
23 |
24 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
25 | // Override point for customization after application launch.
26 |
27 |
28 |
29 |
30 |
31 | self.locationManager = [[CLLocationManager alloc] init];
32 | _locationManager.delegate = self;
33 | _locationManager.distanceFilter = 10.0;
34 | _locationManager.desiredAccuracy = kCLLocationAccuracyBest;
35 | if ([UIDevice currentDevice].systemVersion.floatValue >= 8.0f) {
36 | [_locationManager requestWhenInUseAuthorization];
37 | }
38 | [_locationManager startUpdatingLocation];
39 |
40 | return YES;
41 | }
42 |
43 | - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
44 | NSLog(@"Register for notifications with device token:%@", deviceToken);
45 |
46 | }
47 |
48 | - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
49 | NSLog(@"Fail to register for remote notifications with error:%@", error);
50 | }
51 |
52 | - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
53 | NSLog(@"Receive remote notification:%@", userInfo);
54 |
55 | }
56 |
57 | #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 100000
58 | - (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)())completionHandler {
59 |
60 | completionHandler();
61 | }
62 | #endif
63 |
64 | - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
65 | NSLog(@"Update location:%@", locations);
66 | }
67 |
68 |
69 |
70 |
71 | -(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
72 | return YES;
73 |
74 | }
75 | -(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
76 | return YES;
77 | }
78 |
79 |
80 | @end
81 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/eAuth/TDEAAuthViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // TDEAAuthViewController.m
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2018/1/9.
6 | // Copyright © 2018年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import "TDEAAuthViewController.h"
10 |
11 | @interface TDEAAuthViewController ()
12 |
13 | @property (weak, nonatomic) IBOutlet UITextField *accountNameField;
14 | @property (weak, nonatomic) IBOutlet UITextField *countryCodeField;
15 | @property (weak, nonatomic) IBOutlet UITextField *phoneNumberField;
16 | @property (weak, nonatomic) IBOutlet UITextField *authCodeTypeField;
17 | @property (weak, nonatomic) IBOutlet UITextField *smsIDField;
18 | @property (weak, nonatomic) IBOutlet UITextField *authCodeField;
19 | @property (weak, nonatomic) IBOutlet UIButton *applyAuthCodeButton;
20 | @property (strong, nonatomic) NSMutableArray *typePickerData;
21 | @property (strong, nonatomic) UIPickerView *typePickerView;
22 | @property (strong, nonatomic) NSString *requestId;
23 |
24 | @end
25 |
26 | @implementation TDEAAuthViewController
27 |
28 | - (void)viewDidLoad {
29 | [super viewDidLoad];
30 | // Do any additional setup after loading the view.
31 | self.typePickerData = [NSMutableArray array];
32 | [self.typePickerData addObject:@"短信认证"];
33 | [self.typePickerData addObject:@"语音认证"];
34 |
35 | self.typePickerView = [[UIPickerView alloc] init];
36 | self.typePickerView.dataSource = self;
37 | self.typePickerView.delegate = self;
38 | self.typePickerView.showsSelectionIndicator = YES;
39 |
40 | self.authCodeTypeField.inputView = self.typePickerView;
41 | self.authCodeTypeField.text = self.typePickerData[0];
42 | }
43 | #pragma mark - Picker view data source
44 |
45 | - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
46 | return 1;
47 | }
48 |
49 | - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
50 | return self.typePickerData.count;
51 | }
52 |
53 | #pragma mark Picker Delegate Methods
54 |
55 | - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
56 | return [self.typePickerData objectAtIndex:row];
57 | }
58 |
59 | - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
60 | self.authCodeTypeField.text = [self.typePickerData objectAtIndex:row];
61 | }
62 |
63 | #pragma mark - Control event
64 |
65 | - (IBAction)useTDID {
66 | }
67 |
68 | - (IBAction)apply {
69 |
70 | }
71 |
72 | - (IBAction)verify {
73 |
74 | }
75 |
76 | #pragma mark - TalkingData eAuth Delegate
77 |
78 |
79 |
80 |
81 | @end
82 |
--------------------------------------------------------------------------------
/iOS/libyourview/vendor/GCDWebServer/Requests/GCDWebServerURLEncodedFormRequest.m:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright (c) 2012-2019, Pierre-Olivier Latour
3 | All rights reserved.
4 |
5 | Redistribution and use in source and binary forms, with or without
6 | modification, are permitted provided that the following conditions are met:
7 | * Redistributions of source code must retain the above copyright
8 | notice, this list of conditions and the following disclaimer.
9 | * Redistributions in binary form must reproduce the above copyright
10 | notice, this list of conditions and the following disclaimer in the
11 | documentation and/or other materials provided with the distribution.
12 | * The name of Pierre-Olivier Latour may not be used to endorse
13 | or promote products derived from this software without specific
14 | prior written permission.
15 |
16 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
17 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 | DISCLAIMED. IN NO EVENT SHALL PIERRE-OLIVIER LATOUR BE LIABLE FOR ANY
20 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 | */
27 |
28 | #if !__has_feature(objc_arc)
29 | #error GCDWebServer requires ARC
30 | #endif
31 |
32 | #import "GCDWebServerPrivate.h"
33 |
34 | @implementation GCDWebServerURLEncodedFormRequest
35 |
36 | + (NSString*)mimeType {
37 | return @"application/x-www-form-urlencoded";
38 | }
39 |
40 | - (BOOL)close:(NSError**)error {
41 | if (![super close:error]) {
42 | return NO;
43 | }
44 |
45 | NSString* charset = GCDWebServerExtractHeaderValueParameter(self.contentType, @"charset");
46 | NSString* string = [[NSString alloc] initWithData:self.data encoding:GCDWebServerStringEncodingFromCharset(charset)];
47 | _arguments = GCDWebServerParseURLEncodedForm(string);
48 | return YES;
49 | }
50 |
51 | - (NSString*)description {
52 | NSMutableString* description = [NSMutableString stringWithString:[super description]];
53 | [description appendString:@"\n"];
54 | for (NSString* argument in [[_arguments allKeys] sortedArrayUsingSelector:@selector(compare:)]) {
55 | [description appendFormat:@"\n%@ = %@", argument, [_arguments objectForKey:argument]];
56 | }
57 | return description;
58 | }
59 |
60 | @end
61 |
--------------------------------------------------------------------------------
/iOS/libyourview/vendor/GCDWebServer/Requests/GCDWebServerDataRequest.h:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright (c) 2012-2019, Pierre-Olivier Latour
3 | All rights reserved.
4 |
5 | Redistribution and use in source and binary forms, with or without
6 | modification, are permitted provided that the following conditions are met:
7 | * Redistributions of source code must retain the above copyright
8 | notice, this list of conditions and the following disclaimer.
9 | * Redistributions in binary form must reproduce the above copyright
10 | notice, this list of conditions and the following disclaimer in the
11 | documentation and/or other materials provided with the distribution.
12 | * The name of Pierre-Olivier Latour may not be used to endorse
13 | or promote products derived from this software without specific
14 | prior written permission.
15 |
16 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
17 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 | DISCLAIMED. IN NO EVENT SHALL PIERRE-OLIVIER LATOUR BE LIABLE FOR ANY
20 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 | */
27 |
28 | #import "GCDWebServerRequest.h"
29 |
30 | NS_ASSUME_NONNULL_BEGIN
31 |
32 | /**
33 | * The GCDWebServerDataRequest subclass of GCDWebServerRequest stores the body
34 | * of the HTTP request in memory.
35 | */
36 | @interface GCDWebServerDataRequest : GCDWebServerRequest
37 |
38 | /**
39 | * Returns the data for the request body.
40 | */
41 | @property(nonatomic, readonly) NSData* data;
42 |
43 | @end
44 |
45 | @interface GCDWebServerDataRequest (Extensions)
46 |
47 | /**
48 | * Returns the data for the request body interpreted as text. If the content
49 | * type of the body is not a text one, or if an error occurs, nil is returned.
50 | *
51 | * The text encoding used to interpret the data is extracted from the
52 | * "Content-Type" header or defaults to UTF-8.
53 | */
54 | @property(nonatomic, readonly, nullable) NSString* text;
55 |
56 | /**
57 | * Returns the data for the request body interpreted as a JSON object. If the
58 | * content type of the body is not JSON, or if an error occurs, nil is returned.
59 | */
60 | @property(nonatomic, readonly, nullable) id jsonObject;
61 |
62 | @end
63 |
64 | NS_ASSUME_NONNULL_END
65 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "size" : "20x20",
5 | "idiom" : "iphone",
6 | "filename" : "Icon-20@2x.png",
7 | "scale" : "2x"
8 | },
9 | {
10 | "size" : "20x20",
11 | "idiom" : "iphone",
12 | "filename" : "Icon-20@3x.png",
13 | "scale" : "3x"
14 | },
15 | {
16 | "size" : "29x29",
17 | "idiom" : "iphone",
18 | "filename" : "Icon-29@2x.png",
19 | "scale" : "2x"
20 | },
21 | {
22 | "size" : "29x29",
23 | "idiom" : "iphone",
24 | "filename" : "Icon-29@3x.png",
25 | "scale" : "3x"
26 | },
27 | {
28 | "size" : "40x40",
29 | "idiom" : "iphone",
30 | "filename" : "Icon-40@2x.png",
31 | "scale" : "2x"
32 | },
33 | {
34 | "size" : "40x40",
35 | "idiom" : "iphone",
36 | "filename" : "Icon-40@3x.png",
37 | "scale" : "3x"
38 | },
39 | {
40 | "size" : "60x60",
41 | "idiom" : "iphone",
42 | "filename" : "Icon-60@2x.png",
43 | "scale" : "2x"
44 | },
45 | {
46 | "size" : "60x60",
47 | "idiom" : "iphone",
48 | "filename" : "Icon-60@3x.png",
49 | "scale" : "3x"
50 | },
51 | {
52 | "size" : "20x20",
53 | "idiom" : "ipad",
54 | "filename" : "Icon-20.png",
55 | "scale" : "1x"
56 | },
57 | {
58 | "size" : "20x20",
59 | "idiom" : "ipad",
60 | "filename" : "Icon-20@2x.png",
61 | "scale" : "2x"
62 | },
63 | {
64 | "size" : "29x29",
65 | "idiom" : "ipad",
66 | "filename" : "Icon-29.png",
67 | "scale" : "1x"
68 | },
69 | {
70 | "size" : "29x29",
71 | "idiom" : "ipad",
72 | "filename" : "Icon-29@2x.png",
73 | "scale" : "2x"
74 | },
75 | {
76 | "size" : "40x40",
77 | "idiom" : "ipad",
78 | "filename" : "Icon-40.png",
79 | "scale" : "1x"
80 | },
81 | {
82 | "size" : "40x40",
83 | "idiom" : "ipad",
84 | "filename" : "Icon-40@2x.png",
85 | "scale" : "2x"
86 | },
87 | {
88 | "size" : "76x76",
89 | "idiom" : "ipad",
90 | "filename" : "Icon-76.png",
91 | "scale" : "1x"
92 | },
93 | {
94 | "size" : "76x76",
95 | "idiom" : "ipad",
96 | "filename" : "Icon-76@2x.png",
97 | "scale" : "2x"
98 | },
99 | {
100 | "size" : "83.5x83.5",
101 | "idiom" : "ipad",
102 | "filename" : "Icon-83.5@2x.png",
103 | "scale" : "2x"
104 | },
105 | {
106 | "idiom" : "ios-marketing",
107 | "size" : "1024x1024",
108 | "scale" : "1x"
109 | }
110 | ],
111 | "info" : {
112 | "version" : 1,
113 | "author" : "xcode"
114 | }
115 | }
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/IQKeyboardManager/Categories/IQNSArray+Sort.m:
--------------------------------------------------------------------------------
1 | //
2 | // NSArray+Sort.m
3 | // https://github.com/hackiftekhar/IQKeyboardManager
4 | // Copyright (c) 2013-16 Iftekhar Qurashi.
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 |
24 | #import "IQNSArray+Sort.h"
25 | #import "IQUIView+Hierarchy.h"
26 |
27 | #import
28 |
29 | @implementation NSArray (IQ_NSArray_Sort)
30 |
31 | - (NSArray*)sortedArrayByTag
32 | {
33 | return [self sortedArrayUsingComparator:^NSComparisonResult(UIView *view1, UIView *view2) {
34 |
35 | if ([view1 respondsToSelector:@selector(tag)] && [view2 respondsToSelector:@selector(tag)])
36 | {
37 | if ([view1 tag] < [view2 tag]) return NSOrderedAscending;
38 |
39 | else if ([view1 tag] > [view2 tag]) return NSOrderedDescending;
40 |
41 | else return NSOrderedSame;
42 | }
43 | else
44 | return NSOrderedSame;
45 | }];
46 | }
47 |
48 | - (NSArray*)sortedArrayByPosition
49 | {
50 | return [self sortedArrayUsingComparator:^NSComparisonResult(UIView *view1, UIView *view2) {
51 |
52 | CGFloat x1 = CGRectGetMinX(view1.frame);
53 | CGFloat y1 = CGRectGetMinY(view1.frame);
54 | CGFloat x2 = CGRectGetMinX(view2.frame);
55 | CGFloat y2 = CGRectGetMinY(view2.frame);
56 |
57 | if (y1 < y2) return NSOrderedAscending;
58 |
59 | else if (y1 > y2) return NSOrderedDescending;
60 |
61 | //Else both y are same so checking for x positions
62 | else if (x1 < x2) return NSOrderedAscending;
63 |
64 | else if (x1 > x2) return NSOrderedDescending;
65 |
66 | else return NSOrderedSame;
67 | }];
68 | }
69 |
70 |
71 | @end
72 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/IQKeyboardManager/IQToolbar/IQTitleBarButtonItem.h:
--------------------------------------------------------------------------------
1 | //
2 | // IQTitleBarButtonItem.h
3 | // https://github.com/hackiftekhar/IQKeyboardManager
4 | // Copyright (c) 2013-16 Iftekhar Qurashi.
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 |
24 | #import
25 | #import "IQKeyboardManagerConstants.h"
26 | #import "IQBarButtonItem.h"
27 |
28 | /**
29 | BarButtonItem with title text.
30 | */
31 | @interface IQTitleBarButtonItem : IQBarButtonItem
32 |
33 | /**
34 | Font to be used in bar button. Default is (system font 12.0 bold).
35 | */
36 | @property(nullable, nonatomic, strong) UIFont *font;
37 |
38 | /**
39 | selectableTextColor to be used for displaying button text when button is enabled.
40 | */
41 | @property(nullable, nonatomic, strong) UIColor *selectableTextColor;
42 |
43 | /**
44 | Initialize with frame and title.
45 |
46 | @param title Title of barButtonItem.
47 | */
48 | -(nonnull instancetype)initWithTitle:(nullable NSString *)title NS_DESIGNATED_INITIALIZER;
49 |
50 | /**
51 | Optional target & action to behave toolbar title button as clickable button
52 |
53 | @param target Target object.
54 | @param action Target Selector.
55 | */
56 | -(void)setTitleTarget:(nullable id)target action:(nullable SEL)action;
57 |
58 | /**
59 | Customized Invocation to be called on title button action. titleInvocation is internally created using setTitleTarget:action: method.
60 | */
61 | @property (nullable, strong, nonatomic) NSInvocation *titleInvocation;
62 |
63 | /**
64 | Unavailable. Please use initWithFrame:title: method
65 | */
66 | -(nonnull instancetype)init NS_UNAVAILABLE;
67 |
68 | /**
69 | Unavailable. Please use initWithFrame:title: method
70 | */
71 | -(nonnull instancetype)initWithCoder:(nullable NSCoder *)aDecoder NS_UNAVAILABLE;
72 |
73 | /**
74 | Unavailable. Please use initWithFrame:title: method
75 | */
76 | + (nonnull instancetype)new NS_UNAVAILABLE;
77 |
78 | @end
79 |
--------------------------------------------------------------------------------
/iOS/libyourview/serializer/UIView+YVNodeInfo.m:
--------------------------------------------------------------------------------
1 | //
2 | // UIView+YVNodeInfo.m
3 | // libyourview
4 | //
5 | // Created by bliss_ddo on 2019/4/24.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import "UIView+YVNodeInfo.h"
10 |
11 | @implementation UIView (YVNodeInfo)
12 | -(NSDictionary*)nodeInfo
13 | {
14 | NSString * _snapshot = [self _snapWithSublayer:NO];
15 | NSString * _localframe = [self _localframe];
16 | NSString * _windowframe = [self _windowFrame];
17 | NSNumber * _isOffScreen = [self _isOffScreen];
18 | NSDictionary * selfinfo = @{
19 | @"snapshot":_snapshot,
20 | @"localframe":_localframe,
21 | @"windowframe":_windowframe,
22 | @"isoffscreen":_isOffScreen
23 | };
24 | NSDictionary * superinfo = [super nodeInfo];
25 | NSMutableDictionary * result = [NSMutableDictionary dictionary];
26 | [result addEntriesFromDictionary:selfinfo];
27 | [result addEntriesFromDictionary:superinfo];
28 | return result.copy;
29 | }
30 |
31 | -(NSString*)_windowFrame
32 | {
33 | CGRect windowRect = [UIScreen mainScreen].bounds;
34 | windowRect = [self convertRect:self.bounds toView:nil];
35 | return NSStringFromCGRect(windowRect);
36 | }
37 |
38 | -(NSString*)_localframe
39 | {
40 | return NSStringFromCGRect(self.frame);
41 | }
42 |
43 |
44 | -(NSString*)_snapWithSublayer:(BOOL)containSublayer
45 | {
46 |
47 | NSMutableArray * restoreArray = [NSMutableArray array];
48 | if (!containSublayer) {
49 | for (CALayer*ly in self.layer.sublayers) {
50 | if (!ly.hidden && ![ly isKindOfClass:NSClassFromString(@"_UILabelContentLayer")]) {
51 | ly.hidden = YES;
52 | [restoreArray addObject:ly];
53 | }
54 | }
55 | }
56 | UIGraphicsBeginImageContextWithOptions(self.frame.size, NO, 0.0);
57 | [self.layer renderInContext:UIGraphicsGetCurrentContext()];
58 | UIImage *snapshot = UIGraphicsGetImageFromCurrentImageContext();
59 | UIGraphicsEndImageContext();
60 | NSData * imageData = UIImagePNGRepresentation(snapshot);
61 | NSString * imageStringBase64 = [imageData base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];
62 | if (!containSublayer) {
63 | for (CALayer*ly in restoreArray) {
64 | ly.hidden = NO;
65 | }
66 | }
67 | if (imageStringBase64 == nil) {
68 | NSLog(@"view snap shot is nil");
69 | NSLog(@"[❌%@]",self);
70 | }
71 | return imageStringBase64==nil ?@"":imageStringBase64;
72 | }
73 |
74 | -(NSNumber*)_isOffScreen
75 | {
76 | CGRect windowRect = [UIScreen mainScreen].bounds;
77 | windowRect = [self convertRect:self.bounds toView:nil];
78 | CGFloat x = windowRect.origin.x;
79 | CGFloat y = windowRect.origin.y;
80 | CGFloat screenWidth = [[UIScreen mainScreen]bounds].size.width;
81 | CGFloat screenHeight = [[UIScreen mainScreen]bounds].size.height;
82 | BOOL isoffscreen = NO;
83 | if (x < 0 || y < 0 || x >= screenWidth || y >= screenHeight) {
84 | isoffscreen = YES;
85 | }
86 | return @(isoffscreen);
87 | }
88 |
89 | @end
90 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/TDHomeTableViewCell.m:
--------------------------------------------------------------------------------
1 | //
2 | // TDHomeTableViewCell.m
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2017/5/22.
6 | // Copyright © 2017年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import "TDHomeTableViewCell.h"
10 |
11 | @implementation TDHomeTableViewCell
12 |
13 | - (void)awakeFromNib {
14 | [super awakeFromNib];
15 | // Initialization code
16 | self.selectImage.translatesAutoresizingMaskIntoConstraints = NO;
17 |
18 | NSLayoutConstraint *top = [NSLayoutConstraint constraintWithItem:self.selectImage
19 | attribute:NSLayoutAttributeTop
20 | relatedBy:NSLayoutRelationEqual
21 | toItem:self.textLabel
22 | attribute:NSLayoutAttributeTop
23 | multiplier:1
24 | constant:0];
25 | NSLayoutConstraint *right = [NSLayoutConstraint constraintWithItem:self.selectImage
26 | attribute:NSLayoutAttributeRight
27 | relatedBy:NSLayoutRelationEqual
28 | toItem:self.contentView
29 | attribute:NSLayoutAttributeRight
30 | multiplier:1
31 | constant:-8];
32 | NSLayoutConstraint *width = [NSLayoutConstraint constraintWithItem:self.selectImage
33 | attribute:NSLayoutAttributeWidth
34 | relatedBy:NSLayoutRelationEqual
35 | toItem:self.textLabel
36 | attribute:NSLayoutAttributeHeight
37 | multiplier:1
38 | constant:0];
39 | NSLayoutConstraint *height = [NSLayoutConstraint constraintWithItem:self.selectImage
40 | attribute:NSLayoutAttributeHeight
41 | relatedBy:NSLayoutRelationEqual
42 | toItem:self.textLabel
43 | attribute:NSLayoutAttributeHeight
44 | multiplier:1
45 | constant:0];
46 | [self.contentView addConstraints:@[top, right, width, height]];
47 | }
48 |
49 | @end
50 |
--------------------------------------------------------------------------------
/iOS/libyourview/vendor/GCDWebServer/Responses/GCDWebServerStreamedResponse.m:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright (c) 2012-2019, Pierre-Olivier Latour
3 | All rights reserved.
4 |
5 | Redistribution and use in source and binary forms, with or without
6 | modification, are permitted provided that the following conditions are met:
7 | * Redistributions of source code must retain the above copyright
8 | notice, this list of conditions and the following disclaimer.
9 | * Redistributions in binary form must reproduce the above copyright
10 | notice, this list of conditions and the following disclaimer in the
11 | documentation and/or other materials provided with the distribution.
12 | * The name of Pierre-Olivier Latour may not be used to endorse
13 | or promote products derived from this software without specific
14 | prior written permission.
15 |
16 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
17 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 | DISCLAIMED. IN NO EVENT SHALL PIERRE-OLIVIER LATOUR BE LIABLE FOR ANY
20 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 | */
27 |
28 | #if !__has_feature(objc_arc)
29 | #error GCDWebServer requires ARC
30 | #endif
31 |
32 | #import "GCDWebServerPrivate.h"
33 |
34 | @implementation GCDWebServerStreamedResponse {
35 | GCDWebServerAsyncStreamBlock _block;
36 | }
37 |
38 | @dynamic contentType;
39 |
40 | + (instancetype)responseWithContentType:(NSString*)type streamBlock:(GCDWebServerStreamBlock)block {
41 | return [(GCDWebServerStreamedResponse*)[[self class] alloc] initWithContentType:type streamBlock:block];
42 | }
43 |
44 | + (instancetype)responseWithContentType:(NSString*)type asyncStreamBlock:(GCDWebServerAsyncStreamBlock)block {
45 | return [(GCDWebServerStreamedResponse*)[[self class] alloc] initWithContentType:type asyncStreamBlock:block];
46 | }
47 |
48 | - (instancetype)initWithContentType:(NSString*)type streamBlock:(GCDWebServerStreamBlock)block {
49 | return [self initWithContentType:type
50 | asyncStreamBlock:^(GCDWebServerBodyReaderCompletionBlock completionBlock) {
51 | NSError* error = nil;
52 | NSData* data = block(&error);
53 | completionBlock(data, error);
54 | }];
55 | }
56 |
57 | - (instancetype)initWithContentType:(NSString*)type asyncStreamBlock:(GCDWebServerAsyncStreamBlock)block {
58 | if ((self = [super init])) {
59 | _block = [block copy];
60 |
61 | self.contentType = type;
62 | }
63 | return self;
64 | }
65 |
66 | - (void)asyncReadDataWithCompletion:(GCDWebServerBodyReaderCompletionBlock)block {
67 | _block(block);
68 | }
69 |
70 | - (NSString*)description {
71 | NSMutableString* description = [NSMutableString stringWithString:[super description]];
72 | [description appendString:@"\n\n"];
73 | return description;
74 | }
75 |
76 | @end
77 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/AppAnalytics/TDAAAccountTableViewCell.m:
--------------------------------------------------------------------------------
1 | //
2 | // TDAAAccountTableViewCell.m
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2017/6/26.
6 | // Copyright © 2017年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import "TDAAAccountTableViewCell.h"
10 |
11 | @interface TDAAAccountTableViewCell ()
12 |
13 | @property (weak, nonatomic) IBOutlet UITextField *accountIDField;
14 | @property (weak, nonatomic) IBOutlet UITextField *accountTypeField;
15 | @property (weak, nonatomic) IBOutlet UITextField *accountNameField;
16 | @property (strong, nonatomic) NSMutableArray *typePickerData;
17 | @property (strong, nonatomic) UIPickerView *typePickerView;
18 |
19 | @end
20 |
21 |
22 | @implementation TDAAAccountTableViewCell
23 |
24 | - (void)awakeFromNib {
25 | [super awakeFromNib];
26 | // Initialization code
27 | self.typePickerData = [NSMutableArray array];
28 | [self.typePickerData addObject:@"匿名账户"];
29 | [self.typePickerData addObject:@"显性注册账户"];
30 | [self.typePickerData addObject:@"新浪微博"];
31 | [self.typePickerData addObject:@"QQ账户"];
32 | [self.typePickerData addObject:@"腾讯微博"];
33 | [self.typePickerData addObject:@"91账户"];
34 | [self.typePickerData addObject:@"微信"];
35 | [self.typePickerData addObject:@"预留1"];
36 | [self.typePickerData addObject:@"预留2"];
37 | [self.typePickerData addObject:@"预留3"];
38 | [self.typePickerData addObject:@"预留4"];
39 | [self.typePickerData addObject:@"预留5"];
40 | [self.typePickerData addObject:@"预留6"];
41 | [self.typePickerData addObject:@"预留7"];
42 | [self.typePickerData addObject:@"预留8"];
43 | [self.typePickerData addObject:@"预留9"];
44 | [self.typePickerData addObject:@"预留10"];
45 |
46 | self.typePickerView = [[UIPickerView alloc] init];
47 | self.typePickerView.dataSource = self;
48 | self.typePickerView.delegate = self;
49 | self.typePickerView.tag = 1;
50 | self.typePickerView.showsSelectionIndicator = YES;
51 | self.accountTypeField.inputView = self.typePickerView;
52 | }
53 |
54 | #pragma mark - Picker view data source
55 |
56 | - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
57 | return 1;
58 | }
59 |
60 | - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
61 | switch (pickerView.tag) {
62 | case 1:
63 | return self.typePickerData.count;
64 | break;
65 | default:
66 | break;
67 | }
68 |
69 | return 0;
70 | }
71 |
72 | #pragma mark Picker Delegate Methods
73 |
74 | - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
75 | switch (pickerView.tag) {
76 | case 1:
77 | return [self.typePickerData objectAtIndex:row];
78 | break;
79 | default:
80 | break;
81 | }
82 |
83 | return nil;
84 | }
85 |
86 | - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
87 | switch (pickerView.tag) {
88 | case 1:
89 | self.accountTypeField.text = [self.typePickerData objectAtIndex:row];
90 | break;
91 | default:
92 | break;
93 | }
94 | }
95 |
96 | #pragma mark - Control event
97 |
98 | - (IBAction)registerAccount {
99 |
100 | }
101 |
102 | - (IBAction)loginAccount {
103 |
104 | }
105 |
106 |
107 | @end
108 |
--------------------------------------------------------------------------------
/iOS/libyourview/vendor/GCDWebServer/Responses/GCDWebServerStreamedResponse.h:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright (c) 2012-2019, Pierre-Olivier Latour
3 | All rights reserved.
4 |
5 | Redistribution and use in source and binary forms, with or without
6 | modification, are permitted provided that the following conditions are met:
7 | * Redistributions of source code must retain the above copyright
8 | notice, this list of conditions and the following disclaimer.
9 | * Redistributions in binary form must reproduce the above copyright
10 | notice, this list of conditions and the following disclaimer in the
11 | documentation and/or other materials provided with the distribution.
12 | * The name of Pierre-Olivier Latour may not be used to endorse
13 | or promote products derived from this software without specific
14 | prior written permission.
15 |
16 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
17 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 | DISCLAIMED. IN NO EVENT SHALL PIERRE-OLIVIER LATOUR BE LIABLE FOR ANY
20 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 | */
27 |
28 | #import "GCDWebServerResponse.h"
29 |
30 | NS_ASSUME_NONNULL_BEGIN
31 |
32 | /**
33 | * The GCDWebServerStreamBlock is called to stream the data for the HTTP body.
34 | * The block must return either a chunk of data, an empty NSData when done, or
35 | * nil on error and set the "error" argument which is guaranteed to be non-NULL.
36 | */
37 | typedef NSData* _Nullable (^GCDWebServerStreamBlock)(NSError** error);
38 |
39 | /**
40 | * The GCDWebServerAsyncStreamBlock works like the GCDWebServerStreamBlock
41 | * except the streamed data can be returned at a later time allowing for
42 | * truly asynchronous generation of the data.
43 | *
44 | * The block must call "completionBlock" passing the new chunk of data when ready,
45 | * an empty NSData when done, or nil on error and pass a NSError.
46 | *
47 | * The block cannot call "completionBlock" more than once per invocation.
48 | */
49 | typedef void (^GCDWebServerAsyncStreamBlock)(GCDWebServerBodyReaderCompletionBlock completionBlock);
50 |
51 | /**
52 | * The GCDWebServerStreamedResponse subclass of GCDWebServerResponse streams
53 | * the body of the HTTP response using a GCD block.
54 | */
55 | @interface GCDWebServerStreamedResponse : GCDWebServerResponse
56 | @property(nonatomic, copy) NSString* contentType; // Redeclare as non-null
57 |
58 | /**
59 | * Creates a response with streamed data and a given content type.
60 | */
61 | + (instancetype)responseWithContentType:(NSString*)type streamBlock:(GCDWebServerStreamBlock)block;
62 |
63 | /**
64 | * Creates a response with async streamed data and a given content type.
65 | */
66 | + (instancetype)responseWithContentType:(NSString*)type asyncStreamBlock:(GCDWebServerAsyncStreamBlock)block;
67 |
68 | /**
69 | * Initializes a response with streamed data and a given content type.
70 | */
71 | - (instancetype)initWithContentType:(NSString*)type streamBlock:(GCDWebServerStreamBlock)block;
72 |
73 | /**
74 | * This method is the designated initializer for the class.
75 | */
76 | - (instancetype)initWithContentType:(NSString*)type asyncStreamBlock:(GCDWebServerAsyncStreamBlock)block;
77 |
78 | @end
79 |
80 | NS_ASSUME_NONNULL_END
81 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/TalkingDataSDKDemo.xcodeproj/xcshareddata/xcschemes/PhoneDemo.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
39 |
40 |
41 |
42 |
43 |
44 |
54 |
56 |
62 |
63 |
64 |
65 |
66 |
67 |
73 |
75 |
81 |
82 |
83 |
84 |
86 |
87 |
90 |
91 |
92 |
--------------------------------------------------------------------------------
/iOS/libyourview/serializer/YVTraversalStepin.m:
--------------------------------------------------------------------------------
1 | //
2 | // YVTraversalStepin.m
3 | // libyourview
4 | //
5 | // Created by bliss_ddo on 2019/4/24.
6 | // Copyright © 2019 bliss_ddo. All rights reserved.
7 | //
8 |
9 | #import "YVTraversalStepin.h"
10 |
11 | @interface YVTraversalStepin()
12 | @property (nonatomic,copy) NSString * assignToViewController;
13 | @property (nonatomic,copy) NSString * viewLevel;
14 | @property (nonatomic,assign) NSInteger viewDeepth;
15 | @property (nonatomic,assign) NSInteger indexRow;
16 | @property (nonatomic,assign) NSInteger indexSection;
17 | @property (nonatomic,assign) BOOL isInTableView;
18 | @property (nonatomic,assign) BOOL isInCollectionView;
19 | @end
20 |
21 | @implementation YVTraversalStepin
22 |
23 | -(instancetype)init
24 | {
25 | if (self = [super init]) {
26 | _assignToViewController = @"";
27 | _viewLevel = @"";
28 | _viewDeepth = -1;
29 | _indexSection = -1;
30 | _indexRow = -1;
31 | _isInTableView = NO;
32 | _isInCollectionView = NO;
33 | }
34 | return self;
35 | }
36 |
37 | +(YVTraversalStepin*)stepInWithView:(UIView*)v parentInfo:(YVTraversalStepin*)parent
38 | {
39 | YVTraversalStepin * stenIn = [[YVTraversalStepin alloc]init];
40 | NSString * assignToViewController = parent.assignToViewController;
41 | NSInteger indexRow = parent.indexRow;
42 | NSInteger indexSection = parent.indexSection;
43 | BOOL isInTableView = parent.isInTableView;
44 | BOOL isInCollectionView = parent.isInCollectionView;
45 |
46 | UIResponder * nextResponder = v.nextResponder;
47 | if ([nextResponder isKindOfClass:[UIViewController class]]) {
48 | assignToViewController = NSStringFromClass(nextResponder.class);
49 | }else if ([nextResponder isKindOfClass:[UITableView class]] && [v isKindOfClass:[UITableViewCell class]]) {
50 | isInTableView = YES;
51 | UITableView * tableview = (UITableView *)nextResponder;
52 | UITableViewCell * cv = (UITableViewCell *)v;
53 | NSIndexPath * indexpath = [tableview indexPathForCell:cv];
54 | if (indexpath) {
55 | indexRow = indexpath.row;
56 | indexSection = indexpath.section;
57 | }
58 | }else if ([nextResponder isKindOfClass:[UICollectionView class]] && [v isKindOfClass:[UICollectionViewCell class]]){
59 | isInCollectionView = YES;
60 | UICollectionView * collectionview = (UICollectionView *)nextResponder;
61 | UICollectionViewCell * cv = (UICollectionViewCell *)v;
62 | NSIndexPath * indexpath = [collectionview indexPathForCell:cv];
63 | if (indexpath) {
64 | indexRow = indexpath.row;
65 | indexSection = indexpath.section;
66 | }
67 | }
68 |
69 | stenIn.assignToViewController = assignToViewController;
70 | stenIn.viewLevel = [NSString stringWithFormat:@"%@/%ld",parent.viewLevel,[v.superview.subviews indexOfObject:v]];
71 | stenIn.viewDeepth = parent.viewDeepth + 1;
72 | stenIn.indexRow = indexRow;
73 | stenIn.indexSection = indexSection;
74 | stenIn.isInTableView = isInTableView;
75 | stenIn.isInCollectionView = isInCollectionView;
76 | return stenIn;
77 | }
78 |
79 | -(NSDictionary*)stepinfo
80 | {
81 | return @{
82 | @"assign_to_viewcontroller":self.assignToViewController,
83 | @"view_level":self.viewLevel,
84 | @"view_deepth":@(self.viewDeepth),
85 | @"index_row":@(self.indexRow),
86 | @"index_section":@(self.indexSection),
87 | @"is_in_tableview":@(self.isInTableView),
88 | @"is_in_collectionview":@(self.isInCollectionView),
89 | };
90 | }
91 | @end
92 |
--------------------------------------------------------------------------------
/iOS/TalkingDataSDKDemo/PhoneDemo/TDHomeViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // TDHomeViewController.m
3 | // TalkingDataSDKDemo
4 | //
5 | // Created by liweiqiang on 2017/5/22.
6 | // Copyright © 2017年 TendCloud. All rights reserved.
7 | //
8 |
9 | #import "TDHomeViewController.h"
10 | #import "TDHomeTableViewCell.h"
11 | #import "TDGeneralViewController.h"
12 |
13 | static NSString *cellIdentifier = @"Cell";
14 | static NSString *headerIdentifier = @"Header";
15 |
16 | @interface TDHomeViewController ()
17 |
18 | @property (strong, nonatomic) NSArray *items;
19 |
20 | @end
21 |
22 | @implementation TDHomeViewController
23 |
24 | - (void)viewDidLoad {
25 | [super viewDidLoad];
26 | // Do any additional setup after loading the view, typically from a nib.
27 | NSString *path = [[NSBundle mainBundle].bundlePath stringByAppendingPathComponent:@"Data.plist"];
28 | self.items = [NSArray arrayWithContentsOfFile:path];
29 | }
30 |
31 | #pragma mark - Table view data source
32 |
33 | - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
34 | return self.items.count;
35 | }
36 |
37 | - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
38 | NSDictionary *dic = self.items[section];
39 | NSArray *funs = dic[@"functions"];
40 |
41 | return funs.count;
42 | }
43 |
44 | - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
45 | NSDictionary *dic = self.items[indexPath.section];
46 | NSArray *functions = dic[@"functions"];
47 | NSDictionary *item = functions[indexPath.row];
48 |
49 | TDHomeTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
50 | cell.imageView.image = [UIImage imageNamed:item[@"name"]];
51 | cell.textLabel.text = item[@"title"];
52 | cell.detailTextLabel.text = item[@"subtitle"];
53 | cell.detailTextLabel.numberOfLines = 2;
54 | cell.selectImage.highlighted = [item[@"selected"] boolValue];
55 |
56 | return cell;
57 | }
58 |
59 | #pragma mark - Table view delegate
60 |
61 | - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
62 | return 28;
63 | }
64 |
65 | - (nullable UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
66 | UITableViewHeaderFooterView *view = [tableView dequeueReusableHeaderFooterViewWithIdentifier:headerIdentifier];
67 | if (!view) {
68 | view = [[UITableViewHeaderFooterView alloc] initWithReuseIdentifier:headerIdentifier];
69 | }
70 | NSDictionary *dic = self.items[section];
71 | view.textLabel.text = dic[@"name"];
72 |
73 | return view;
74 | }
75 |
76 | - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
77 | NSDictionary *product = self.items[indexPath.section];
78 | NSString *productName = product[@"name"];
79 | NSArray *functions = product[@"functions"];
80 | NSDictionary *function = functions[indexPath.row];
81 | NSString *functionTitle = function[@"title"];
82 | NSString *functionName = function[@"name"];
83 | NSString *identifier = [NSString stringWithFormat:@"%@-%@", productName, functionName];
84 |
85 | TDGeneralViewController *viewController = nil;
86 | UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
87 | @try {
88 | viewController = [mainStoryboard instantiateViewControllerWithIdentifier:identifier];
89 | } @catch (NSException *exception) {
90 | viewController = [mainStoryboard instantiateViewControllerWithIdentifier:@"TalkingData-General"];
91 | }
92 | viewController.info = function;
93 | viewController.navigationItem.title = [NSString stringWithFormat:@"%@ %@", productName, functionTitle];
94 | [self.navigationController pushViewController:viewController animated:YES];
95 | }
96 |
97 | @end
98 |
--------------------------------------------------------------------------------