• Stars
    star
    181
  • Rank 212,110 (Top 5 %)
  • Language
    Objective-C
  • License
    Other
  • Created over 10 years ago
  • Updated over 7 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Attributes for your code

License Platform Version Coverage Status Build Status

libObjCAttr - attributes for your code

libObjCAttr is attribute-oriented programming for Objective-C language. It is compile-time based with the support of Xcode auto-completion and errors tracing features. We nailed every aspect of the implementation including performance, so attributes will never be a bottleneck.

Our solution helps reduce the complexity of code, makes it compact and self-documented. There are a lot of languages with attributes support, we added Objective-C into that list.

Installation

CocoaPods is the only recommended way of libObjCAttr integration. Besides standard configuration of pod dependencies, pod_install hook is required as shown below. A typical Podfile will look as follows:

pod 'libObjCAttr'

post_install do |installer|
    require File.expand_path('ROADConfigurator.rb', './Pods/libObjCAttr/libObjCAttr/Resources/')
    ROADConfigurator::post_install(installer)
end

Note: If you want to get rid of warning from Xcodeproj gem, copy-paste and run in terminal next command before running pod install:

export COCOAPODS_DISABLE_DETERMINISTIC_UUIDS=YES

Samples

It is super easy to mark your code with an attribute. We currently support 4 types of attributes:

  • Class attributes
  • IVar attributes
  • Method attributes
  • Property attributes

Check out this example to get to know how to declare them:

RF_ATTRIBUTE(MyAttribute, stringProperty = @"Hello world")
@interface AnnotatedClass : NSObject {

    RF_ATTRIBUTE(MyAttribute, numericProperty = @9000)
    NSObject * _someField;
}

RF_ATTRIBUTE(MyAttribute, blockProperty = ^(int value) { return value; })
- (void)foo;

RF_ATTRIBUTE(MyAttribute, objectProperty = [NSObject new])
@property NSString *name;

@end

An attribute can be any class inherited from NSObject or its subclasses. It may or may not have properties.

#import <ROAD/ROADAttribute.h>

@interface MyAttribute : NSObject

@property NSString *stringProperty;
@property NSNumber *numericProperty;
@property (copy) id blockProperty;
@property id objectProperty;

@end

Now you can get them in runtime with code like this:

...

NSArray *classAttributes = [AnnotatedClass RF_attributesForClass];
NSArray *ivarAttributes = [AnnotatedClass RF_attributesForIvar:@"_someField"];

// Let's filter it, in case there are many of them
MyAttribute *methodAttributes = [AnnotatedClass RF_attributeForMethod:@"foo" withAttributeType:[MyAttribute class]];
MyAttribute *classAttributes = [AnnotatedClass RF_attributeForProperty:@"name" withAttributeType:[MyAttribute class]];

...

Also check out an info about an attribute generator, that makes all behind the scene magic.

Requirements

libObjCAttr requires iOS 5.0 and above. The compatibility with 4.3 and older is not tested.

libObjCAttr was initially designed to use ARC.

Solutions powerd by LibObjCAttr

Contact

Follow LibObjCAttr on Twitter (@LibObjCAttr)

License

libObjCAttr is made available under the terms of the BSD-3. Open the LICENSE file that accompanies this distribution to see the full text of the license.

Contribution

There are three ways you can help us:

  • Raise an issue. You found something that does not work as expected? Let us know about it.
  • Suggest a feature. It's even better if you come up with a new feature and write us about it.
  • Write some code. We would love to see more pull requests to our framework, just make sure you have the latest sources.

More Repositories

1

ketcher

Web-based molecule sketcher
TypeScript
481
star
2

mriviewer

MRI Viewer is a high performance web tool for advanced 2-D and 3-D medical visualizations.
JavaScript
329
star
3

Indigo

Universal cheminformatics toolkit, utilities and database search tools
C++
314
star
4

UUI

React-based components and accelerators library built by EPAM Systems.
TypeScript
179
star
5

NGB

New Genome Browser (NGB) - a Web - based NGS data viewer with unique Structural Variations (SVs) visualization capabilities, high performance, scalability, and cloud data support
Java
161
star
6

OSCI

Open Source Contributor Index
Python
157
star
7

CoroutinesCache

In mobile development exists solution for caching with RxJava usage, but there is no solutions for Kotlin Coroutines. The project is to provide this functionality to mobile community.
Kotlin
156
star
8

cloud-pipeline

Cloud agnostic genomics analysis, scientific computation and storage platform
Java
145
star
9

JDI

Try JDI Light https://github.com/jdi-testing/jdi-light
Java
143
star
10

nfstrace

Network file system monitor and analyzer
C++
139
star
11

miew

3D Molecular Viewer
JavaScript
136
star
12

edp-install

Start from the KubeRocketCI (a.k.a. EPAM Delivery Platform) main page. This repository contains the Helm Chart templates that describe the installation of the main configuration (e.g. database registration, user creation in a database, etc.), which cannot be subsumed to the corresponding operator or allotted to the repository
Smarty
88
star
13

CoroutinesExtensions

To modify data RxJava provides a lot of methods, but Kotlin Coroutines doesn’t have them. This library’s goal is creating functions that will provide users possibility to use the same functional as in RxJava
Kotlin
79
star
14

java-cme-mdp3-handler

Java Market Data Handler for CME Market Data (MDP 3.0)
Java
74
star
15

parso

lightweight Java library designed to read SAS7BDAT datasets
Java
72
star
16

ai-dial-chat

A default UI for AI DIAL
TypeScript
59
star
17

aws-syndicate

Syndicate deployment framework
Python
58
star
18

road-ios-framework

ROAD – Rapid Objective-C Applications Development
Objective-C
56
star
19

ai-dial-core

The main component of AI DIAL, which provides unified API to different chat completion and embedding models, assistants, and applications
Java
56
star
20

pipeline-builder

Pipeline Builder is a JavaScript library for visualizing and constructing bioinformatics workflows, using Workflow Description Language (WDL)
JavaScript
55
star
21

Wilma

Service Virtualization Solution – a combined Service Stub and Transparent Proxy
Java
52
star
22

ai-dial

Documentation for AI DIAL
Jupyter Notebook
39
star
23

sitecore-headless-commerce-accelerator

EPAM Headless Commerce Accelerator for Sitecore Experience Commerce
C#
38
star
24

xframework

XFramework, or XF, is a small but powerful HTML5 JavaScript framework for building truly cross-platform web applications that will work on mobile phones, tablets, desktop computers, and even Smart TVs.
JavaScript
38
star
25

gflog

Highly efficient garbage-free logging framework for Java 8+
Java
37
star
26

SciGlass

The database contains a vast set of data on the properties of glass materials.
37
star
27

aws-ci-cd-accelerator

HCL
34
star
28

edp-keycloak-operator

It is responsible for establishing a connection to provided Keycloak Server, reconciling realms, and clients according to the created CRs
Go
34
star
29

fix-antenna-net-core

FIX Antennaâ„¢ .NET Core is a high-performance low latency .NET FIX Engine.
C#
33
star
30

badgerdoc

Python
33
star
31

eco-kafka-manager

Java
31
star
32

TimebaseCryptoConnectors

TimeBase Crypto Market Data Connectors
Java
31
star
33

Android-Secure-Storage

Secure android storage to keep private information safe
Java
27
star
34

ai-dial-sdk

Framework to create applications and model adapters for AI DIAL
Python
24
star
35

epam-graphql

C#
22
star
36

Gepard

Test Automation Framework
Java
18
star
37

Indigo-ELN-v.-2.0

Indigo - The Open-Source Chemistry Electronic Lab Notebook
Dockerfile
16
star
38

lifescience

Documentation on EPAM Life Sciences open source solutions
CSS
16
star
39

sitecore-engx-scaffold

JavaScript
13
star
40

eco-schema-catalog

Eco Schema Catalog
Java
13
star
41

ai-dial-helm

EPAM AI DIAL Helm Repository
Smarty
13
star
42

OneDrive-L

OneDrive for Business Linux client
Python
13
star
43

libdt

libdt
C
12
star
44

covid-resistance-mobile

COVID Resistance – Mobile
C#
12
star
45

wdl-workspace

Web-based User Interface to run WDL bioinformatics workflows using Cromwell server
JavaScript
11
star
46

headless-commerce-salesforce-accelerator

Headless Commerce Accelerator for Salesforce Commerce Cloud
JavaScript
11
star
47

TimebaseOrderBook

This library provides lightweight and garbage-free order book component for Java11+
Java
10
star
48

clocks

Web application which allows to create a dashboard with widgets that shows the time and time zones for selected locations
TypeScript
10
star
49

edp-headlamp

Portal UI for the KubeRocketCI platform inspired by Headlamp
TypeScript
10
star
50

edp-cluster-add-ons

This repository contains a collection of pre-configured solutions for the KubeRocketCI Kubernetes Cluster deployments. It follows the GitOps methodology and utilizes the ArgoCD App of Apps pattern for streamlined configuration and deployment.
Smarty
10
star
51

hubctl

Hub CTL is stack composition and lifecycle tool
Go
10
star
52

ai-dial-assistant

Model agnostic assistant/addon implementation for AI DIAL. It allows to use self-hosted OpenAI plugins as DIAL addons
Python
9
star
53

TimebaseWS

TimeBase REST/WS backend
Java
8
star
54

fonda

Fonda is a framework which offers scalable and automatic analysis of multiple NGS sequencing data types
Java
8
star
55

ai-dial-adapter-openai

The project implements AI DIAL API for language models from Azure OpenAI
Python
8
star
56

Imago

2D chemical structure image recognition toolkit
8
star
57

edp-sonar-operator

It installs the Sonar EDP Component on a cluster for continuous inspection of a codebase code quality
Go
8
star
58

hub-toolbox

Toolbox Docker image
Dockerfile
7
star
59

TimeBaseTutorial

TimeBase tutorial
Java
7
star
60

edp-nexus-operator

It installs the Nexus EDP Component on a cluster to store/manage artifacts of codebases. It also exposes configuration that allows Nexus to perform with other EDP components
Go
7
star
61

Containers

Collection of handy data structures and algos for C#/Java specially designed for GC-free programming. ObjectPools, MutableBlobs, MutableStrings, BinaryHeaps, Linked Lists, Trees, fast memory copy, fast hash calculators and others.
C#
6
star
62

sdmxsource

Java
6
star
63

edp-library-pipelines

A Jenkins shared-library for the reference EDP pipelines
Groovy
6
star
64

covid-tracing-bluetooth-poc

Kotlin
6
star
65

JDI-Examples

Examples for JDI Framework
Java
6
star
66

ai-dial-adapter-bedrock

The project implements AI DIAL API for language models from AWS Bedrock
Python
6
star
67

ai-dial-adapter-vertexai

The project implements AI DIAL API for language models and embeddings from Vertex AI
Python
6
star
68

htsjdk-s3-plugin

HTSJDK plugin for multihreaded loading of SAM/BAM files stored in AWS S3
Java
6
star
69

ai-dial-ci

Continuous Integration instrumentation for AI DIAL components
6
star
70

ai-dial-chat-themes

Static content and UI customizations for default AI DIAL UI
Makefile
6
star
71

TimeBaseCommons

Set of utilities common for timebase projects
Java
5
star
72

eco-commons-avro

Eco Commons Avro
Java
5
star
73

Sitecore-Reference-Storefront-on-Habitat

Sitecore Reference Storefront ported to Sitecore Habitat
C#
5
star
74

atg-build-plugin

Groovy
5
star
75

edp-ddm-architecture

Handlebars
5
star
76

osci-working-group

This is the main OSCI community repository. Here we post meeting notes from working group's sessions, and other community-related documentation.
5
star
77

edp-jenkins-operator

This operator creates, deploys, and manages the EDP Jenkins instance on Kubernetes and OpenShift. In addition, the Jenkins instance is equipped with the necessary plugins. There is also the ability to customize the Jenkins instance as well as to check the changes during the application creation
Go
5
star
78

covid-resistance-back-end

COVID Resistance – Back-End
C#
5
star
79

eco-commons-kafka

Eco Commons Kafka
Java
5
star
80

openvasp-java-client

A reference implementation for a JAVA client for the OpenVASP standard. Not yet compatible with the current OpenVASP protocol version.
Java
5
star
81

edp-ddm-notification-service

Java
4
star
82

edp-gerrit-operator

This operator installs and manages Gerrit EDP Component in order to use it as GitProvider and store codebases code
Go
4
star
83

model_garden

EPAM accelerator to spread-up Computer Vision DataSet preparation for Machine Learning model training.
Python
4
star
84

grid-engine-api

Java
4
star
85

HdDateTime

Date & Time Classes for Java & .NET having nanosecond precision, mostly match the functionality of .NET DateTime/TimeSpan, but have no timezone support and greater performance.
C#
4
star
86

TimeBaseGrafanaPlugin

TimeBase datasource for Grafana
TypeScript
4
star
87

TimeBaseClientPython

Python client samples for TimeBase
Python
4
star
88

openvasp-java-host

A reference implementation for a JAVA host for the OpenVASP standard. Not yet compatible with the current OpenVASP protocol version.
Java
4
star
89

ai-dial-analytics-realtime

Realtime analytics server for AI DIAL. The service consumes the logs stream AI DIAL Core, analyzes the conversation and writes the analytics to InfluxDB
Python
4
star
90

ember-python-fix-sample

Example of sending test order from Python using QuickFIX/Python library
Python
4
star
91

ThreadAffinity

A Java wrapper over net.openhft:affinity providing handy classes to create threads pinned to the specified CPUs.
Java
3
star
92

indigo-node

NodeJS bindings for Indigo Universal Cheminformatics Toolkit
JavaScript
3
star
93

eco-commons

Eco Commons
Java
3
star
94

ai-dial-auth-helper

Authentication helper for AI DIAL
Java
3
star
95

edp-ddm-excerpt-service-api

Java
3
star
96

edp-architecture

This repository contains the general architecture of EPAM Delivery Platform
3
star
97

deps-fe-usePolling

TypeScript
3
star
98

edp-codebase-operator

This operator prepares codebase repositories in order to use them in CI/CD process
Go
3
star
99

edp-library-stages

A Jenkins shared-library for the reference EDP stages
Groovy
3
star
100

Lagerta

Lagerta is an open source transactional data transport. It supports light snapshots creation and management for in-memory data grids and fabrics.
Java
3
star