I don't know all the names of your objects and schemas so it's difficult to explain so here's an example:

The object and table owner is DEV and the other schema that will access the table and object is SCOTT:

Connect as DEV:

create type test1_type as object (id number(10), description varchar2(50));
/

create table test1_tab (
id NUMBER(10),
test1_col test1_type);

grant select, insert, update, delete on test1_tab to scott;
grant execute on test1_type to scott;

Connect as SCOTT:

create synonym test1_tab for dev.test1_tab;
create synonym test1_type for dev.test1_type;

insert into test1_tab(id, test1_col) values (1, test1_type(1, 'ONE'));

This should explain how you need to approach it. If lots of schemas are going to need access to this table you may want to substitue the synonym for a public synonym. This saves you defining it for each referencing schema.

Cheers