lickability / pinpointkit Goto Github PK
View Code? Open in Web Editor NEWSend better feedback
License: MIT License
Send better feedback
License: MIT License
It would be nice to add a tiny little pitch for Lickability in the README saying that we're available to hire if you want help supporting PinpointKit or working on your app.
I'm looking to prefill the subject and body with a custom message but don't see an easy way to do so
Sender
that can be used to send the feedback.Submission
that can be used to gather what is sent. (image, text, app name, etc).MailComposeSender
that implements Sender
and populates an MFMailComposeViewController
There's currently a TODO for it, but we haven't done it yet.
A custom window that can detect shake and can be subclassed by the developer that lets the PinpointKit
know that it should present (probably via delegation?).
The feedback recipients is left blank on the default PinpointKit instance, and it requires a convoluted series of object initialization just to set a property that should always be set by the app.
It should be possible to do this:
lazy var window: UIWindow? = ShakeDetectingWindow(frame: UIScreen.mainScreen().bounds, delegate: PinpointKit.defaultPinpointKit)
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
PinpointKit.defaultPinpointKit.configuration.feedbackRecipients = ["[email protected]"]
}
There’s an animation issue with status bar hiding when running the example project on iOS 10.
swift-2.3
branchRight now, there's no way to see what the feedback UI looks like until you actually install this into your project. Excited to check it out!
via @calebd
Editor
protocol that we show when the user taps the screenshot from the Feedback screen.Editor
that is Pinpoint’s editor.The god object. This object takes a Configuration
and provides the developer with a way to invoke Pinpoint. See also #4 for discussion.
If you shake while we're already displaying a feedback view controller, it crashes with *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Application tried to present modally an active controller <PinpointKitExample.ViewController: 0x7feff8c333d0>.'
Is there a reason we're only using custom fonts in EditImageViewController
and not in FeedbackViewController
?
Allow the developer to sign up for UIApplicationUserDidTakeScreenshotNotification
to automatically open Pinpoint with the latest screenshot.
Ending the editing of text to allow an autocorrect that adds a space can result in a text annotation of the wrong size, hiding some text.
The text view should resize to fit the text post-correction
Autocorrection causes some text to hide
This occurs in both Pinpoint and PinpointKit
We need a project / workspace to work in. It should be set up in a way that allows the library to eventually be used as either: a Cocoapod, Carthage / manual installation, and eventually Swift Package Manager.
Requirements:
net.lickability
if one is needed. // TODO: http://stackoverflow.com/questions/25742944/whats-the-programmatic-opposite-of-showviewcontrollersender
Right now your only option out of editing a screenshot in Pinpoint kit is the X button, which is different than the pinpoint app, and the current alert doesn't make a lot of sense.
How should PinpointKit be initialized and invoked?
It could be passed a window
instance and be responsible for attaching its own gesture recognizers.
class AppDelegate {
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
self.window = UIWindow()
self.pinpointKit = PinpointKit(window: window)
}
}
PinpointKit
could also take other configuration options that would dictate e.g. which gesture recognizers it attaches to the window. We could also support shaking, though like in BugshotKit, this would require a UIWindow
subclass.
As requested in #19, we should make a sample project that integrates PinpointKit.
We should figure out what to do with errors, at least for 1.0. My vote is to just print 'em out for now.
The configuration type should allow the developer to configure:
LogCollector
to use (defaults to system log collector)Sender
to use (defaults to mail sender)Editor
to use (defaults to edit view controller)FeedbackViewer
to useLogViewer
to useOnce we’re completely finished with the release.
Off the top of my head, the various components that we’d need that can not be extracted from Pinpoint.app would be:
UIWindow
gesture recognizer integrationLogCollector
protocolLogViewer
protocolConcrete implementations for collection from system NSLog
and displaying the logs in a simple scrolling text view that can be pushed onto a nav stack.
All public
and internal
APIs should be documented. Make a pass at all types missing documentation, e.g. AssetViewModel
.
We should allow them to display in whatever orientation they were taken.
What should the interface from which the app can respond to reports created via PinpointKit look like?
In my quick-and-dirty attempt to rip out the email dependency from BugshotKit, I ended up with a delegate protocol that looks like:
@protocol BugshotKitDelegate
- (BOOL)bugshotKitShouldPresent;
- (void)bugshotKitDidSubmit:(nonnull BSKSubmission *)submission;
@end
@interface BSKSubmission : NSObject
@property (nonatomic, readonly, nonnull) NSString *appName;
@property (nonatomic, readonly, nonnull) NSString *appVersion;
@property (nonatomic, readonly, nonnull) NSString *modelIdentifier;
@property (nonatomic, readonly, nonnull) NSString *systemVersion;
@property (nonatomic, readonly, nonnull) UIImage *screenshot;
@property (nonatomic, readonly, nonnull) NSString *log;
@end
In my implementation of this delegate callback, I present a custom compose sheet that posts to Trello. One tricky part was determining which view controller I should present this Trello composer from. Perhaps the PinpointKit delegate protocol should pass the view controller that it presented itself from, so the delegate can easily make use of it afterwards (I am imagining PinpointKit will recursively walk the view controller hierarchy to determine where it should present from?).
These properties on InterfaceCustomization.Appearance
are never being used. They should be used to color the components in the editor.
Furthermore, perhaps the editor's view's tintColor
should match InterfaceCustomization.Appearance
's tintColor
. Right now it's the default blue tintColor
.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.