Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Alpha-version Architecture Plan #167

Closed
traviskirton opened this issue Oct 13, 2014 · 6 comments
Closed

Alpha-version Architecture Plan #167

traviskirton opened this issue Oct 13, 2014 · 6 comments

Comments

@traviskirton
Copy link
Collaborator

We should have a new plan for rebuilding an alpha-version of the Swift branch.

Questions:

  • what does an architecture plan for this look like?
  • can we use this plan to build out other components?
  • can we include options for "plug-ins"?
  • what does the current architecture plan look like? (i.e. i know there isn't one, but if there were one for the current version...)
  • what holes are there in the current plan?
  • what strengths are there in the current plan? and, can we reuse those?
@traviskirton traviskirton added this to the Engineering Roadmap milestone Oct 13, 2014
@alejandro-isaza
Copy link
Member

Here are some ideas:

  • Make C4 be like an extension to interface builder. I really like this idea but Xcode still has limited support for this. I need to spend some time looking into creating a plugin for Xcode so that we have more flexibility. This would allow you to drag and drop shapes in a storyboard, and drag and drop behaviours. We can use http://www.objc.io/issue-13/behaviors.html as a starting point.
  • Alternatively we can concentrate on making CoreAnimation and CoreImage more accessible, this is kind of what we have right now. Make animations, shape creation, and filters easy tasks.

Either way it would help if we had a concrete direction. Like a set of problems we want to be able to tackle with C4.

@traviskirton
Copy link
Collaborator Author

Definitely. The idea of the objc.io article is pretty interesting... It shows the concept really clearly, and a great starting point for a discussion. At first it's pretty clear that there will be some issues with "uptake" simply because IB is a beast to learn. But, thinking about that article as an example rather than a solution, I think there's some legs here on how we could approach design without coding via IB – which will be really powerful.

@traviskirton
Copy link
Collaborator Author

Interesting talk by a guy from Facebook, he discusses architectures of UIKit and the problems they ran into when building FB's Paper app: https://www.youtube.com/watch?v=h4QDbgB7RLo

It starts to get technically interesting around 20:00

Also, he speaks slow so it's pretty easy to watch at 2x speed.

@traviskirton
Copy link
Collaborator Author

The Old Frameworks
I looked at the frameworks currently in C4, and went through their reference docs to see if there was anything new or interesting that we could consider as additions. Here are my raw thoughts, we could talk about them on Wed:

Accelerate

  • math functions
    • should use native ones?
    • abs()
    • or math.abs(), math.fabs()?
    • addition methods in similar fashion
    • constrain()
    • means writing functions similar to base-level…
    • toRGB(), fromRGB()
    • vectors
    • create operators instead of .add()

AVFoundation

  • players and recorders for both video and audio
    • export for both, with options
  • objects
    • should they contain their own player objects?

Foundation

  • dates + formatters (new kind of object?)
  • timers
  • urls
    • urlcomponents
    • connections
    • requests
    • responses
    • sessions
  • xml
    • parser

Core Graphics

  • only when / what we need

Core Image

  • detectors
    • CIFeature
    • CIFaceFeature
  • filters
  • Vec > CIVector translation

Core Media

  • time
  • audio / video format descriptors (basic, read-only?)

Core Text

  • whatever we need, nothing special to draw out

Quartz Core

  • advanced animation construction > keyframes?
  • replicators
  • tiles
  • transforms
  • CAValueFunctions < might use this?

UIKit

  • shadow objects?
  • text containers
  • sensors
    • uiacceleration
    • uiaccelerometer
  • bar items?
  • bezier paths
  • UIDynamicAnimator
  • UIDynamicBehavior
    • attachment
    • collision
    • gravity
    • push
    • snap
  • fonts
    • font descriptors?
  • gestures
    • as per Al’s newer style?
  • image assets
    • down the line, when we need to get specialized enough to define “use image A when, otherwise use image B”
  • UIMotion
  • UIPercentDrivenInteractiveTransition
  • UIScreen
    • self.screen?
    • Screen?
  • UIVisualEffectView

@traviskirton
Copy link
Collaborator Author

New Frameworks
Here's s list of potential frameworks to consider adding to C4.

  • Photos
    • easily grab media from the photos app
  • Camera
    • manual camera control, could add to current camera class
  • SceneKit
    • add 3D objects to a screen
    • e.g. maybe a 3D shape
  • CoreLocation
  • CoreMotion
  • SpriteKit
    • add simple sprites
  • VideoToolbox
    • could help with camera recording
  • TextKit
  • Maps
  • Multipeer
  • HealthKit
  • HomeKit

@traviskirton
Copy link
Collaborator Author

We decided to do the following:

. start by converting CoreGraphics and CoreImage
. then work on other core media types like video / audio /
. step away from using CG stuff directly (e.g. we have our own version of CGRect, etc.)
. use doubles everywhere

We will revisit prior to mid-nov to see where development has gone.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants