Download .IPA (5.3 MB)

App Link

Testing and Issues

You can test this app and submit issues during the testing period of the iOS Chart contest.

Install .ipa files via AltStore

Entries with serious issues will not be able to win the contest, but even minor issues might be important for overall results.


by rating


Graphs are too large and take almost all of the screen height.

Lines are rescaled only on tap release when changing time range. Average speed.
iPhone 6 Plus, iOS 12.1
Perfect Sheep Apr 27, 2019 at 16:32
Hey thanks for the fair review.

I thought it would be a good idea to make 1 graph + the header completely fit the screen on an average iPhone, so that you are not distracted by UI elements of the neighbor graphs, since there is no way to make 2 graphs fit the screen anyway.
It is capped at 617.0 pts (+ 50pts for the header, most of the iPhones have 667 pts height), so it takes the whole screen size only on iPhones with <=average height.
On iPhone 7+, 8+, X and on iPads it is not taking the whole screen.

Series are rescaled on touch up only when scaling. When scrolling they rescale as usual. I answered why here
Incorrect tooltip position on chart tapping (on all charts) - tap on left, tooltip on right
Perfect Sheep Apr 20, 2019 at 21:01
Thanks, it happens only when u tap because of frame animation cancel because of typo in code :(

It works fine when you move your finger, which is the most common scenario.
Incorrect preview focus position on percentage zooming (focus must be at the center, 3/7...4/7 of preview size)
Perfect Sheep Apr 20, 2019 at 20:34
It is true, but only for pie chart, since it is not finished. The slider there is not magnetic also.
Fair Quokka Apr 27, 2019 at 19:06
— As mentioned earlier, the graphs size is incorrect. 
— The app is slow when scrolling.
— The app supports iOS 11+ only.
iPhone 6s, iOS 12.0.2
There is no slice selection on pie tapping
Perfect Sheep Apr 22, 2019 at 02:38
True :( The pie chart is not finished and just provides the basic display.
All series deselects on long tap
Perfect Sheep Apr 20, 2019 at 21:40
True, misinterpreted the task 🤷‍, even wrote it as a feature on Testflight :(

The behavior is as follows: 
1) Long tap on any filter when at least one is checked
-> hides all
2) Long tap on any filter when none are checked
-> shows all

I saw that people are writing about hiding all OTHER series (instead of ALL) a bit before the deadline, made a 2 minutes "fix", had not enough time to push it :(

Would've saved me so much time also that I could've spent on pie, as I wouldn't have to implement the case where all the series are hidden and hide the axes as well. Spent like half a day on this one :( Shit happens 🤷
Deleted Account Apr 18, 2019 at 02:54
A minor issue with label positioning.
Perfect Sheep Apr 22, 2019 at 02:51
Woops. Made pie chart in the last 5 hrs before the deadline xd
Deleted Account Apr 18, 2019 at 03:04
The day starts at 02:00 after zooming in.
Perfect Sheep Apr 20, 2019 at 20:53
Thank you, noted.
Completely wrong chart height. It has to be 156 pt by design.
Sergey Dikovitsky Apr 17, 2019 at 20:57
Y-axis animation starts only on touch up. X-axis labels appear/disappear without animation.
iPhone 5s / iOS 12.2
Perfect Sheep Apr 22, 2019 at 02:33

About appear / disappear you are correct. Would've been nicer with them.

In contest 1 I had transition state for appearing/disappearing labels (that would have their opacity from 0 to 1, depending on how close are they to appearing/disappearing), but TG team didn't like that there was too many labels on the screen, so i removed the animation whatsoever. And never got back to adjust it.
Critical issue: 34 fps during 1st chart scaling on iPhone 6+, 33 fps on iPhone 5S. That's how I scale 1st graph (watch the video). And that's how I measure (look at the screenshot). I do not record the video and measure performance at the same time in order to get objective results. I choose only those fps values which I get during continuous scaling, average ones.
Perfect Sheep Apr 23, 2019 at 02:01
First off, i got 55 fps on my iPhone 6 (see video), so GJ turning power mode on. 

Second of all, CA Profiler is definitely not how you check for performance. It is unreliable in general and because it can show 0 fps when nothing is happening and it also takes the average between the update intervals, so if u would do some action in this interval and it captures 0 and 60, it would show 30 fps. Just like you see in the middle of my video when I stop scaling.

The only thing that matters is how it looks IRL on the device.

You just showed your incompetence and immaturity (by picking on some crap) here, so not even gonna reply to other issues, which are all duplicates and your subjective opinion on design anyway.

P.S. check your new issues and see what it means to create an objective issue.
No runtime animation chart by y
Perfect Sheep Apr 20, 2019 at 21:33
Design choice, true only when scaling, not scrolling. I stole this idea from the winners of the March Contest :D

It makes the app performant even on low-end devices and also looks neat to me – animating in 1 go after a user had chosen a needed scale, without the axes-values change animation spam.

You can see people complaining on other entries, that even the most well-made apps drop fps on bar charts when scaling. So its either this or that.

Btw, if you have noticed, the animations in the app are instant and smooth, without any delayed "smoothness".

In most other apps, they are delayed which reminds me of Exanima "drunken" combat. .

I had such animations in the March App, but it really annoyed me, so I decided to go with the behavior that you see now.
Y labels animation, and chart animation very differ in speed
Hi, good work :!
I have small question (I can ask it in most of works, but we already started our conversation 😅). 
In most work (including yours) time ends on 11 pm (23.00) of specific day in ANY timezone. Is it right? I think time should respect time zone where user located. 
If I’m wrong, I will remove this comment, because it won’t be issue.
iPhone XS Max/iOS 12/+7 time zone
Perfect Sheep Apr 20, 2019 at 20:44
Hey thanks :) I think it should respect the time zone, but then the data sets should be provided for this timezone, otherwise i would have to fetch a couple of points left and right from other 2 JSONs depending on the user timezone. Which is fine, but a bit out of scope for this contest.

Just for the sake of not having +- 2 hours on left and right I used GMT+0 here, since the given data and UI design rely on this coupling.
Sergey Dikovitsky Apr 17, 2019 at 20:59
Long tap on button hides all lines.
iPhone 5s / iOS 12.2
Perfect Sheep Apr 22, 2019 at 02:30
Sergey Dikovitsky Apr 17, 2019 at 21:04
Chart #2 should not have any buttons, but here it's possible to hide both lines. View with values can cover selected column.
iPhone 5s / iOS 12.2
Perfect Sheep Apr 20, 2019 at 20:45
- who said chart #2 should not have any buttons?
- the tooltip is centered when there is not enough space on the left and on the right (can happen only on iphones with the smallest screen width, like the one on the screenshot). Although i agree, could've made the tooltip scalable.
Deleted Account Apr 18, 2019 at 01:57
Charts don’t adjust themselves until you let the slider go.
iPhone SE, iOS12
Perfect Sheep Apr 22, 2019 at 02:35
Deleted Account Apr 18, 2019 at 02:06
Either the grid or the selection values are incorrect.
Deleted Account Apr 18, 2019 at 02:15
Zooming out resets selected filters.
Perfect Sheep Apr 22, 2019 at 02:48
It doesn't RESET them, it remembers where u've left off. Its a feature that I've dedicated some minutes to.

The behavior wasn't defined, i went with the one that seemed logical to me, so it's subjective.
Deleted Account Apr 18, 2019 at 02:34
Header displays range that differs from the actually visible range. It’s not possible in the attached case to select or see 22nd or 21st Feb.
Perfect Sheep Apr 22, 2019 at 02:50
Thanks for pointing that out. The code takes the left date from the visible active viewport (defined by the axis lines' width), but for the right date it doesn't. Inconsistent and should be fixed.
Deleted Account Apr 18, 2019 at 02:46
Values desync does not only appear on the scaled chart, e.g. here a plain line chart also displays a value of 120 under the grid line of 119.
Perfect Sheep Apr 22, 2019 at 02:36
Duplicate, I hope this is a joke :D

See response @
no support
iphone 5s; v.10.2
Perfect Sheep Apr 22, 2019 at 02:53
Apple guidelines state that you should not support old iOS versions. The minimum here is 11.0. 

Thats the reason iOS devs do not have to deal with android/js issues, where something doesn't work as expected on some brick from 2009.
And also there is almost never a reason to not keep your device updated to the last iOS :)
Лейсан Apr 19, 2019 at 08:37
In 5th chart zoom in doesn’t zoom you in the selected date, instead it zooms you in range of dates
iPhoneX, iOS12
Perfect Sheep Apr 22, 2019 at 02:28
Triplicate issue about unfinished pie chart. See
101% after sum all parts
iphone 6s, v.12.2
Perfect Sheep Apr 22, 2019 at 02:57
Pretty surprised to see this, since I have implemented an algorithm for getting 100% always. Quickly tested it myself and never saw != 100%.

Thanks, will look into it :)

p.s. Never steal from StackOverflow without testing the code extensively, boys :D
Лейсан Apr 19, 2019 at 08:41
Again 5th chart. The percents in zoomed out date sometimes do not match the percents in zoomed in date.
Also 99% and 101%?) interesting)
IPhoneX, iOS12
Perfect Sheep Apr 22, 2019 at 02:36
Duplicate issue :) See
However these 2 are posted with 2 minutes difference, so no hard feelings :)
Will look into it.
use commas as separators for numbers
not as designed
iphone 6s, v.12.2
Perfect Sheep Apr 22, 2019 at 02:58
Probably the biggest issue of all :D Commas look nicer than spaces, imho. Additionally, they save screen space.

Had such display since March Competition, never thought about changing it, although in design it is indeed different.
X label positions are wrong.
iPhone SE
Perfect Sheep Apr 21, 2019 at 02:19
Dates positions are never wrong, they are aligned to the label origin. So the value is where the label starts.

Although might be misleading for a user, but at least it is consistent. I had some reasons to do it that way :)
Y label values are not nice.
iPhone SE
Perfect Sheep Apr 21, 2019 at 00:49
No comment here :D
Sometimes show/hide graph and dots animation is bugged.
iPhone SE
Perfect Sheep Apr 21, 2019 at 00:49
Valid point. Animation functions are not synced. Thanks :)
First time Info view appeares from outside.
iPhone SE
Perfect Sheep Apr 22, 2019 at 03:00
That is a feature (not an issue) that i spent some time on, which also causes the very first issue. 

I didn't like how fading in looks when the tooltip appears on the left/right from the line, so moving it in from outside seemed to look cooler to me, which is indeed cooler, but its bugged xd (see first issue)

There was some app that had the tooltip appear via scaling down + opacity and disappearing via scaling up with opacity, that was really cool, should've thought about it myself.
No right date label when full selection
iPhone SE
Perfect Sheep Apr 21, 2019 at 02:22
Why should it be there? I start from the left label and add powers of 2.

The maximum labels count depends on your screen width. So on iPad you will get many more labels in default state, for example.

On your screenshot - the best power of 2 was to show 3 labels for this amount of points to display. When u scale just a bit u will get around 5-6.

However again, I agree that could be improved, and in other apps there are some better approaches. But still, it is not an issue.
Values in info view have random order?
iPhone SE
Perfect Sheep Apr 21, 2019 at 00:56
Values are sorted descending on every chart, except zoomed in 4th chart.
Y label animation is not correct, they go not to/from actual positions, but just from top or bottom.
iPhone SE
Perfect Sheep Apr 22, 2019 at 02:14
They work like a default UIPickerView on iOS, the axis values that increased go down one level, the ones that got lower - go up one level, as in design. Looks really well, stole it from the March Contest winners as well.

They can go both sides as well, if the min and max both have changed at the same time.

Compare my app (video 1), where you can actually always see the number on the axis and follow it, with a classic implementation of 90% of other apps (video 2).

Tell me what is better, and think again if this is an issue.
Deleted Account Apr 21, 2019 at 09:43
# All charts
- Value of 130 should definately be slighlty above the 127 line, but it is slighly below in the example (1.PNG). Being accurate with presenting the data is kind of the main point of this whole thing. This has been reported before, this is just another example.
- No arrow on zoom out button (1.PNG).
- The circle of selected point on the chart is too big (1.PNG).
- Lines get clipped around 0 (1.PNG).
- Anamation of range change and max/min change is done in two distinct steps, its easier to do than to animate them both at the same time. (range_animations.MP4, range_animations_2.MP4) The author explains this to be a design choice, I believe it to be not implemented, because its simply harder to do. And this choice leads to poor experience like in range_animations_2.MP4. Sorry to be reporting this like for the 4-th time here.
- No separators above and below chart. (1.PNG) Doing "tableView.separatorStyle = .none" is easy, try hiding separators only where they need to be hidden.
iPhone SE / iOS 12
Perfect Sheep Apr 22, 2019 at 02:09
1. See response to your next issue
2. True. Time priorities.
3. Might be, not sure
4. You are right, thats kind of ugly, my mistake
5. No problem. Im sure it will be reported 10 more times, since people have a problem with that, because that is not the way they did it.
They are not animated in 2 different steps. I explain how it works:
While the animation by y is already on -> do no new calculations unless you ended the pan or started it. Otherwise -> remove previous anim and queue the final one to ensure correct display.
On the second video - this is actually a case that is not handled. You are scrolling and keeping the finger on, some calculations got cancelled because there was already an anim in progress but you just keep the finger on and not do any actions. So there is no new update. This is not cool i agree, should be fixed, although a rare case. As soon as you release the finger or move - you get correct display again.
6. Subjective. cell.directionalLayoutMargins = .zero, not that hard.
Deleted Account Apr 21, 2019 at 09:44
# Chart 2
- Values could have been rounded a little prettier (2.jpeg). Has been reported, just another example.
- Some Y values are impossible to read because of their color (2.jpeg).
- 1930 is like way below the 1.9k line, which is truly inaccurate (3.jpeg). Another example, but there clearly is a problem, in spite the author trying to talk his way out of it.
iPhone SE / iOS 12
Perfect Sheep Apr 21, 2019 at 13:24
> Some Y values are impossible to read because of their color (2.jpeg).

Literally in every app is like this. Followed the provided design. So its either this "issue" or you create another one - "doesnt follow the design". 

> Values could have been rounded a little prettier 
> 1930 is like way below the 1.9k line

Here is the screenshot of the same range as on your second screenshot without rounding. If i leave it like this -> you guys complain about not pretty values, if i make them a bit prettier -> u complain that the data is incorrect.

Literally out of all these 30 issues there are only a few that are actual issues, and others are just picking on the app using some subjective points of view :)

You might wanna take a look at other entries where I have reported some issues -> those are some real issues, not the types of " i dont like this date labels animation, because I BELIEVE it should be different", or "the values are not pretty".
Y axis transition distance always the same, not related to chart difference in scale. It always transits from neighbor line.
iPhone 6s / iOS 12.2
Perfect Sheep Apr 22, 2019 at 02:23
X axis has no fade-in/fade-out animation
iPhone 6s / iOS 12.2
Perfect Sheep Apr 22, 2019 at 02:33
Tooltip rows ordered by values descending instead of static order of bottom filters and cause frequent replacements which makes hard to track some legend.
iPhone 6s / iOS 12.2
Perfect Sheep Apr 22, 2019 at 02:23
Duplicate issue, yet again. No specification was provided for this. See

Imho, this is not a usage scenario for the tooltip. If u wanna see the overall trend - then this is what the chart and filters are for.
For me, the tooltip is to examine a single value, in which case I would want to see it sorted. If you were the client, and said that you want it not sorted, then I would make it so, it wouldn't even require any extra logic, but you are not the client.

In 4th chart zoomed in state they are sorted by index, because it is logical there, and this is exactly the case where you would want to compare values using the tooltip.

Anyway it is neither a bug, nor an objective issue.
Many inaccuracies in design
iPhone 6s / iOS 12.2
Perfect Sheep Apr 21, 2019 at 18:52
Does not support iOS 8. Telegram does.
Major issue: does not support iOS 10.
MaxY on chart has to be on the same position as y-coordinate of the highest y-value by design
Major issue: there is no y-scaling until you release your finger from the slider. Thus UX is suffering and this contestant gains major advantage in performance over other participants.
Wrong height of selection line. Wrong number format on tooltip.
iPhone X, iOS 12.2
More about measuring performance.
CA Profiler is very good at measuring performance in most cases. The only thing you need to do is doing your actions continuously.
Your animations may look smooth enough for you, but if your solution is not performant enough you will see objectively low fps in profiler.
When you use standard drawing techniques you get less bugs and standard performance (not good enough for this contest).
Perfect Sheep Apr 23, 2019 at 12:58
no its not good, time profiler is good

these arguments are completely irrelevant, just like in some other entry u send a screenshot where everything looks ok, then zoom it 4x and say that there is not enough polygons on the line and make a wall of text about Metal xd

and if I or somebody else uses non-standard drawing techniques you will say - this contestant uses non-standard drawing techniques, which gives him an advantage :D Just like with the Metal guy, so that means you are just here to pick on anything, whatever it is, but u have to create issues.

but hey when there is one week to make an app, its best to make it good and working properly, without bugs, instead of optimizing some insignificant stuff which is not visible to the user.

I can guarantee that any user will chose an app that works smooth (no matter what CA profiler shows) and has no bugs, over an app that works the same smooth(but with higher fps in CA Profiler) but has a lot of visual bugs.
Long tap is sooo long. Press duration is half sec. You should set minimumPressDuration in 0.2 to improve user experience.
Perfect Sheep Apr 23, 2019 at 20:55
Thanks, i think now its either 0.5 sec or 0.75. I think its better to long press a bit longer than sometimes make accidental long presses. But maybe you are right. Its a bit subjective.
Sometimes I cannot move slider view when it's in small state. I think slider accuracy is important for great user experience.
Perfect Sheep Apr 23, 2019 at 20:54
Its a tradeoff between min range and slider responsiveness. I made extended edges only from the outer sides. I think even on the small range it works pretty nice :)
"No Data" state is required.
iPhone X
Perfect Sheep Apr 23, 2019 at 20:53
Required where?
I selected Apr 23 and expected to see values for Apr 23.
iPhone X
Perfect Sheep Apr 23, 2019 at 20:52
Hey, thanks for your feedback. It is a duplicate
Nobody added any issues yet...